Vault로 토큰 생성

Vault로 토큰 생성 (Generate tokens with Vault)

HashiCorp Vault에는 단기(short-lived) Nomad 토큰을 생성하는 시크릿 엔진이 있어요. Vault는 여러 인증 백엔드를 갖추고 있으므로, 사용자나 오케스트레이션 시스템이 기존 아이덴티티 서비스(LDAP, Okta, Amazon IAM 등)로 인증하여 단기 Nomad 토큰을 얻는 워크플로우를 제공할 수 있어요.

출처: 문서

본문

HashiCorp Vault는 자체적인 배포·구성 모범 사례를 가진 독립형 제품이에요. 프로덕션에 배포하기 전에 Vault Deployment Guide를 검토해야 해요.

Vault의 Nomad 시크릿 엔진을 구성하려면 다음이 필요해요:

  • ACL 시스템이 부트스트랩된 Nomad 클러스터.
  • 관리 토큰. (bootstrap 토큰을 사용할 수 있지만, 프로덕션 시스템에서는 통합별 토큰을 사용해야 해요.)
  • Nomad에 생성된 정책 집합.
  • v0.9.3 이상을 실행하는 봉인 해제된(unsealed) Vault 서버.

평가 목적으로 "dev" 모드의 Vault 서버를 사용할 수 있어요.

==> Vault server configuration:

                     Cgo: disabled
         Cluster Address: https://127.0.0.1:8201
              Listener 1: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", tls: "disabled")
               Log Level: info
                   Mlock: supported: false, enabled: false
        Redirect Address: http://127.0.0.1:8200
                 Storage: inmem
                 Version: Vault v0.8.3
             Version Sha: a393b20cb6d96c73e52eb5af776c892b8107a45d

==> WARNING: Dev mode is enabled!

In this mode, Vault is completely in-memory and unsealed.
Vault is configured to only have a single unseal key. The root
token has already been authenticated with the CLI, so you can
immediately begin using the Vault CLI.

The only step you need to take is to set the following
environment variables:

    export VAULT_ADDR='http://127.0.0.1:8200'

The unseal key and root token are reproduced below in case you
want to seal/unseal the Vault or play with authentication.

Unseal Key: YzFfP...
Root Token: f84b587e-...

Nomad 시크릿 엔진 구성

Vault에서 nomad 시크릿 백엔드를 활성화해요:

Success! Enabled the nomad secrets engine at: nomad/

이전 Vault 버전에서는 vault mount 명령을 사용해야 할 수 있어요.

Successfully mounted 'nomad' at 'nomad'!

Nomad 시크릿 백엔드를 활성화한 후 Nomad 주소와 관리 토큰으로 접근을 구성해요:

    address=http://127.0.0.1:4646 \
    token=adf4238a-882b-9ddc-4a9d-5b6758e4159e
Success! Data written to: nomad/config/access

Vault 시크릿 엔진에는 역할(role)이라는 개념이 있어요. 역할은 하나 이상의 Vault 정책을 잠재적 아이덴티티 속성(예: LDAP 그룹 멤버십)에 그룹화하는 구성 단위예요. 역할 이름은 경로에 지정되고, 정책 매핑은 쉼표로 구분된 목록으로 이름을 지정하여 수행돼요. 예를 들면:

Success! Data written to: nomad/role/role-name

마찬가지로 관리 토큰이나 글로벌 토큰을 만들려면:

Success! Data written to: nomad/role/role-name

Vault 정책 만들기

서로 다른 아이덴티티가 특정 역할과 연관된 토큰을 얻을 수 있게 하는 Vault 정책을 만들어요:

path "nomad/creds/role-name" {
  capabilities = ["read"]
}
EOF
Policy 'nomad-user-policy' written.

기존 인증 백엔드(예: LDAP)가 있다면 Authentication backends page에서 관련 지침을 따라 역할을 만들어요. 그렇지 않으면, 테스트 목적으로 정책과 연관된 Vault 토큰을 생성할 수 있어요:

Key             Value
---             -----
token           deedfa83-99b5-34a1-278d-e8fb76809a5b
token_accessor  fd185371-7d80-8011-4f45-1bb3af2c2733
token_duration  768h0m0s
token_renewable true
token_policies  [default nomad-user-policy]

Nomad 토큰 획득 및 테스트

마지막으로 기존 Vault 토큰을 사용해 Nomad 토큰을 얻어요:

Key             Value
---             -----
lease_id        nomad/creds/role-name/6fb22e25-0cd1-b4c9-494e-aba330c317b9
lease_duration  768h0m0s
lease_renewable true
accessor_id     10b8fb49-7024-2126-8683-ab355b581db2
secret_id       8898d19c-e5b3-35e4-649e-4153d63fbea9

토큰이 Nomad에서 올바르게 생성되었는지 accessor로 조회해 확인해요:

Accessor ID  = 10b8fb49-7024-2126-8683-ab355b581db2
Secret ID    = 8898d19c-e5b3-35e4-649e-4153d63fbea9
Name         = Vault test root 1507307164169530060
Type         = management
Global       = true
Policies     = n/a
Create Time  = 2017-10-06 16:26:04.170633207 +0000 UTC
Create Index = 228
Modify Index = 228

Vault에 접근할 수 있는 모든 사용자나 프로세스는 이제 작업을 수행하기 위해 단기 Nomad 토큰을 얻을 수 있으므로, Nomad 토큰에 대한 접근이 중앙화돼요.

더 알아보기 (Learn more)