Post

Kubernetes Secret with Git

Kubernetes Secret을 GitOps 환경에서 안전하게 관리하는 방법

개념 설명:

Kubernetes의 Secret은 비밀번호, 토큰, 인증 키 같은 민감한 데이터를 저장하고 관리하는 리소스.
기본적으로 Base64로 인코딩되며, 환경변수, 볼륨, 커맨드라인 인자 등을 통해 Pod에 주입할 수 있음.

“A Secret is an object that contains a small amount of sensitive data such as a password, a token, or a key. Such information might otherwise be put in a Pod specification or in a container image.”
공식문서

하지만 Base64 인코딩은 암호화가 아니며, Git에 그대로 올릴 경우 민감 정보 유출 위험이 큼.
GitOps 환경에서는 이를 안전하게 처리하기 위한 여러 도구가 필요.


비슷한 개념과 비교:

항목목적Git 저장 가능 여부보안 수준
ConfigMap비민감한 설정값 저장O낮음
Secret민감 정보 저장 (Base64 인코딩)X낮음
Sealed Secret공개키 암호화된 SecretO높음
External Secrets외부 비밀 시스템에서 Secret을 동기화O매우 높음
SOPSYAML 파일 자체를 암호화O높음

사용이 적합한 환경:

  • GitOps 기반 배포 파이프라인 (예: Argo CD, Flux)
  • 보안 정책상 Git 저장이 필요한 조직
  • 외부 비밀 관리 시스템(AWS/GCP/Vault 등)을 이미 사용 중인 조직
  • 변경 이력 및 감사 로그가 필요한 환경

사용 방법:

1. Sealed Secrets (Bitnami)

  • kubeseal CLI로 Secret을 암호화해 Git에 저장
  • 클러스터 내 컨트롤러가 SealedSecret을 복호화해 실제 Secret 생성
1
2
kubectl create secret generic my-secret --from-literal=password=1234 --dry-run=client -o yaml > secret.yaml
kubeseal --format=yaml < secret.yaml > sealed-secret.yaml

Sealed Secrets 공식 문서


2. External Secrets (ESO)

  • AWS Secrets Manager, HashiCorp Vault 등과 연동
  • Secret을 Git이 아닌 외부 시스템에 저장하고, 클러스터에서 동기화
1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: db-credentials
spec:
  secretStoreRef:
    name: aws-secret-store
    kind: ClusterSecretStore
  target:
    name: db-secret
  data:
    - secretKey: password
      remoteRef:
        key: prod/db/password

External Secrets 공식 문서


3. SOPS + Kustomize

  • YAML 파일 자체를 GPG, AWS KMS 등으로 암호화해 Git에 저장
  • 배포 시 자동으로 복호화되어 사용됨
1
sops -e secret.yaml > secret.enc.yaml
  • Kustomize와 함께 사용해 GitOps 파이프라인에 통합 가능

SOPS 공식 문서


Kubernetes Secret을 Git에 저장할 때는 다음의 보안 수칙을 따라야 한다:

  • Git에는 절대 평문 Secret을 저장하지 말 것
  • 암호화 도구(Sealed Secrets, SOPS) 또는 외부 비밀 저장소(ESO)를 활용할 것
  • GitOps 파이프라인에서 자동화된 보안 흐름을 구축할 것
This post is licensed under CC BY 4.0 by the author.