스프링/웹 개발

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

관련자료가 많이 없는데 조금이라도 해결에 도움이 됫길 바라며.. 춍춍...