키/값 v2 플러그인 설정하기
키/값 v2 플러그인 설정하기
vault secrets enable을 사용해 kv 플러그인의 인스턴스를 활성화해요. 버전 2를 지정하려면 -version 플래그를 사용하거나 플러그인 유형으로 kv-v2를 지정해요.
또한 dev-mode 서버를 실행 중이면 demo/ 경로에서 v2 kv 시크릿 엔진이 기본적으로 활성화돼요(비 dev 서버의 경우 현재 v1이에요). 이 엔진은 비활성화하거나, 이동하거나, 다른 경로에 여러 번 활성화할 수 있어요. KV 시크릿 엔진의 각 인스턴스는 격리되고 고유해요.
시작 전에(Before you start)
- ACL 정책을 업데이트할 권한이 있어야 해요.
- 플러그인을 활성화할 권한이 있어야 해요.
출처: 문서
본문
1단계: 플러그인 활성화하기(Enable the plugin)
vault secrets enable을 사용해 kv 플러그인의 새 인스턴스를 만들고, key/value 버전 2를 지정하려면 -version 플래그를 사용하거나 플러그인 유형으로 kv-v2를 사용해요.
옵션 1: -version 플래그 사용:
$ vault secrets enable -path <mount_path> -version=2 kv
옵션 2: kv-v2 플러그인 유형 사용:
$ vault secrets enable -path <mount_path> kv-v2
API로는 kv v2 인스턴스의 유형과 구성 정보가 담긴 JSON 파일을 만든 뒤 options 필드로 선택적 플래그를 설정하고, JSON 데이터로 /sys/mounts/{plugin_mount_path}에 POST 호출을 해요.
$ curl \
--request POST \
--header "X-Vault-Token: ${VAULT_TOKEN}" \
--data @data.json \
${VAULT_ADDR}/v1/sys/mounts/<plugin_mount_path>
예를 들어:
{
"type": "kv",
"options": {
"version": "2"
}
}
$ curl \
--request POST \
--header "X-Vault-Token: ${VAULT_TOKEN}" \
--data @data.json \
${VAULT_ADDR}/v1/sys/mounts/shared | jq
/sys/mounts/{plugin_mount_path}은 성공 시 데이터를 반환하지 않아요.
2단계: ACL 정책 파일 만들기(Create an ACL policy file)
참고: kv 플러그인의 ACL 정책은 allowed_parameters, denied_parameters, required_parameters 정책 필드를 지원하지 않아요.
필요에 따라 정책 정의 파일을 만들어요. 예를 들어 shared/에 마운트된 kv 플러그인의 /dev/square-api 경로에 API 키가 저장돼 있다고 가정해요. 다음 정책은 클라이언트가 최신 버전의 API 키를 읽고 패치하며, API 키의 모든 버전 메타데이터를 읽을 수 있게 해요.
# 최신 버전의 API 키를 읽고 패치할 권한 부여
path "shared/data/dev/square-api/*" {
capabilities = ["read", "patch"]
}
# 모든 버전의 API 키 메타데이터를 읽을 권한 부여
path "shared/metadata/dev/square-api/" {
capabilities = ["read"]
}
사용 가능한 경로 접두사(Available path prefixes)
| 경로 접두사 | 정책 효과 |
|---|---|
| data | 최신 버전의 데이터에 권한 적용. |
| undelete | 클라이언트가 모든 버전의 데이터에 un-delete 명령/엔드포인트 사용 가능. |
| destroy | 클라이언트가 모든 버전의 데이터에 destroy 명령/엔드포인트 사용 가능. |
| metadata | 클라이언트가 모든 버전의 데이터에 metadata 명령/엔드포인트 사용 가능. |
사용 가능한 권한(Available permissions)
| 권한 | HTTP 작업 | 결과 |
|---|---|---|
| create | POST/PUT | 클라이언트가 경로에 새 데이터 작성 가능. |
| delete | DELETE | 클라이언트가 경로에서 데이터 제거 가능. |
| deny | N/A | 클라이언트가 경로에 접근할 수 없음. deny는 다른 모든 권한(수퍼유저 sudo 포함)보다 우선. |
| list | LIST | 클라이언트가 경로의 데이터 나열 가능. 모든 플러그인이 list를 지원하진 않음. |
| patch | PATCH | 클라이언트가 기존 경로의 명시적 키/값 쌍을 업데이트하거나 작성 가능. |
| read | GET | 클라이언트가 경로에서 데이터 읽기 가능. |
| subscribe | N/A | 클라이언트가 경로에서 플러그인의 이벤트 스트림 접근을 요청할 수 있음. 모든 플러그인이 subscribe를 지원하진 않음. |
| sudo | N/A | 클라이언트가 관련 권한 동사와 함께 루트 보호 경로에 접근 가능. |
| update | POST/PUT | 클라이언트가 기존 경로의 데이터를 완전히 덮어쓸 수 있음. |
경고: list 작업에 반환된 데이터는 ACL 정책에 대해 필터링되지 않아요. 키 이름에 민감한 정보를 인코딩하지 마세요.
필요한 권한이 확실하지 않으면 Vault CLI로 기존 kv 플러그인을 대상으로 -output-policy 플래그와 함께 예시 데이터로 명령을 실행해 최소 정책을 생성해요.
$ vault kv patch \
-output-policy \
-mount private \
test-path \
test=test
path "private/data/test-path" {
capabilities = ["patch"]
}
3단계: ACL 정책 저장하기(Save the ACL policy)
정책 정의 파일로 vault policy write을 사용해 새 ACL 정책을 만들어요.
$ vault policy write <name> <path_to_policy_file>
예를 들어:
$ vault policy write "KV-access-policy" ./kv-policy.hcl
팁: Vault API로 정책을 수정할 예정이라면 정책 이름에 공백과 특수 문자를 피하세요. 정책 이름이 API 엔드포인트 경로의 일부가 되거든요.
정책 파일을 이스케이프하고 정책 세부 정보로 /sys/policy/{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/policy/<policy_name>
다음 단계(Next steps)
- 플러그인에 대한 인증 매핑 만들기
더 알아보기 (Learn more)
- KV v2 시크릿 엔진 개요와 쿡북 예시를 살펴보세요.
- KV v2 API 문서에서 마운트·정책 관련 엔드포인트를 확인해 보세요.