sops — 구조화 파일 시크릿 관리
Linux / 사용자 및 보안 관리 / sops.html
💬 "sops 명령어"
sops는 구조화 파일 시크릿 관리 JSON·YAML·TOML의 일부 값만 암호화합니다. Git에 커밋해도 시크릿이 노출되지 않습니다.
JSON·YAML·TOML·ENV·INI 구조를 인식합니다. 값(value)만 암호화하고 키·구조는 평문으로 유지합니다.
- 개념: JSON·YAML·TOML·ENV·INI 구조를 인식합니다.
- 주요 기능: 값(value)만 암호화하고 키·구조는 평문으로 유지합니다.
- 장점: age·PGP·KMS·GCP·AWS·Azure 키 백엔드를 지원합니다.
- 활용: Git 커밋 후에도 diff가 읽기 쉽습니다.
설치 및 다운로드
sops는 패키지 매니저 또는 공식 스크립트로 설치합니다.
| 환경 | 명령 |
|---|---|
| Go install | go install go.mozilla.org/sops/v3/cmd/sops@latest |
| macOS (brew) | brew install sops |
| 공식 바이너리 | github.com/getsops/sops/releases |
| 확인 | sops --version |
설치 확인은 sops --version으로 합니다.
자주 쓰는 옵션
| 옵션 | 설명 |
|---|---|
-e, --encrypt | 암호화 (파일→표준출력) |
-d, --decrypt | 복호화 |
-i, --in-place | 원본 파일을 직접 수정합니다 |
--set <path> <value> | 특정 경로 값을 설정·암호화합니다 |
--extract <path> | 특정 경로 값만 추출합니다 |
필수 명령어 조합 3가지
sops -e secrets.yaml > secrets.enc.yaml— 파일 전체 암호화sops -d secrets.enc.yaml— 복호화sops --set '["db"]["password"] "newpass"' secrets.enc.yaml— 값 갱신
💬 "실제 서버에서 sops를 사용하는 예시를 보여줘"
실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다.
1단계 · 키 설정
.sops.yaml에 age 공개키를 등록합니다.
echo 'creation_rules:\n - path_regex: secrets\\.ya?ml$\n age: age1...' > .sops.yaml
2단계 · 암호화
secrets 파일을 암호화합니다.
sops -e secrets.yaml > secrets.enc.yaml
3단계 · Git 커밋
암호화 파일을 커밋합니다.
git add .sops.yaml secrets.enc.yaml && git commit -m 'Add secrets'
실제 실행 화면
sops로 YAML 값을 암호화한 결과입니다.

실제 운영 중인 서버
실무에서는 이렇게 씁니다
1. docker-compose 시크릿 관리
상황 — docker-compose.yml의 비밀번호만 암호화합니다.
sops -e docker-compose.yml > docker-compose.enc.yml
결과 — password 값이 ENC[AES256_GCM,...]로 바뀝니다.
포인트 — 키·구조는 평문으로 유지되어 diff가 읽기 쉽습니다.
2. Git 커밋 후 복호화
상황 — 암호화 파일을 git에 커밋하고 배포 시 복호화합니다.
git add .sops.yaml secrets.enc.yaml && git commit -m 'secrets'
sops -d secrets.enc.yaml
결과 — Git에는 ENC[...]만 남고 배포 시 실제 값으로 복호화됩니다.
포인트 — .sops.yaml에 age 공개키를 등록합니다.
실제 실행 화면
sops -d로 복호화한 결과입니다.

실제 운영 중인 서버
주의할 점
- .sops.yaml의 creation_rules와 실제 파일 경로가 일치해야 합니다. 불일치 시 암호화가 실패합니다.
- 비밀키를 잃으면 복호화 불가합니다. age 키든 PGP 키든 반드시 백업합니다.
- ENV 형식 파일은 sops가 구조를 인식하지 못할 수 있습니다.