GPG로 .env 파일 암호화해서 안전하게 커밋하기
요약: .env 파일을 Git에 커밋해야 할 때 GPG로 암호화해 비밀값 노출을 막는 방법을 정리했습니다. .gitignore 처리부터 gpg encrypt/decrypt 명령과 recipient 기본 설정까지 적용해 안전한 저장소 운영을 시작하세요.

개요
애플리케이션 설정 파일이나 환경 변수 정의 파일을 Git에 커밋해야 하는 경우가 있습니다.
개발 환경 비밀번호라서 무심코 커밋해버리거나 운영(프로덕션) 환경의 비밀번호가 포함된 채로 커밋되는 경우도 종종 있습니다.
이 글에서는 비밀 정보가 포함된 파일을 커밋할 때 내용을 암호화해 은닉하는 방법을 정리합니다.
대표적인 접근은 여러 가지가 있지만 여기서는 GPG를 직접 사용하는 방식만 다룹니다.
추천하는 파일 내용 암호화에 자주 쓰는 방법
- gpg
- age
- git-crypt (Git 필터 기반 암호화)
- sops (+age)
왜 GPG?
GitHub 커밋/태그 서명 때문에 이미 GPG를 쓰는 경우가 많습니다.
동일한 키로 파일 암호화까지 이어갈 수 있다는 점이 장점입니다.
설치/키 생성은 Git에서 GPG로 커밋 서명하기 문서를 참고하세요.
파일 암호화만 목적이라면 age가 더 단순하게 느껴질 수도 있습니다.
파일 암호화/복호화
사전 요구사항: 아래 과정을 진행하기 전에 GPG 키가 발급되어 있어야 합니다.
먼저 확인할 점(중요)
- 이미 과거 커밋에 포함된 적이 있다면
.gitignore에 추가해도 과거 커밋에서 비밀값을 열람할 수 있습니다. - 완전히 없애려면 비밀값을 폐기/재발급하고 git 커밋을 재작성해야 합니다.
git filter-repo또는 BFG Repo-Cleaner- (필요 시) force push
원본 파일은 Git에서 제외
1# .gitignore에 .env 추가
2echo ".env" >> .gitignore
3
4# 혹시 이미 추적 중이라면 인덱스에서 제거
5# (로컬 파일은 남겨두고 Git 추적만 제거)
6git rm --cached .env
파일 암호화
주의사항
gpg --encrypt는 기존 파일을 업데이트하는 개념이 아니라, 매번 출력 파일을 새로 생성합니다.- 파일이 이미 있을 때 덮어쓰냐고 물어봅니다. 자동 동의는
--yes옵션을 사용합니다.
.env 파일 예시:
비밀이 포함된 .env 파일로 암호화 된 .env 파일을 만듭니다.
1# 지정한 recipient(수신자) 키로 암호화해서 .env.enc 생성
2gpg --encrypt -r [email protected] --output .env.enc .env
3
4# 덮어쓰기까지 자동화가 필요하면
5# gpg --yes --encrypt -r [email protected] --output .env.enc .env
파일 복호화
.env.enc 파일로 비밀이 포함된 .env 파일을 만듭니다.
1gpg --decrypt .env.enc > .env
기타
기본 recipient 지정하기
- 매번
-r을 지정하기 번거로운 경우 사용할 수 있습니다. default-recipient:-r옵션이 없을 때 기본으로 사용encrypt-to:-r옵션과 상관없이 무조건 포함- 설정 파일:
~/.gnupg/gpg.conf
1# 기본 키
2default-key {pub uuid}
3
4# 기본 recipient
5default-recipient {pub uuid}
6
7# 무조건 포함 recipient (필요한 경우만)
8#encrypt-to {pub uuid}
관련 글
이 글은 Notion에서 작성되었고 Github Action을 통해 Hugo로 변환되었습니다.
Copyright © plzhans. All Rights Reserved. | Powered by github.com/plzhans/hans-blog