Vault에 저장된 gossip 암호화 키 사용

Vault에 저장된 gossip 암호화 키 사용 (Use a gossip encryption key stored in Vault)

이 주제에서는 Vault에 저장된 gossip 암호화 키를 사용하도록 Consul Helm 차트를 구성하는 방법을 설명해요.

출처: 문서

본문

이 주제에서는 Vault에 저장된 gossip 암호화 키를 사용하도록 Consul Helm 차트를 구성하는 방법을 설명합니다.

개요 (Overview)

Vault에 저장된 gossip 암호화 키를 사용하려면 Data Integration 섹션에 설명된 단계를 완료하세요.

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

  1. 시크릿을 Vault에 저장합니다.
  2. 시크릿에 원하는 수준의 액세스를 인가하는 Vault 정책을 만듭니다.

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

  1. 정책을 액세스가 필요한 각 Consul on Kubernetes 서비스 계정에 연결하는 Vault Kubernetes auth 역할을 만듭니다.
  2. Consul on Kubernetes Helm 차트를 업데이트합니다.

사전 요구 사항 (Prerequisites)

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

  1. Vault as a Secrets Backend의 Systems Integration 섹션의 단계를 읽고 완료합니다.
  2. Vault as a Secrets Backend의 Data Integration Overview 섹션을 읽습니다.

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

먼저 gossip 키를 생성하여 Vault에 저장합니다. 이 작업은 한 번만 수행하면 됩니다:

$ vault kv put secret/consul/gossip key="$(consul keygen)"

Vault 정책 만들기 (Create Vault policy)

다음으로 이 시크릿에 대한 읽기 액세스를 허용하는 정책을 만듭니다.

path 리소스에 참조된 시크릿의 경로는 global.gossipEncryption.secretName Helm 구성에서 구성할 값과 동일합니다(Update Consul on Kubernetes Helm chart 참조).

gossip-policy.hcl

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

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

$ vault policy write gossip-policy gossip-policy.hcl

Consul을 위한 Vault 인가 역할 만들기 (Create Vault Authorization Roles for Consul)

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

$ vault write auth/kubernetes/role/consul-server \
    bound_service_account_names=<Consul server service account> \
    bound_service_account_namespaces=<Consul installation namespace> \
    policies=gossip-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=gossip-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

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

이제 Vault를 구성했으므로 Vault의 gossip 키를 사용하도록 Consul Helm 차트를 구성할 수 있습니다:

values.yaml

global:
  secretsBackend:
    vault:
      enabled: true
      consulServerRole: consul-server
      consulClientRole: consul-client
  gossipEncryption:
    secretName: secret/data/consul/gossip
    secretKey: key

global.gossipEncryption.secretName은 Vault의 시크릿 경로입니다. 이는 Vault 정책에 포함할 경로와 동일해야 합니다. global.gossipEncryption.secretKey는 시크릿 데이터 내부의 키입니다. 이는 Vault에서 gossip 시크릿을 만들 때 전달한 키와 동일해야 합니다.

더 알아보기 (Learn more)