--- title: sops — 구조화 파일 시크릿 관리 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: JSON·YAML·TOML의 일부 값만 암호화합니다. Git에 커밋해도 시크릿이 노출되지 않습니다. tags: 프로그램, 사용자 및 보안 관리, sops --- **💬 "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 | 특정 경로 값을 설정·암호화합니다 | | --extract | 특정 경로 값만 추출합니다 | ## 필수 명령어 조합 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 값을 암호화한 결과입니다. ![sops 명령어 실행 결과](https://games.cursorai.co.kr/assets/sops-demo.png) 실제 운영 중인 서버 ## 실무에서는 이렇게 씁니다 ### 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 명령어 실행 결과 2](https://games.cursorai.co.kr/assets/sops-demo2.png) 실제 운영 중인 서버 ## 주의할 점 - .sops.yaml의 creation_rules와 실제 파일 경로가 일치해야 합니다. 불일치 시 암호화가 실패합니다. - 비밀키를 잃으면 복호화 불가합니다. age 키든 PGP 키든 반드시 백업합니다. - ENV 형식 파일은 sops가 구조를 인식하지 못할 수 있습니다. --- 원문(HTML): https://games.cursorai.co.kr/programs/linux/security/sops.html