sops + container
SOPS를 Docker에 포함하는 대표적 사례
SOPS(Secrets OPerationS)는 Docker 환경에서 다양한 방식으로 통합·활용되고 있습니다. 아래는 실제 사례와 구현 방법, 그리고 주요 활용 패턴을 정리한 내용입니다.
1. SOPS 바이너리 내장 Docker 이미지 생성
- 방법: Dockerfile에서 SOPS 바이너리를 직접 다운로드해 이미지에 포함시킵니다.
- 예시:
FROM alpine:latest
# SOPS 설치
RUN wget https://github.com/mozilla/sops/releases/download/v3.8.1/sops-v3.8.1.linux.amd64 -O /usr/local/bin/sops \
&& chmod +x /usr/local/bin/sops
# age(옵션) 설치
RUN wget https://github.com/FiloSottile/age/releases/download/v1.1.1/age-v1.1.1-linux-amd64.tar.gz -O /usr/local/bin/age \
&& chmod +x /usr/local/bin/age
# 필요에 따라 키 파일, 설정 파일 등을 COPY
COPY ./src/generate_sops_config.sh /app/config/generate_sops_config.sh
RUN chmod +x /app/config/generate_sops_config.sh
# 추가적으로 키 생성, .sops.yaml 생성 등 스크립트 실행 가능
ENTRYPOINT ["sops"]
2. SOPS를 활용한 컨테이너 환경변수 주입
- 방법: SOPS의
exec-env
기능을 활용하여, 암호화된 시크릿 파일을 복호화해 Docker 컨테이너에 환경변수로 주입합니다. - 예시:
sops exec-env secret.enc.json 'docker run --rm -it -e PASSWORD_1=$PASSWORD_1 alpine sh -c "echo $PASSWORD_1"'
- `secret.enc.json` 파일을 복호화해 환경변수로 만들고, 해당 환경변수를 컨테이너에 전달합니다.
- Docker Compose 연동:
sops exec-env secret.enc.json 'docker compose up'
- 환경변수는 오직 해당 프로세스에서만 유효하며, 안전하게 임시로 전달됩니다[^4].
3. SOPS + HashiCorp Vault 등 외부 시크릿 관리와 연동
- 방법: Vault, AWS KMS, GCP KMS 등 외부 시크릿 관리 시스템과 SOPS를 연동하여, Docker 컨테이너에서 안전하게 시크릿을 복호화·활용합니다.
- 예시: Vault를 Docker 컨테이너로 띄우고, SOPS가 Vault의 키로 시크릿을 암호화/복호화하도록 설정3.
4. .sops.yaml로 파일별 암호화 정책 자동화
- 방법:
.sops.yaml
파일을 Docker 이미지에 포함시키거나, 볼륨 마운트로 전달하여 환경별(예: dev, prod)로 각기 다른 KMS 키, PGP 키 등을 자동 지정할 수 있습니다. - 예시:
creation_rules:
- path_regex: \.dev\.yaml$
kms: "arn:aws:kms:us-east-1:111111111111:key/xxx-xxx-xxx"
- path_regex: \.prod\.yaml$
kms: "arn:aws:kms:us-east-1:111111111111:key/yyy-yyy-yyy"
- pgp: "A2B73FB4DA0891B38EECD35B47991CD146C9C4BC"
- 파일명 패턴에 따라 자동으로 암호화 키를 선택[^5].
5. 실전 활용 패턴
- CI/CD 파이프라인: SOPS 내장 이미지를 사용해 빌드/배포 과정에서 시크릿 복호화 및 환경변수 주입 자동화
- 로컬 개발/운영 환경: SOPS 내장 컨테이너로 시크릿 파일 관리, 복호화, 테스트 일관성 확보
- 컨테이너화된 시크릿 관리: SOPS를 포함한 컨테이너를 별도의 유틸리티로 활용, 필요 시 볼륨 마운트로 시크릿 파일 주입
요약
- SOPS는 Docker 이미지에 바이너리로 포함해 사용할 수 있으며, 환경변수 주입, 시크릿 복호화, 외부 시크릿 관리 시스템과의 연동 등 다양한 활용 사례가 있습니다.
sops exec-env
를 통한 환경변수 주입,.sops.yaml
로 파일별 암호화 정책 지정, Vault 등 외부 서비스와의 연동이 대표적입니다.- CI/CD, 개발, 운영 등 다양한 환경에서 SOPS 내장 Docker 이미지를 활용하면 시크릿 관리의 일관성과 보안성을 크게 높일 수 있습니다1243.
-
https://stackoverflow.com/questions/77729358/dockerfile-cant-find-successfully-copied-files-with-run ↩︎ ↩︎
-
https://rakhesh.com/docker/building-a-docker-sops-image/ ↩︎ ↩︎
-
https://blog.gitguardian.com/a-comprehensive-guide-to-sops/ ↩︎ ↩︎
-
https://blog.gitguardian.com/how-to-handle-secrets-in-docker/ ↩︎