ACL 파티션 토큰을 Vault 시크릿 백엔드에 저장하기
ACL 파티션 토큰을 Vault 시크릿 백엔드에 저장하기
이 문서에서는 Consul Enterprise에서 Admin Partitions를 사용할 때, Consul Helm 차트가 Vault에 저장된 ACL 파티션 토큰을 사용하도록 구성하는 방법을 설명해 드려요.
출처: 문서
본문
개요
Vault에 저장된 ACL 파티션 토큰을 사용하려면 데이터 통합(Data Integration) 섹션에 설명된 단계를 완료하세요.
다음 단계를 한 번만 수행해요.
- 시크릿을 Vault에 저장합니다.
- 시크릿에 대한 원하는 수준의 접근을 승인하는 Vault 정책을 생성합니다.
클러스터의 각 데이터센터에 대해 다음 단계를 반복하세요.
- 접근이 필요한 각 Consul on Kubernetes 서비스 어카운트에 정책을 연결하는 Vault Kubernetes auth 역할을 생성합니다.
- Consul on Kubernetes Helm 차트를 갱신합니다.
전제 조건
Vault와 Consul on Kubernetes 간의 데이터 통합을 설정하기 전에 다음이 필요해요.
- Vault를 시크릿 백엔드로 사용하기 문서의 시스템 통합(Systems Integration) 섹션을 읽고 단계를 완료했는지
- Vault를 시크릿 백엔드로 사용하기 문서의 데이터 통합 개요(Data Integration Overview) 섹션을 읽었는지
Vault에 시크릿 저장하기
먼저 ACL 파티션 토큰을 생성하고 Vault에 저장해요. 이 작업은 한 번만 수행하면 됩니다.
$ vault kv put secret/consul/partition-token token="$(uuidgen | tr '[:upper:]' '[:lower:]')"
Vault 정책 만들기
다음으로 이 시크릿에 대한 읽기 접근을 허용하는 정책을 만들어야 해요. path 리소스에서 참조하는 시크릿 경로는 global.acls.partitionToken.secretName Helm 구성에 구성할 값과 동일해요(Consul on Kubernetes Helm 차트 갱신 참조).
partition-token-policy.hcl
path "secret/data/consul/partition-token" {
capabilities = ["read"]
}
vault policy write CLI 명령을 실행해 Vault 정책을 적용해요.
$ vault policy write partition-token-policy partition-token-policy.hcl
Consul용 Vault 권한 부여 역할 만들기
다음으로 consul server-acl-init 작업용 Kubernetes auth 역할을 생성해요.
$ vault write auth/kubernetes/role/consul-partition-init \
bound_service_account_names=<Consul server service account> \
bound_service_account_namespaces=<Consul installation namespace> \
policies=partition-token-policy \
ttl=1h
partition-init 작업의 서비스 어카운트 이름을 찾으려면, Consul on Kubernetes values 파일을 사용해 다음 helm template 명령을 실행할 수 있어요.
$ helm template --release-name ${RELEASE_NAME} -s templates/partition-init-serviceaccount.yaml hashicorp/consul -f values.yaml
Consul on Kubernetes Helm 차트 갱신하기
이제 Vault를 구성했으니, Vault의 ACL 파티션 토큰 키와 Partitions 역할용 서비스 어카운트를 사용하도록 Consul Helm 차트를 구성할 수 있어요.
values.yaml
global:
secretsBackend:
vault:
enabled: true
manageSystemACLsRole: consul-server-acl-init
adminPartitionsRole: consul-partition-init
acls:
partitionToken:
secretName: secret/data/consul/partition-token
secretKey: token
global.acls.partitionToken.secretName은 Vault에 있는 시크릿의 경로라는 점을 유의하세요. Vault 정책에 포함한 경로와 동일해야 해요. global.acls.partitionToken.secretKey는 시크릿 데이터 내부의 키로, Vault에서 ACL 파티션 토큰 시크릿을 만들 때 전달한 키와 동일해야 합니다.