Vault 시크릿 백엔드에 Consul Enterprise 라이선스 저장하기

Vault 시크릿 백엔드에 Consul Enterprise 라이선스 저장하기 (Store Consul Enterprise license on Vault secrets backend)

이 문서는 Vault에 저장된 엔터프라이즈 라이선스를 사용하도록 Consul Helm 차트를 구성하는 방법을 알려드릴게요. 시크릿 저장부터 Vault 정책·인증 역할 생성, Helm 차트 업데이트까지 순서대로 따라 하면 돼요.

출처: 문서

본문

이 항목은 Vault에 저장된 엔터프라이즈 라이선스를 사용하도록 Consul Helm 차트를 구성하는 방법을 설명합니다.

개요 (Overview)

Vault에 저장된 엔터프라이즈 라이선스를 사용하려면 데이터 통합(Data Integration) [/consul/docs/deploy/server/k8s/vault/data] 섹션에 설명된 단계를 완료하세요.

다음 단계를 한 번 완료하세요:

  • Vault에 시크릿을 저장합니다.
  • 시크릿에 대한 원하는 접근 수준을 승인하는 Vault 정책을 만듭니다.

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

  • 정책을 접근이 필요한 각 Kubernetes의 Consul 서비스 계정과 연결하는 Vault Kubernetes 인증 역할을 만듭니다.
  • Kubernetes의 Consul Helm 차트를 업데이트합니다.

사전 요구 사항 (Prerequisites)

Vault와 Kubernetes의 Consul 간의 데이터 통합을 설정하기 전에 다음이 필요합니다:

  • Vault를 시크릿 백엔드로 사용 [/consul/docs/deploy/server/k8s/vault] 문서의 시스템 통합(Systems Integration) [/consul/docs/deploy/server/k8s/vault/backend] 섹션을 읽고 완료했을 것.
  • Vault를 시크릿 백엔드로 사용 [/consul/docs/deploy/server/k8s/vault] 문서의 데이터 통합 개요(Data Integration Overview) [/consul/docs/deploy/server/k8s/vault/data] 섹션을 읽었을 것.

Vault에 시크릿 저장 (Store the Secret in Vault)

먼저 엔터프라이즈 라이선스를 Vault에 저장합니다:

$ vault kv put secret/consul/license key="<enterprise license>"

Vault 정책 생성 (Create Vault policy)

다음으로 이 시크릿에 대한 읽기 접근을 허용하는 정책을 만들어야 합니다.

path 리소스에 참조된 시크릿의 경로는 global.enterpriseLicense.secretName Helm 구성에서 구성할 값과 동일합니다(Kubernetes의 Consul Helm 차트 업데이트 [/consul/docs/deploy/server/k8s/vault/data/enterprise-license#update-consul-on-kubernetes-helm-chart] 참조).

license-policy.hcl

path "secret/data/consul/license" {
  capabilities = ["read"]
}

vault policy write CLI 명령을 실행하여 Vault 정책을 적용합니다:

$ vault policy write license-policy license-policy.hcl

Consul용 Vault 인증 역할 생성 (Create Vault Authorization Roles for Consul)

다음으로 Consul 서버와 클라이언트에 대한 Kubernetes 인증 역할을 만듭니다:

$ vault write auth/kubernetes/role/consul-server \
    bound_service_account_names=<Consul server service account> \
    bound_service_account_namespaces=<Consul installation namespace> \
    policies=license-policy \
    ttl=1h
$ vault write auth/kubernetes/role/consul-client \
    bound_service_account_names=<Consul client service account> \
    bound_service_account_namespaces=<Consul installation namespace> \
    policies=license-policy \
    ttl=1h

Consul 서버와 클라이언트의 서비스 계정 이름을 알아내려면 Consul on Kubernetes values 파일로 다음 helm template 명령을 실행할 수 있습니다:

  • Consul 서버 서비스 계정 이름 생성
$ helm template --release-name ${RELEASE_NAME} -s templates/server-serviceaccount.yaml hashicorp/consul -f values.yaml
  • Consul 클라이언트 서비스 계정 이름 생성
$ helm template --release-name ${RELEASE_NAME} -s templates/client-serviceaccount.yaml hashicorp/consul -f values.yaml

Kubernetes의 Consul Helm 차트 업데이트 (Update Consul on Kubernetes Helm chart)

이제 Vault를 구성했으므로 Vault의 엔터프라이즈 라이선스를 사용하도록 Consul Helm 차트를 구성할 수 있습니다:

values.yaml

global:
  image: hashicorp/consul-enterprise:1.12.0-ent
  secretsBackend:
    vault:
      enabled: true
      consulServerRole: consul-server
      consulClientRole: consul-client
  enterpriseLicense:
    secretName: secret/data/consul/enterpriselicense
    secretKey: key

global.enterpriseLicense.secretName은 Vault의 시크릿 경로입니다. 이 값은 Vault 정책에 포함한 경로와 동일해야 합니다. global.enterpriseLicense.secretKey는 시크릿 데이터 안의 키입니다. 이 값은 Vault에서 엔터프라이즈 라이선스 시크릿을 만들 때 전달한 키와 동일해야 합니다.

더 알아보기 (Learn more)