External Secret

External Secrets Operator(ESO)는 Kubernetes 환경에서 외부 비밀 관리 시스템(예: AWS Secrets Manager, HashiCorp Vault, Google Secret Manager 등)에 저장된 비밀 정보를 Kubernetes 클러스터 내에서 Kubernetes Secret으로 쉽게 사용할 수 있게 해주는 오픈소스 오퍼레이터입니다. 이를 통해 애플리케이션이 외부에서 관리되는 비밀을 안전하게 사용할 수 있습니다.

ESO를 사용하는 이유

  • 보안성: 비밀 데이터를 애플리케이션 코드에 직접 포함하지 않고 외부 비밀 저장소에 보관함으로써 보안 위협을 줄일 수 있습니다.

  • 자동화: 비밀 데이터가 변경될 때마다 수동으로 Kubernetes Secret을 업데이트할 필요 없이, 자동으로 동기화됩니다.

  • 유연성: 여러 클라우드 제공자의 비밀 저장소와 통합되어 클러스터 환경에 구애받지 않고 사용할 수 있습니다.

주요 개념

  1. ExternalSecret:

    • 외부 비밀 관리 시스템에 저장된 비밀을 참조하여 Kubernetes의 Secret으로 변환하는 리소스입니다. ExternalSecret은 외부에서 가져올 데이터를 정의하고 Kubernetes Secret으로 매핑하는 역할을 합니다.

apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: example-secret
spec:
  secretStoreRef:
    name: aws-secret-store  # Secret Store 참조
    kind: SecretStore
  target:
    name: example-kubernetes-secret  # 생성될 Kubernetes Secret 이름
  data:
    - secretKey: username  # Kubernetes Secret의 key
      remoteRef:
        key: prod/db-credentials  # 외부 비밀 저장소에서 참조할 비밀
        property: username
  1. Secret Store:

  • ESO가 외부 비밀 관리 시스템에 접근할 수 있도록 연결 정보를 제공하는 리소스입니다. AWS Secrets Manager, Google Secret Manager와 같은 다양한 외부 저장소에 대한 연결 설정과 인증 정보를 포함합니다.

  1. ClusterSecretStore:

  • 여러 네임스페이스에서 사용할 수 있도록 외부 비밀 관리 시스템을 정의하는 리소스입니다. 하나의 비밀 저장소를 클러스터 전역에서 사용할 수 있게 설정합니다.

SecertsManager
Parameter Store

Secret 데이터의 자동 갱신

외부 비밀 관리 시스템에서 비밀 데이터가 변경될 경우, ESO는 이를 감지하여 Kubernetes Secret을 자동으로 갱신합니다. 이렇게 하면 Kubernetes 애플리케이션이 최신 비밀 정보를 사용할 수 있으며, 수동 업데이트의 번거로움을 줄일 수 있습니다.

외부 비밀 관리 시스템

  • AWS Secrets Manager: AWS 환경에서 비밀 데이터를 관리할 때 사용됩니다.

  • AWS Systems Manager Parameter Store: AWS의 파라미터 저장소로도 통합 가능합니다.

  • Google Secret Manager: GCP 환경에서 비밀 관리에 사용됩니다.

  • HashiCorp Vault: 오픈소스 기반의 보안 자격 증명 관리 시스템입니다.

  • Azure Key Vault: Microsoft Azure 클라우드의 비밀 관리 서비스입니다.

고려 사항

  • ESO는 외부 비밀 저장소와 안전하게 통신하기 위해 OAuth, IAM 역할, API 키 등 다양한 인증 방식을 지원합니다. 이로써 외부 비밀 저장소와의 연결이 안전하게 유지되며, 민감한 데이터에 대한 접근이 엄격히 제어됩니다.

  • Kubernetes Secret에 저장된 데이터는 Base64 인코딩이지만, 암호화가 아니므로 적절한 RBAC 설정 및 추가적인 Secret 암호화를 고려할 수 있습니다.

Last updated