External Secret
External Secrets Operator(ESO)는 Kubernetes 환경에서 외부 비밀 관리 시스템(예: AWS Secrets Manager, HashiCorp Vault, Google Secret Manager 등)에 저장된 비밀 정보를 Kubernetes 클러스터 내에서 Kubernetes Secret으로 쉽게 사용할 수 있게 해주는 오픈소스 오퍼레이터입니다. 이를 통해 애플리케이션이 외부에서 관리되는 비밀을 안전하게 사용할 수 있습니다.
ESO를 사용하는 이유
보안성: 비밀 데이터를 애플리케이션 코드에 직접 포함하지 않고 외부 비밀 저장소에 보관함으로써 보안 위협을 줄일 수 있습니다.
자동화: 비밀 데이터가 변경될 때마다 수동으로 Kubernetes Secret을 업데이트할 필요 없이, 자동으로 동기화됩니다.
유연성: 여러 클라우드 제공자의 비밀 저장소와 통합되어 클러스터 환경에 구애받지 않고 사용할 수 있습니다.
주요 개념
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
Secret Store:
ESO가 외부 비밀 관리 시스템에 접근할 수 있도록 연결 정보를 제공하는 리소스입니다. AWS Secrets Manager, Google Secret Manager와 같은 다양한 외부 저장소에 대한 연결 설정과 인증 정보를 포함합니다.
apiVersion: external-secrets.io/v1beta1
kind: SecretStore
metadata:
name: aws-secret-store
spec:
provider:
aws:
service: SecretsManager
region: us-east-1 # AWS 리전
auth:
secretRef:
accessKeyIDSecretRef:
name: aws-creds
key: accessKey # 액세스 키
secretAccessKeySecretRef:
name: aws-creds
key: secretAccessKey # 시크릿 키
ClusterSecretStore:
여러 네임스페이스에서 사용할 수 있도록 외부 비밀 관리 시스템을 정의하는 리소스입니다. 하나의 비밀 저장소를 클러스터 전역에서 사용할 수 있게 설정합니다.
apiVersion: external-secrets.io/v1beta1
kind: ClusterSecretStore
metadata:
name: aws-secret-store
spec:
# provider field contains the configuration to access the provider
# which contains the secret exactly one provider must be configured.
provider:
# (1): AWS Secrets Manager
# aws configures this store to sync secrets using AWS Secret Manager provider
aws:
service: SecretsManager
region: ap-northeast-2
# Auth defines the information necessary to authenticate against AWS
auth:
jwt:
serviceAccountRef:
name: external-secrets
namespace: external-secrets


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