Vault - tutorial

문주은·2024년 1월 19일

Windows 환경에서 진행했습니다.

1. vault.exe install

https://developer.hashicorp.com/vault/install
Windows > AMD64 에서 다운로드 후 압축 해제

2. vault 서버 실행

Windows Power shell

.\vault.exe server -dev

  • 개발 서버 실행(운영 환경에서 이용X)
  • 127.0.0.1:8200 으로 접속 후 token 값 입력

.\vault.exe status

  • "http: server gave HTTP response to HTTPS client" 에러 발생
  • 아래와 같이 환경 변수 등록
    # Windows Powershell
    > $Env:VAULT_ADDR='http://127.0.0.1:8200' 
    > .\vault status

3.vault secret engine 생성

3-1) secret engine list 확인

> .\vault.exe secrets list
Path          Type         Accessor              Description
----          ----         --------              -----------
cubbyhole/    cubbyhole    cubbyhole_318421a2    per-token private secret storage
identity/     identity     identity_3392a061     identity store
secret/       kv           kv_d990fed4           key/value secret storage
sys/          system       system_080e0533       system endpoints used for control, policy

3-2) 원하는 임의의 경로에 secret engine 연결

> .\vault secrets enable -path=pmo kv
Success! Enabled the kv secrets engine at: pmo/

> .\vault.exe secrets list
Path          Type         Accessor              Description
----          ----         --------              -----------
cubbyhole/    cubbyhole    cubbyhole_318421a2    per-token private secret storage
identity/     identity     identity_3392a061     identity store
pmo/          kv           kv_ff033cdd           n/a
secret/       kv           kv_d990fed4           key/value secret storage
sys/          system       system_080e0533       system endpoints used for control, policy and debugging

4. secret 생성 및 조회

4-1) 'secret' secret engine에 'test'라는 key로 id=airflow 라는 값을 저장

### secret 생성
> .\vault kv put secret/test id=airflow
Success! Data written to: secret/test

### 조회
> .\vault kv list pmo
Keys
----
test

### secret 조회
> .\vault kv get secret/test
=== Data ===
Key    Value
---    -----
id     airflow

### secret 삭제
> .\vault kv delete secret/test

4-2) token 생성 및 조회

  • token은 secret에 대한 권한 설정 가능
### 생성
> .\vault token create
Key                  Value
---                  -----
token                hvs.JUpO77LXZYbDyQ5Gn05zCi10
token_accessor       s0Q0dDrNtKoJ6hoWp7kYVmcV
token_duration       ∞
token_renewable      false
token_policies       ["root"]
identity_policies    []
policies             ["root"]

### 토큰 정보 조회
> .\vault token lookup hvs.JUpO77LXZYbDyQ5Gn05zCi10
Key                 Value
---                 -----
accessor            s0Q0dDrNtKoJ6hoWp7kYVmcV
creation_time       1700616583
creation_ttl        0s
display_name        token
entity_id           n/a
...

### 토큰 삭제
> .\vault token revoke hvs.JUpO77LXZYbDyQ5Gn05zCi10

4-3) token policy

  • token policy를 이용해 token의 secret에 대한 권한 설정 가능
### 권한 조회
> .\vault policy list
default
root
  • 정책 파일(pmo-policy.cfg)
path "secret/*" {
  capabilities = ["create", "update"]
}
path "secret/test" {
  capabilities = ["read"]
}
  • 생성
### 정책 생성
> .\vault policy write secret-policy .\secret-policy.cfg
Success! Uploaded policy: secret-policy

### 조회
> .\vault policy list
default
secret-policy
root
  • 정책을 이용한 token 생성
### 해당 정책으로 token 생성
> .\vault token create -policy=secret-policy
Key                  Value
---                  -----
token                hvs.CAESIJs_UbXZEoUFRq_8zfNKlhpGBRxvtqnwnRwTbyOyjo1WGh4KHGh2cy5EOWxsa0lSbnNzdUwzOFN1ZWJ0clA4dEs
token_accessor       Kplfdmi7ec4UXj4eber9giuq
token_duration       768h
token_renewable      true
token_policies       ["default" "secret-policy"]
identity_policies    []
policies             ["default" "secret-policy"]

### 생성된 token 저장
set VAULT_TOKEN=hvs.CAESIJsxxxxxxxxxxxx

5. AppRole 생성 및 조회

prod 서버에서 루트 토큰 사용하면 안되기 때문에, 루트 토큰 대체하기 위해 AppRole 사용

5-1) 루트 토큰으로 변경

### root token 환경 변수 설정
set VAULT_TOKEN=hvs.Bd5n1HkEhQVinMw2ZPxqAO0M

### auth 정보 확인
> .\vault auth list
Path      Type     Accessor               Description                Version
----      ----     --------               -----------                -------
token/    token    auth_token_0350fdf2    token based credentials    n/a

5-2) approle 생성

  • approle 생성
### approle 생성
> .\vault auth enable approle
Success! Enabled approle auth method at: approle/

### auth 정보 확인 
> .\vault auth list
Path        Type       Accessor                 Description                Version
----        ----       --------                 -----------                -------
approle/    approle    auth_approle_68ff3fb0    n/a                        n/a
token/      token      auth_token_0350fdf2      token based credentials    n/a
  • approle 설정 정보 생성
### pmo-policy token을 활용한 approle 설정 정보 생성
> .\vault write auth/approle/role/secret-role secret_id_ttl=10m token_num_uses=10 token_ttl=20m token_max_ttl=30m secret_id_num_uses=40 token_policies=secret-policy
Success! Data written to: auth/approle/role/secret-role
  • approle 확인
### approle에서 역할(role)의 목록 확인
> .\vault list auth/approle/role
Keys
----
secret-role

### 특정 role 에 대한 설정 확인
> .\vault read auth/approle/role/secret-role
Key                        Value
---                        -----
bind_secret_id             true
local_secret_ids           false
secret_id_bound_cidrs      <nil>
secret_id_num_uses         40
secret_id_ttl              10m
token_bound_cidrs          []
token_explicit_max_ttl     0s
...
  • role_id, secret_id 확인
### get role_id
> ./vault read -field=role_id auth/approle/role/secret-role/role-id

### get secret_id
>./vault write -f -field=secret_id auth/approle/role/secret-role/secret-id
  • 환경 변수 설정
### ROLE_ID 설정
> $env:ROLE_ID="e689ffca-f91e-ee71-3e89-0e9eae71ab45"

### SECRET_ID 설정
> $env:SECRET_ID="e689ffca-f91e-ee71-3e89-0e9eae71ab45"

### 확인
> echo $env:ROLE_ID
> echo $env:SECRET_ID
  • role_id, secret_id로 vault에 인증
> ./vault write auth/approle/login role_id=%ROLE_ID% secret_id=%SECRET_ID%
profile
Data Engineer

0개의 댓글