키/값 v2 시크릿 엔진에 무작위 문자열 저장하기

키/값 v2 시크릿 엔진에 무작위 문자열 저장하기

비밀번호 정책(password policy)을 사용해 무작위 문자열을 생성하고 key/value v2 플러그인에 저장해요.

시작 전에(Before you start)

  • 비밀번호 정책에 대한 read, create, update 권한이 있어야 해요.
  • kv v2 플러그인에 대한 create와 update 권한이 있어야 해요.

출처: 문서

본문

1단계: 비밀번호 정책 파일 만들기(Create a password policy file)

원하는 무작위화와 생성 규칙이 담긴 비밀번호 정책으로 HCL 파일을 만들어요.

예를 들어 다음 비밀번호 정책은 다음을 포함하는 길이 20 문자열을 요구해요.

  • 소문자 1개 이상
  • 대문자 1개 이상
  • 숫자 1개 이상
  • 특수 문자 2개 이상
length=20

rule "charset" {
  charset = "abcdefghijklmnopqrstuvwxyz"
  min-chars = 1
}

rule "charset" {
  charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  min-chars = 1
}

rule "charset" {
  charset = "0123456789"
  min-chars = 1
}

rule "charset" {
  charset = "!@#$%^&*STUVWXYZ"
  min-chars = 2
}

2단계: 비밀번호 정책 저장하기(Save the password policy)

vault write로 비밀번호 정책 엔드포인트(sys/policies/password/<policy_name>)에 정책을 저장해요.

$ vault write sys/policies/password/<policy_name> policy=@<policy_file>

예를 들어:

$ vault write sys/policies/password/randomize [email protected]
Success! Data written to: sys/policies/password/randomize

비밀번호 정책 파일을 이스케이프하고 비밀번호 생성 규칙으로 /sys/policies/password/{policy_name}에 POST 호출을 해요.

$ jq -Rs '{ "policy": . | gsub("[\\r\\n\\t]"; "") }' <path_to_policy_file> |
  curl                                        \
    --request POST                            \
    --header "X-Vault-Token: ${VAULT_TOKEN}"  \
    "$(</dev/stdin)"                          \
    ${VAULT_ADDR}/v1/sys/policies/password/<policy_name>

/sys/policies/password/{policy_name}은 성공 시 데이터를 반환하지 않아요.

3단계: kv v2에 무작위 문자열 저장하기(Save a random string to kv v2)

vault read와 새 비밀번호 정책의 generate 엔드포인트를 사용해 새 무작위 문자열을 생성하고, vault kv put으로 kv 플러그인에 작성해요.

$ vault kv put                                    \
  -mount <mount_path>                             \
  <secret_path>                                   \
  <key_name>=$(                                   \
    vault read -field password                    \
    sys/policies/password/<policy_name>/generate  \
  )

예를 들어:

$ vault kv put                                \
  -mount shared                               \
  /dev/seeds                                  \
  seed1=$(                                    \
    vault read -field password                \
    sys/policies/password/randomize/generate  \
  )

==== Secret Path ====
shared/data/dev/seeds

======= Metadata ========
Key                Value
---                -----
created_time       2024-11-15T23:15:31.929717548Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            1

새 비밀번호 정책의 /sys/policies/password/{policy_name}/generate 엔드포인트를 사용해 무작위 문자열을 생성하고, /{plugin_mount_path}/data/{secret_path}에 POST 호출로 kv 플러그인에 작성할 수도 있어요.

$ curl                                        \
    --request POST                            \
    --header "X-Vault-Token: ${VAULT_TOKEN}"  \
    --data                                    \
    "{
    \"data\": {
      \"seed1\": \"$(
        vault read -field password sys/policies/password/randomize/generate
      )\"
      }
    }"                                        \
    ${VAULT_ADDR}/v1/shared/data/dev/seeds | jq

{
  "request_id": "f9fad221-74e7-72c4-3f5a-9364944c37d9",
  "lease_id": "",
  "renewable": false,
  "lease_duration": 0,
  "data": {
    "created_time": "2024-11-15T23:33:08.549750507Z",
    "custom_metadata": null,
    "deletion_time": "",
    "destroyed": false,
    "version": 1
  },
  "wrap_info": null,
  "warnings": null,
  "auth": null,
  "mount_type": "kv"
}

4단계: Vault의 데이터 확인하기(Verify the data in Vault)

-field 플래그와 함께 vault kv get을 사용해 관련 시크릿 경로에서 무작위화된 문자열을 읽어요.

$ vault kv get          \
   -mount <mount_path>  \
   -field <field_name>  \
   <secret_path>

예를 들어:

$ vault kv get -mount shared -field seed1 dev/seeds
g0bc0b6W3ii^SXa@*ie5

API로는 /{plugin_mount_path}/data/{secret_path} 엔드포인트를 호출해 시크릿 경로의 모든 키/값 쌍을 읽을 수 있어요.

$ curl                                       \
   --request GET                             \
   --header "X-Vault-Token: ${VAULT_TOKEN}"  \
   ${VAULT_ADDR}/v1/shared/data/dev/seeds | jq

더 알아보기 (Learn more)

  • 비밀번호 정책 개념 문서를 살펴보세요.
  • kv v2 플러그인을 설정하는 방법을 확인해 보세요.
  • KV v2 플러그인 API 문서에서 password 정책 및 data 엔드포인트를 확인해 보세요.