Vault를 Consul 시크릿 저장소로 사용하기
Vault를 Consul 시크릿 저장소로 사용하기 (Vault Data for Consul)
이 문서는 Vault와 Consul을 구성해 Consul 내부에서 사용할 시크릿을 공유하는 방법을 설명해요. 각 시크릿을 Vault에 저장하고 Vault 정책·Kubernetes 인증 역할을 만들어 서비스 계정에 접근을 허용하는 절차를 다룰게요.
출처: 문서
본문
이 문서는 Consul 내부에서 사용할 시크릿을 공유하기 위해 Vault와 Consul을 구성하는 방법을 설명합니다.
선행 요구 사항 (Prerequisites)
Kubernetes에서 Vault와 Consul 간 데이터 통합을 설정하기 전에 Vault를 시크릿 백엔드로 사용하기의 시스템 통합 (Systems Integration) 섹션을 읽고 그 단계를 완료하세요.
일반 통합 단계 (General integration steps)
Vault에 저장하려는 각 시크릿에 대해 두 개의 다단계 절차를 완료해야 합니다.
다음 단계는 한 번만 완료합니다:
- 시크릿을 Vault에 저장합니다.
- 시크릿에 원하는 수준의 접근을 승인하는 Vault 정책을 만듭니다.
클러스터의 각 데이터센터에 대해 다음 단계를 반복합니다:
- 정책을 접근이 필요한 각 Consul on Kubernetes 서비스 계정에 연결하는 Vault Kubernetes 인증 역할을 만듭니다.
- Consul on Kubernetes Helm 차트를 업데이트합니다.
시크릿-서비스 계정 매핑 (Secrets-to-service account mapping)
가장 기본 수준에서 이 구성의 목표는 Consul on Kubernetes 서비스 계정이 Vault의 시크릿에 접근하도록 승인하는 것입니다.
다음 표는 Vault 시크릿과 접근이 필요한 Consul on Kubernetes 서비스 계정을 연결합니다.
(참고: Consul components는 Consul 서버나 클라이언트가 아닌 모든 다른 서비스와 잡을 가리킵니다. 터미네이팅 게이트웨이, 인그레스 게이트웨이 등이 포함됩니다.)
기본 데이터센터 (Primary datacenter)
| 시크릿 (Secret) | 서비스 계정 대상 (Service Account For) | Consul k8s Helm의 구성 가능한 역할 (Configurable Role) |
| ACL 부트스트랩 토큰 | Consul server-acl-init 잡 | global.secretsBackend.vault.manageSystemACLsRole |
| ACL 파티션 토큰 | Consul server-acl-init 잡 | global.secretsBackend.vault.manageSystemACLsRole |
| ACL 복제 토큰 | Consul server-acl-init 잡 | global.secretsBackend.vault.manageSystemACLsRole |
| Enterprise 라이선스 | Consul 서버, Consul 클라이언트 | global.secretsBackend.vault.consulServerRole, global.secretsBackend.vault.consulClientRole |
| 가십 암호화 키 | Consul 서버, Consul 클라이언트 | global.secretsBackend.vault.consulServerRole, global.secretsBackend.vault.consulClientRole |
| Snapshot Agent 구성 | Consul 서버 | global.secretsBackend.vault.consulServerRole |
| 서버 TLS 자격 증명 | Consul 서버, Consul 클라이언트, Consul 컴포넌트 | global.secretsBackend.vault.consulServerRole, global.secretsBackend.vault.consulClientRole, global.secretsBackend.vault.consulCARole |
| 서비스 메시 및 Consul 클라이언트 TLS 자격 증명 | Consul 서버 | global.secretsBackend.vault.consulServerRole |
| 컨트롤러 및 connect 인젝트용 Webhook TLS 인증서 | Consul 컨트롤러, Consul connect 인젝트 | global.secretsBackend.vault.controllerRole, global.secretsBackend.vault.connectInjectRole |
보조 데이터센터 (Secondary datacenters)
보조 데이터센터의 매핑은 다음 차이점을 제외하면 유사합니다:
- 기본 데이터센터에서 ACL이 부트스트랩되었으므로 부트스트랩 토큰은 사용되지 않습니다.
- ACL 파티션 토큰은
server-acl-init잡과partition-init잡 서비스 계정 모두에 매핑됩니다. - ACL 복제 토큰은
server-acl-init잡과 Consul 서비스 계정 모두에 매핑됩니다.
| 시크릿 (Secret) | 서비스 계정 대상 (Service Account For) | Consul k8s Helm의 구성 가능한 역할 (Configurable Role) |
| ACL 파티션 토큰 | Consul server-acl-init 잡, Consul partition-init 잡 | global.secretsBackend.vault.manageSystemACLsRole, global.secretsBackend.vault.adminPartitionsRole |
| ACL 복제 토큰 | Consul server-acl-init 잡, Consul 서버 | global.secretsBackend.vault.manageSystemACLsRole, global.secretsBackend.vault.consulServerRole |
| Enterprise 라이선스 | Consul 서버, Consul 클라이언트 | global.secretsBackend.vault.consulServerRole, global.secretsBackend.vault.consulClientRole |
| 가십 암호화 키 | Consul 서버, Consul 클라이언트 | global.secretsBackend.vault.consulServerRole, global.secretsBackend.vault.consulClientRole |
| Snapshot Agent 구성 | Consul 서버 | global.secretsBackend.vault.consulServerRole |
| 서버 TLS 자격 증명 | Consul 서버, Consul 클라이언트, Consul 컴포넌트 | global.secretsBackend.vault.consulServerRole, global.secretsBackend.vault.consulClientRole, global.secretsBackend.vault.consulCARole |
| 서비스 메시 및 Consul 클라이언트 TLS 자격 증명 | Consul 서버 | global.secretsBackend.vault.consulServerRole |
| 컨트롤러 및 connect 인젝트용 Webhook TLS 인증서 | Consul 컨트롤러, Consul connect 인젝트 | global.secretsBackend.vault.controllerRole, global.secretsBackend.vault.connectInjectRole |
역할 내 정책 결합 (Combining policies within roles)
필요에 따라 Consul on Kubernetes 서비스 계정이 둘 이상의 시크릿을 요청해야 할 수 있습니다. 여러 시크릿을 요청하려면 필요한 시크릿과 연결된 여러 정책에 매핑된 Consul on Kubernetes 서비스 계정용 역할을 하나 만드세요.
예를 들어 Consul on Kubernetes 서버가 Consul 서버 TLS 자격 증명과 Enterprise 라이선스에 접근해야 한다면:
-
각 시크릿에 대해 정책을 만듭니다.
Consul 서버 TLS 자격 증명:
ca-policy.hcl:path "pki/cert/ca" { capabilities = ["read"] }$ vault policy write ca-policy ca-policy.hclEnterprise 라이선스:
license-policy.hcl:path "secret/data/consul/license" { capabilities = ["read"] }$ vault policy write license-policy license-policy.hcl -
Consul on Kubernetes 서비스 계정을 2개의 정책에 매핑하는 역할을 하나 만듭니다.
$ vault write auth/kubernetes/role/consul-server \ bound_service_account_names=<Consul server service account> \ bound_service_account_namespaces=<Consul installation namespace> \ policies=ca-policy,license-policy \ ttl=1h
상세 데이터 통합 가이드 (Detailed data integration guides)
다음 시크릿은 임의의 시크릿을 처리하도록 설계된 Vault KV 시크릿 엔진에 저장할 수 있습니다:
다음 TLS 인증서와 키는 인증서 만료·회전 같은 것을 처리하도록 설계된 Vault PKI 엔진이 생성하고 관리할 수 있습니다:
- 서버 TLS 자격 증명
- 서비스 메시 및 Consul 클라이언트 TLS 자격 증명
- Kubernetes의 Consul 컨트롤러·Connect 인젝트용 Webhook 인증서 제공자로서의 Vault
시크릿-서비스 계정 매핑 (Secrets-to-service account mapping)
환경에 해당하는 상세 데이터 통합 가이드를 읽어보세요.