스프링/웹 개발
SOPS+Age로 시크릿을 git으로 관리하기
채야미
2025. 6. 3. 15:49
Sops란?
SOPS(Secrets OPerationS)는 Mozilla에서 관리하는 오픈소스 프로젝트 중 하나로, yaml, json, env, ini, 그리고 그 외 여러 포맷들을 지원하는 암호화 파일 에디터
- AWS KMS, GCP KMS, PGP, age 등 다양한 백엔드 지원
- GitOps 환경에서 시크릿을 Git에 커밋할 수 있도록 함
최신 암호 기술을 사용하는 심플한 파일 암호화 도구
공개키/개인키 기반 비대칭 암호화
GPG보다 간단하고 직관적이며 빠름
age란?
- 최신 암호 기술을 사용하는 간단한 암호화 툴
- 공개키/개인키 기반 비대칭 암호화
- GPG보다 간단하고 직관적이며 빠름
SOPS + age 설정 및 사용법
1. 설치
brew install sops
brew install age
2. 키 생성 및 저장
mkdir ~/.sops
age-keygen -o ~/.sops/key.txt
3. 환경 변수 등록 (~/.zshrc
등)
# for SOPS
export SOPS_AGE_KEY_FILE=$HOME/.sops/key.txt
# 적용
source ~/.zshrc
4. 키 확인
cat $SOPS_AGE_KEY_FILE
5. 프로젝트 설정 (.sops.yaml
생성)
creation_rules:
- path_regex: ".*[sS]ecret.*\\.yaml$" # 대상 파일 정규표현식
encrypted_regex: ^(data|stringData)$ # 암호화할 key 값 지정
age: >- # 공개키 리스트
age1xxxx..., age1yyyy...
여러 공개키(age1...
)를 쉼표로 구분하여 추가
6. 파일 암호화
sops -e -i argocd-secret.yaml
7. 복호화 후 쿠버네티스에 복호화된 시크릿 적용 예
sops -d argocd-secret.yaml | kubectl apply -f -
이렇게 특정 값을 암호화하면 해당 파일에서 다음과같이 변환되는 것을 볼 수 있음
data:
dex.github.clientSecret: ENC[AES256_......,type:str]
sops:
age:
- recipient: age1rklrkck56y95lx83j068p0us0cscutyae7j4ecsh09zwxfje4gvqe2q5ys
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
실제 값
-----END AGE ENCRYPTED FILE-----
- recipient: age19nw8qsqy6zsvq3ydfx87nxuzmw4w6xm96g8tdvpj9t7ph0qe0y4s7zh3l3
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
실제값
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-06-01T05:47:19Z"
mac: ENC[.....]
unencrypted_suffix: _unencrypted
version: 3.10.2
이렇게 해서 git에 시크릿을 그대로 올리고, 사람마다 복호화해서 볼 수 가 있음
키가 추가되는 경우에는 update를 수행
sops updatekeys secrets.dev.yaml
관련자료가 많이 없는데 조금이라도 해결에 도움이 됫길 바라며.. 춍춍...