Kubernetes External Secrets는 Kubernetes 클러스터 외부에 저장된 비밀(예: AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager 등)의 데이터를 Kubernetes Secret으로 동기화하는 도구입니다. 이를 통해 비밀을 안전하게 관리하고 배포할 수 있으며, 애플리케이션이 외부 비밀 저장소에 직접 접근하지 않고 Kubernetes Secret을 통해 필요한 비밀에 접근할 수 있습니다.

주요 기능

  1. 자동 동기화 외부 비밀 저장소에 있는 비밀 값이 변경되면 Kubernetes Secret에 자동으로 반영됩니다. 이를 통해 최신 상태의 비밀을 유지할 수 있습니다.
  2. 지원되는 비밀 저장소 AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager 등 여러 외부 비밀 저장소와 연동할 수 있습니다.
  3. 보안성 애플리케이션이 직접 외부 비밀 저장소에 접근할 필요가 없으므로, 외부 API 접근 권한을 최소화할 수 있고, Kubernetes의 RBAC 설정을 통해 애플리케이션의 비밀 접근을 제어할 수 있습니다.
  4. 사용자 정의 필요한 비밀만 선택하여 Kubernetes Secret으로 동기화할 수 있으며, JSONPath나 템플릿을 사용해 필요한 비밀 형식으로 변환하여 저장할 수 있습니다.

작동 원리

  1. ExternalSecret 리소스 정의 ExternalSecret 리소스는 외부 비밀 저장소의 비밀을 Kubernetes Secret으로 가져오기 위한 설정을 담고 있습니다. 이 리소스에는 비밀이 저장된 외부 저장소와 동기화할 비밀의 이름 및 키 등의 정보가 포함됩니다.
  2. 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 키로 동기화합니다.

장점과 고려사항

참조

Introduction - External Secrets Operator