Vault Agent Injector TLS 구성

Vault Agent Injector TLS 구성

중요 참고: 이 차트는 Helm 2와 호환되지 않습니다. 이 차트에는 Helm 3.6+를 사용하세요.

다음 지침은 Vault Agent Injector를 자체 서명 인증서로 수동 구성하는 방법을 보여줍니다.

본문

인증 기관(CA) 만들기

먼저 사용자 지정 인증 기관(CA)이 사용할 개인 키를 만듭니다.

$ openssl genrsa -out injector-ca.key 2048

다음으로 인증 기관 인증서를 만듭니다.

중요 참고: days(인증서가 유효한 기간) 같은 값은 환경에 맞게 구성해야 합니다.

$ openssl req \
   -x509 \
   -new \
   -nodes \
   -key injector-ca.key \
   -sha256 \
   -days 1825 \
   -out injector-ca.crt \
   -subj "/C=US/ST=CA/L=San Francisco/O=HashiCorp/CN=vault-agent-injector-svc"

Vault Agent Injector 인증서 만들기

다음으로 위에서 생성한 CA가 서명한 인증서와 키를 만들 수 있습니다. 이 인증서와 키는 Vault Agent Injector가 Kubernetes API와의 TLS 통신에 사용합니다.

먼저 인증서용 개인 키를 만듭니다.

$ openssl genrsa -out tls.key 2048

다음으로 인증서 서명 시 사용할 CSR(certificate signing request)을 만듭니다.

$ openssl req \
   -new \
   -key tls.key \
   -out tls.csr \
   -subj "/C=US/ST=CA/L=San Francisco/O=HashiCorp/CN=vault-agent-injector-svc"

CSR을 만든 후 인증서 서명에 대한 추가 매개변수를 구성하는 확장 파일을 만듭니다.

중요 참고: 인증서의 대체 이름(alternative names)은 Vault Agent Injector Kubernetes 서비스와 그것이 생성된 네임스페이스의 이름을 사용하도록 구성해야 합니다. 이 예시에서 Vault Agent Injector 서비스 이름은 vault 네임스페이스의 vault-agent-injector-svc입니다. <k8s 서비스 이름>.<k8s 네임스페이스>.svc.cluster.local 패턴을 사용합니다.

$ cat <<EOF >csr.conf
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = vault-agent-injector-svc
DNS.2 = vault-agent-injector-svc.vault
DNS.3 = vault-agent-injector-svc.vault.svc
DNS.4 = vault-agent-injector-svc.vault.svc.cluster.local
EOF

마지막으로 인증서를 서명합니다.

중요 참고: days(인증서가 유효한 기간) 같은 값은 환경에 맞게 구성해야 합니다.

$ openssl x509 \
  -req \
  -in tls.csr \
  -CA injector-ca.crt \
  -CAkey injector-ca.key \
  -CAcreateserial \
  -out tls.crt \
  -days 1825 \
  -sha256 \
  -extfile csr.conf

구성 (Configuration)

이제 인증 기관과 서명된 인증서를 만들었으니 Helm과 Vault Agent Injector가 이를 사용하도록 구성할 수 있습니다.

먼저 위에서 만든 인증서와 키를 담은 Kubernetes 시크릿을 만듭니다.

중요 참고: 이 예시는 Vault Agent Injector가 vault 네임스페이스에서 실행된다고 가정합니다.

$ kubectl create secret generic injector-tls \
    --from-file tls.crt \
    --from-file tls.key \
    --namespace=vault

다음으로 Kubernetes가 인증서의 진위를 검증할 수 있도록 인증 기관을 base64 인코딩합니다.

$ export CA_BUNDLE=$(cat injector-ca.crt | base64)

마지막으로 다음 사용자 지정 값으로 Vault Agent Injector를 설치합니다.

$ helm install vault hashicorp/vault \
  --namespace=vault \
  --set="injector.certs.secretName=injector-tls" \
  --set="injector.certs.caBundle=${CA_BUNDLE?}"

출처: 문서

더 알아보기 (Learn more)