GPG + SOPS + Kustomize로 Kubernetes Secret 관리하기

Kubernetes Secret을 GitOps 방식으로 안전하게 관리하려면 Git에는 암호화된 상태로 저장하고, 클러스터 배포 시 자동 복호화되도록 구성해야 합니다. 이를 위해 다음 기술을 사용합니다.

  • GPG – SOPS가 사용하는 키 관리
  • SOPS – 파일 단위 암호화/복호화
  • Kustomize + SopsSecretGenerator – GitOps에서 Secret 자동 생성

이 글은 Linux ARM64 기준으로 테스트한 결과를 가지고 작성되었습니다.

1. GPG 설정 및 사용 방법

GPG는 GNU Privacy Guard의 약자로, 데이터를 암호화하고(Encrypt), 디지털 서명을(Sign) 할 수 있는 공개키 기반 암호화(PGP) 도구입니다. 오픈소스이며 전 세계적으로 가장 널리 쓰이는 암호화 표준입니다.

GPG 설치

sudo apt update
sudo apt install -y gnupg

GPG Key 생성

export KEY_NAME="master"
export KEY_COMMENT="master key for sops"

gpg --batch --full-generate-key <<EOF
%no-protection
Key-Type: 1
Key-Length: 4096
Subkey-Type: 1
Subkey-Length: 4096
Expire-Date: 0
Name-Comment: ${KEY_COMMENT}
Name-Real: ${KEY_NAME}
EOF

GPG Key Export

gpg --export-secret-key > private-key.asc
gpg --export > public-key.asc

GPG Key Import

gpg --import public-key.asc
gpg --import private-key.asc
gpg --list-keys

GPG Key List

pub   rsa4096 2024-08-26 [SCEA]
      9A7968E2B*******0CE0E7D
uid           [ultimate] master (master key for sops)
sub   rsa4096 2024-08-26 [SEA]

→ 이 fingerprint 값을 .sops.yaml에 사용합니다.

2. SOPS 설정 및 사용 방법

SOPS는 Secrets OPerationS의 약자로, YAML·JSON·ENV·INI 같은 설정 파일 내부의 특정 필드만 안전하게 암호화/복호화하기 위한 도구입니다. Mozilla에서 만들었고 Kubernetes GitOps 환경에서 거의 표준처럼 사용됩니다.

SOPS 설치

curl -LO https://github.com/getsops/sops/releases/download/v3.9.0/sops-v3.9.0.linux.amd64
sudo mv sops-v3.9.0.linux.amd64 /usr/local/bin/sops
sudo chmod +x /usr/local/bin/sops

.sops.yaml 생성

creation_rules:
  - pgp: "YOUR_GPG_KEY_FINGERPRINT"
예:
creation_rules:
  - pgp: "9A7968E2B*******0CE0E7D"

Example 파일 생성 (env key/value 형태)

mkdir -p secrets/sops
cat > secrets/sops/account.env <<EOF
USERNAME=user-01
PASSWORD=password
EOF

Git에는 암호화된 파일만 저장합니다.

SOPS 파일 암호화 & 복호화

✔ 암호화 (in-place)

sops --encrypt --in-place secrets/sops/account.env
또는 별도 출력 파일:
sops --encrypt secrets/sops/account.env > secrets/sops/account.enc.env

✔ 복호화

sops --decrypt secrets/sops/account.enc.env

3. Kustomize SopsSecretGenerator 설정 및 사용 방법

SopsSecretGenerator는 Kustomize 플러그인으로 제공되는 커스텀 Generator이며, SOPS로 암호화된 파일(.enc 등)을 자동으로 복호화하여 Kubernetes Secret을 생성해 주는 기능입니다. 즉, GitOps 환경에서 암호화된 Secret 파일을 Git에 저장해 두고, kustomize build 시점에 SOPS를 사용해 복호화 → Secret manifest 생성을 자동으로 수행하기 위한 도구입니다.

Kustomize SopsSecretGenerator 설치

mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/kustomize/plugin/goabout.com/v1beta1/sopssecretgenerator"
cd "${XDG_CONFIG_HOME:-$HOME/.config}/kustomize/plugin/goabout.com/v1beta1/sopssecretgenerator"

ARCH=linux_arm64
curl -kL -o SopsSecretGenerator \
  https://github.com/goabout/kustomize-sopssecretgenerator/releases/download/v1.6.0/SopsSecretGenerator_1.6.0_${ARCH}

chmod +x SopsSecretGenerator

sops-secrets.yaml 생성 (env 기반)

apiVersion: goabout.com/v1beta1
kind: SopsSecretGenerator
metadata:
  name: account
type: Opaque
behavior: create
envs:
  - secrets/sops/account.enc.env

kustomization.yaml 생성

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: samples

generators:
- sops-secrets.yaml

Kustomize 실행

kustomize build --enable-alpha-plugins .
출력 예:
apiVersion: v1
kind: Secret
metadata:
  name: account-mchtk8hmb7
type: Opaque
data:
  USERNAME: dXNlci0wMQ==
  PASSWORD: cGFzc3dvcmQ=

4. 마무리

GPG + SOPS + Kustomize 조합은 GitOps 환경에서 Secret을 안전하게 관리하기 위한 가장 강력하면서도 실용적인 방식입니다. 암호화된 파일만 Git에 보관하므로 보안 사고 위험이 크게 줄어들고, CI/CD 과정에서도 추가적인 복호화 로직 없이 Kustomize가 Secret 생성을 자동화합니다.

💬 무료 컨설팅 신청