토큰 인증
토큰 인증 (Token authentication)
token 인증 방법은 Vault에 내장되어 있으며 클라이언트 인증의 핵심입니다. 다른 인증 방법으로도 클라이언트를 인증할 수 있지만, 결국에는 token 백엔드가 관리하는 클라이언트 토큰이 생성됩니다.
출처: 문서
본문
모든 토큰에는 여러 속성(property)이 있습니다.
- ID — 토큰의 기본 ID는 무작위로 생성된 값입니다.
- 표시 이름(Display Name) — 선택적으로 사람이 읽을 수 있는 표시 이름입니다.
- 메타데이터(Metadata) — 감사 로깅에 사용되는 메타데이터입니다.
- 사용 횟수(Number of Uses) — 선택적으로 제한된 사용 횟수입니다.
- 부모 ID(Parent ID) — 선택적으로 이 하위 토큰을 만든 부모 토큰입니다.
- 정책(Policies) — 연결된 ACL 정책 목록입니다.
- 소스 경로(Source Path) — 토큰이 생성된 경로입니다(예:
auth/github/login).
토큰의 속성은 한번 생성되면 변경할 수 없습니다. 이 규칙의 예외는 사용 횟수인데, 요청할 때마다 감소합니다. 이 속성들 덕분에 Vault는 여러 가지 유용한 기능을 수행할 수 있습니다.
각 토큰은 토큰을 만드는 데 사용된 소스 경로, 즉 로그인 경로를 유지합니다. 이 경로는 소스 기반 폐기(source based revocation)를 가능하게 하는 데 사용됩니다. 예를 들어 GitHub 조직이 침해당했다고 판단되면 auth/github/login을 통해 생성된 모든 토큰을 폐기하고 싶을 수 있습니다. 이 경우 auth/github/ 프리픽스로 sys/revoke-prefix/ API를 사용하면 됩니다. 프리픽스를 폐기하면 해당 경로에서 생성된 모든 클라이언트 토큰과 그 토큰들이 생성한 모든 동적 시크릿이 함께 폐기됩니다. 이는 잠재적 침해 상황에서 강력한 "비상 탈출(break glass)" 절차를 제공합니다.
다른 인증 방법으로 토큰을 만들면 부모 토큰이 없습니다. 하지만 auth/token/create API로 생성된 토큰은 부모 토큰, 즉 그 요청을 보낼 때 사용한 토큰을 가집니다. 이 부모-자식 관계를 유지함으로써 Vault는 토큰 트리(token tree)를 모델링합니다. 하위 토큰은 부모 정책의 일부(부분집합)만 가지고 만들 수 있어서 권한을 낮출 수 있습니다.
부모와 같은 네임스페이스에서 Vault가 하위 토큰을 만들 때 명시적 정책을 제공하지 않으면, 하위 토큰은 부모 토큰과 연결된 모든 정책을 상속합니다. 다른 네임스페이스에서 만들어진 하위 토큰은 부모 네임스페이스의 정책을 자동으로 상속하지 않습니다. Vault는 대상 네임스페이스에 대해 명시적으로 요청된 정책과, 해당되는 경우 default를 할당합니다. 토큰을 폐기하면 Vault는 그 토큰의 전체 하위 트리도 함께 폐기합니다. 이를 통해 클라이언트는 하위 토큰을 안전하게 생성한 뒤 루트와 함께 모두 폐기할 수 있습니다.
하위 토큰은 특히 제한 사용(limited use) 토큰과 결합할 때 매우 유용합니다. 토큰을 생성할 때 사용 횟수를 선택적으로 지정할 수 있습니다. 사용 횟수를 1로 지정하면 *일회용 토큰(one time token)*이 됩니다. 즉 이 토큰은 자동으로 폐기되기 전까지 단 한 번의 요청에 사용될 수 있습니다. 이는 임의의 사용 횟수로 일반화할 수 있습니다. 제한 사용 토큰은 하위 토큰을 만드는 데 사용할 수 없지만, Vault에 극도로 제한된 접근을 허용하는 강력한 방법이 될 수 있습니다.