Sops
sops (Secrets OPerationS)는 Mozilla에서 개발한 암호화된 파일 편집기로, YAML, JSON, ENV, INI 등의 파일에서 값(value)만 선택적으로 암호화한다. 키(key)는 평문으로 유지되므로 Git diff가 가능하며, age, AWS KMS, GCP KMS, Azure Key Vault, HashiCorp Vault, PGP 등 다양한 키 백엔드를 지원한다. GitOps 환경에서 secret을 버전 관리하는 사실상의 표준 도구.
핵심 특징
- 부분 암호화 — 파일의 key는 그대로 두고 value만 암호화.
git diff로 어떤 필드가 변경되었는지 확인 가능 - 다중 키 백엔드 — age, PGP, AWS KMS, GCP KMS, Azure Key Vault, HashiCorp Vault Transit 지원
- 다중 수신자 — 여러 키로 동시에 암호화 가능 (팀 환경)
- 지원 포맷 — YAML, JSON, ENV, INI, binary
- Go로 작성되어 단일 바이너리로 배포
설치
# Linux
curl -LO https://github.com/getsops/sops/releases/download/v3.9.4/sops-v3.9.4.linux.amd64
sudo mv sops-v3.9.4.linux.amd64 /usr/local/bin/sops && sudo chmod +x /usr/local/bin/sops
# macOS
brew install sops
# Docker
docker run --rm -v $(pwd):/work ghcr.io/getsops/sops:v3.9.4 --help
기본 사용법
# age 키와 함께 암호화
sops --age $(cat ~/.sops/age-key.pub) -e secrets.yaml > secrets.enc.yaml
# 복호화
export SOPS_AGE_KEY_FILE=~/.sops/age-key.txt
sops -d secrets.enc.yaml
# 인플레이스 편집 (복호화 → 편집기 → 재암호화)
sops secrets.enc.yaml
.sops.yaml 설정 파일
프로젝트 루트에 .sops.yaml을 두면 경로별로 암호화 규칙을 자동 적용할 수 있다:
creation_rules:
- path_regex: environments/prod/.*\.yaml$
age: >-
age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
age1yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
- path_regex: environments/dev/.*\.yaml$
age: age1zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
암호화된 파일 예시
db:
host: mydb.example.com # key는 평문
password: ENC[AES256_GCM,data:xxxxx,iv:yyyyy,tag:zzzzz,type:str] # value만 암호화
port: ENC[AES256_GCM,data:aaaa,iv:bbbb,tag:cccc,type:int]
sops:
age:
- recipient: age1xxxxxxxxxx
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
...
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-02-19T10:00:00Z"
version: 3.9.4
Kubernetes / Docker 연동
# Docker 컨테이너에서 사용
docker run --rm \
-v $(pwd)/secrets.enc.yaml:/app/secrets.enc.yaml:ro \
-v ~/.sops/age-key.txt:/run/age-key.txt:ro \
-e SOPS_AGE_KEY_FILE=/run/age-key.txt \
myapp
# Kubernetes Secret으로 변환
sops -d secrets.enc.yaml | kubectl apply -f -
# Flux (GitOps) 연동 — Flux가 자동으로 sops 복호화
kubectl create secret generic sops-age \
--namespace=flux-system \
--from-file=age.agekey=age-key.txt
See also
- age - sops와 함께 사용하는 모던 암호화 도구
- GPG - 레거시 키 백엔드로 사용 가능
- HashiCorp Vault - 엔터프라이즈급 secret 관리
- Ansible Vault - Ansible 전용 secret 암호화
- Sealed Secrets - Kubernetes 전용 secret 암호화 (Bitnami)
- keyring
- SideKick - 명령어 2개로 어떤 앱이든 VPS에서 셀프호스팅하게 해주는 CLI 도구
Favorite site
- GitHub — getsops/sops — 공식 저장소 (CNCF 프로젝트)
- getsops.io — 공식 문서
- Flux SOPS Guide — Flux GitOps 연동 가이드