Kubernetes External Secrets는 Kubernetes 클러스터 외부에 저장된 비밀(예: AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager 등)의 데이터를 Kubernetes Secret으로 동기화하는 도구입니다. 이를 통해 비밀을 안전하게 관리하고 배포할 수 있으며, 애플리케이션이 외부 비밀 저장소에 직접 접근하지 않고 Kubernetes Secret을 통해 필요한 비밀에 접근할 수 있습니다.
주요 기능
- 자동 동기화
외부 비밀 저장소에 있는 비밀 값이 변경되면 Kubernetes Secret에 자동으로 반영됩니다. 이를 통해 최신 상태의 비밀을 유지할 수 있습니다.
- 지원되는 비밀 저장소
AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager 등 여러 외부 비밀 저장소와 연동할 수 있습니다.
- 보안성
애플리케이션이 직접 외부 비밀 저장소에 접근할 필요가 없으므로, 외부 API 접근 권한을 최소화할 수 있고, Kubernetes의 RBAC 설정을 통해 애플리케이션의 비밀 접근을 제어할 수 있습니다.
- 사용자 정의
필요한 비밀만 선택하여 Kubernetes Secret으로 동기화할 수 있으며, JSONPath나 템플릿을 사용해 필요한 비밀 형식으로 변환하여 저장할 수 있습니다.
작동 원리
- ExternalSecret 리소스 정의
ExternalSecret 리소스는 외부 비밀 저장소의 비밀을 Kubernetes Secret으로 가져오기 위한 설정을 담고 있습니다. 이 리소스에는 비밀이 저장된 외부 저장소와 동기화할 비밀의 이름 및 키 등의 정보가 포함됩니다.
- Kubernetes Operator:
External Secrets Operator는 ExternalSecret 리소스를 모니터링하고, 지정된 외부 비밀 저장소에 접근해 필요한 비밀을 가져와 Kubernetes Secret으로 생성 또는 업데이트합니다.
사용 예시
apiVersion: external-secrets.io/v1alpha1
kind: ExternalSecret
metadata:
name: my-secret
spec:
secretStoreRef:
name: aws-secrets-manager
kind: SecretStore
target:
name: my-k8s-secret
creationPolicy: Owner
data:
- secretKey: db-password
remoteRef:
key: production/db
property: password
위의 예시에서 production/db
라는 AWS Secrets Manager에 저장된 비밀의 password
속성을 Kubernetes Secret의 db-password
키로 동기화합니다.
장점과 고려사항
- 장점: 비밀 관리의 중앙화, 보안성 강화, 자동 동기화 기능으로 관리 편의성 제공.
- 고려사항: 외부 비밀 저장소에 대한 추가 설정과 비용이 필요하며, 운영 중인 Kubernetes 클러스터와 외부 비밀 저장소 간의 네트워크 연결이 안정적이어야 합니다.
참조
Introduction - External Secrets Operator