ACL 파티션 토큰을 Vault 시크릿 백엔드에 저장하기

ACL 파티션 토큰을 Vault 시크릿 백엔드에 저장하기

이 문서에서는 Consul Enterprise에서 Admin Partitions를 사용할 때, Consul Helm 차트가 Vault에 저장된 ACL 파티션 토큰을 사용하도록 구성하는 방법을 설명해 드려요.

출처: 문서

본문

개요

Vault에 저장된 ACL 파티션 토큰을 사용하려면 데이터 통합(Data Integration) 섹션에 설명된 단계를 완료하세요.

다음 단계를 한 번만 수행해요.

  1. 시크릿을 Vault에 저장합니다.
  2. 시크릿에 대한 원하는 수준의 접근을 승인하는 Vault 정책을 생성합니다.

클러스터의 각 데이터센터에 대해 다음 단계를 반복하세요.

  1. 접근이 필요한 각 Consul on Kubernetes 서비스 어카운트에 정책을 연결하는 Vault Kubernetes auth 역할을 생성합니다.
  2. 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 파티션 토큰 시크릿을 만들 때 전달한 키와 동일해야 합니다.

더 알아보기 (Learn more)