개발관련/삽질

hashicorp사의 Vault(볼트) - Tutorial-Dev(With-커맨드) - 2

동팡 2021. 7. 1. 00:58

목차

  • 들어가며
  • Vault Dev 서버 모드 튜토리얼
  • 참고문헌

 

들어가며

본 게시물은 Vault 공식 문서의 내용과 필자의 생각을 정리하였다. Vault는 무엇인지, 어디에 사용하는지, 왜 사용하는지, 어떻게 사용하는지 서술한다. Vault를 처음 접하는 인원은 Vault의 흐름과 골격을 이해할 수 있는 시간을 갖는다. 또한 Vault를 실질적으로 사용해보는 시간을 갖는다. Vault는 Dev 서버 모드를 지원한다. Dev 서버 모드는 사전 설정이 되어있는 데모 서버라고 생각하면 좋다. 사용자는 해당 데모 서버에서 Vault를 학습할 수 있다. 시간이 괜찮으면 Vault HA를 구성한다(시간이 있으면...). 

 

본 게시물의 시리즈는 다음과 같다.

 

Vault Dev 서버 모드 튜토리얼

CentOS 기준, yum 명령어를 사용하여 Vault를 설치한다. 설치방법은 Vault Tutorial 페이지에서 확인할 수 있다.

 

[Vault 서버 가동]

$vault server -dev &

$vault server -dev & 후의 vault 로그


[Vault 환경 변수 설정]

환경 변수 설정은 필수가 아니다. 그러나 CLI 환경에서 Vault 명령을 쉽게 사용하기 위해 환경변수를 설정한다. CentOS는 .bash_profile를 통해 환경변수를 영구 설정할 수 있지만, 그렇게 하지 않는다.

 

위의 로깅된 Root Token과 HOST에 맞게 환경변수를 설정한다.

$export VAULT_ADDR='http://127.0.0.1:8200'
$export VAULT_TOKEN="s.XmpNPoi9sRhYtdKHaQhkHP6x"

환경변수 조회 및 확인 

$ set | grep VAULT

[Vault 사용 - Secret 등록]

$vault kv put secret/hello foo=world 

설명

  • Secret, foo=world 등록
  • kv: key-value storage에 접근할 때 사용
  • put secret/hello: secret/hello라는 secret 생성(위치? 엔드포인트?)
  • foo=world: foo라는 파라메터와 함께 secret 생성
  • +) vault kv put 명령은 생성할 때 사용하지만 갱신/대체 작업에도 사용

[Vault 사용 - Secret 조회]

$vault kv get secret/hello

$vault kv get -field=foo secret/hello

$vault kv get -format=json secret/hello

설명

  • get secret/hello: secret/hello에 위치하는 Secret 조회
  • -field=foo: foo 필드의 값만 조회
  • -format=json: JSON 형식으로 조회(json, yaml, table 형식으로 조회 가능, 디폴트 값은 table)

[Vault 사용 - Secret 폐기]

$vault kv delete secret/hello

설명

  • delete: secret/hello에 위치하는 것을 폐기

[Vault 사용 - Secret Engine 생성]

Key/Value형식의 Secret Engine 생성 및 조회

$vault secrets enable -path=kv kv

$vault secrets list

Vault Secret List

[Vault 사용 - 방금 생성한 Secret Engine에 Secret 등록]

$vault kv put kv/my-secret value="s3c(eT"

$vault kv get kv/my-secret

$vault kv delete kv/my-secret

$vault kv list kv/

$vault secrets disable kv

$vault secrets enable -path=kv kv

[Vault 사용 - 토큰 생성]

토큰을 생성/로그인/폐기한다.

$vault token create

$vault login s.w5cdTSBCLaFbHAu8lHDfHpCW

$vault token revoke s.w5cdTSBCLaFbHAu8lHDfHpCW

[Vault 사용 - 토큰의 정책 설정]

$vault policy list 

$vault policy read default

$vault policy write my-policy - << EOF
# Dev servers have version 2 of KV secrets engine mounted by default, so will
# need these paths to grant permissions:
path "secret/data/*" {
  capabilities = ["create", "update"]
}

path "secret/data/foo" {
  capabilities = ["read"]
}
EOF

$vault token lookup

$vault token create -policy=my-policy

$export VAULT_TOKEN="$(vault token create -field token -policy=my-policy)"

$vault kv put secret/creds password="my-long-password"
$vault kv put secret/creds password="my-long-password-1"

$vault kv get secret/creds   //(안됨)

$export VAULT_TOKEN="s.kZw14yyEbEIkDSRRSLEsVM8M"    //(root 토큰)
$vault kv get secret/creds(됨)

설명

  • 토큰 생성 시 정책을 적용할 수 있다.
  • 정책은 Secret에 대해 접근제어를 실시한다. 
  • 정책 "my-policy의 설명은 다음과 같다.
    • "secret/data 이하의 경로에 대해 create와 update 작업을 실시할 수 있다(udpate는 put을 통한 갱신 작업).
    • "secret/data/foo에 해당하는 경로는 read 작업을 실시할 수 있다.
  • 다음의 설명은 생략한다.

[Vault 사용 - AppRole]

위의 "토큰 생성" 부분에서 Vault는 사용자의 토큰을 인증 절차 없이 생성한다. 이유는 다음과 같다. 현재 적용된 토큰은 "루트 토큰"이다. 그래서 인증 절차 없이 사용자의 토큰을 생성할 수 있다. 그러나 일반적인 상황에서는 인증 절차가 필요하다. 대표적인 인증 절차는 ID/PW 방식을 사용할 수 있다. Vault의 AppRole은 식별값(ID)/인증값(PW)을 이용해서 토큰을 발급한다. 또한 정책을 적용할 수 있으며, 토큰에 적용 가능하다.

// approle 확인
$vault auth list | grep 'approle/'

// 리스트업이 되지 않을 경우, approle 활성화
$vault auth enable approle

// approle 확인
$vault auth list | grep 'aaprole/'

//approle에 my-role(사용자) 생성
$vault write auth/approle/role/my-role \
secret_id_ttl=10m \
token_num_uses=10 \
token_ttl=20m \
token_max_ttl=30m \
secret_id_num_uses=40 \
token_policies=my-policy

// approle 조회
$vault list auth/approle/role
$vault read auth/approle/role/my-role
$vault read auth/approle/role/my-role/role-id
$vault read -field=role_id auth/approle/role/my-role/role-id

// ROLE_ID(식별자) 환경 변수 적용 및 조회
$export ROLE_ID="$(vault read -field=role_id auth/approle/role/my-role/role-id)"
$set | grep -e VAULT -e ROLE_ID

// SECRET_ID 설정(AppRole 인증을 위한 비밀번호 개념과 비슷하다.)
// SECRET_ID(인증값) 환경 변수 적용 및 조회
// vault write를 별도로 진행해도 괜찮다.
$export SECRET_ID="$(vault write -f -field=secret_id auth/approle/role/my-role/secret-id)"
$set | grep -e SECRET_ID -e VAULT -e ROLE_ID

// 토큰 요청
// approle 인증 완료 후, 토큰을 반환받을 수 있다.
$vault write auth/approle/login role_id="$ROLE_ID" secret_id="$SECRET_ID"

 

참고문헌

Vault 공식 튜토리얼 사이트