Windows 환경에서 진행했습니다.
https://developer.hashicorp.com/vault/install
Windows > AMD64 에서 다운로드 후 압축 해제
Windows Power shell
.\vault.exe server -dev
.\vault.exe status
# Windows Powershell
> $Env:VAULT_ADDR='http://127.0.0.1:8200'
> .\vault status> .\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
> .\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
### 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
### 생성
> .\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
### 권한 조회
> .\vault policy list
default
root
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 생성
> .\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
prod 서버에서 루트 토큰 사용하면 안되기 때문에, 루트 토큰 대체하기 위해 AppRole 사용
### 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
### 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
### 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에서 역할(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
...
### 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
> ./vault write auth/approle/login role_id=%ROLE_ID% secret_id=%SECRET_ID%