비밀번호와 같이 개인정보가 포함된 파일을 GitHub에 올려야할 때, 개인정보가 유출되지 않도록 암호화 하기 위해 git secret을 사용합니다.
로컬에서 password.txt
라는 개인정보가 담긴 파일을 암호화하여 git에 올리고, CI 서버(Jenkins)에서 해당 파일을 복호화하는 과정을 다룹니다.
git secret은 GPG(GNU Privacy Guard)를 기반으로 암호화하여 저장하기 때문에 GPG가 암호화/복호화할 OS에 설치되어 있어야 합니다.
사용자 환경에 따라 brew
또는 yum
또는 apt
명령어로 설치합니다.
$ yum install gpg
여기서 주의해야할 부분이 있는데, 암호화를 진행하는 OS와 복호화를 진행하는 OS에 설치된 gpg 버전이 같아야합니다. 참고 링크 (제가 암호화를 진행하는 MacOS에서는 gpg 버전 2.3.4(stable버전)를 설치하고, 복호화를 진행하는 CI서버(CentOS 7)에 gpg 버전 2.0.22(최신버전)을 설치하였었더니 CI 서버에서 복호화가 제대로 진행되지 않아 고생했었네요.)
$ gpg --gen-key
위 명령어 실행하면, 사용할 암호화 알고리즘을 선택하라고 합니다. (저는 기본값인 RSA를 선택하였습니다.) 암호화 알고리즘 선택 이후 Real Name, Email, Password를 입력하여 gpg key를 생성합니다. 여기서 설정한 Password 는 나중에 암호화된 파일을 복호화 할 시 입력해야하는 비밀번호 입니다.
git secret은 생성한 GPG key를 바탕으로 암호화할 대상 파일을 공개키로 암호화하고, 개인키로 복호화하여 파일을 볼 수 있게 됩니다.
gpg 설치할 때와 동일하게 사용자 환경에 따라 brew
또는 yum
또는 apt
명령어로 암호화/복호화할 OS에 git-secret을 설치합니다.
$ yum install git-secret
git secret
관련 명령어는 git의 기본 명령어와 굉장히 유사합니다.
$ git secret init
위 명령어를 실행하면, 프로젝트 내부에 .gitsecret
디렉터리를 생성되고, .gitignore
파일에 GitHub에 업로드되면 안되는 .gitsecret/keys/random_seed
파일이 추가됩니다.
$ git secret tell <이메일주소>
$ git secret tell sangyeon217@gmail.com
GPG key 생성 시 설정한 Email을 입력하여 암호화된 파일을 볼 수 있는 사용자를 추가합니다.
$ git secret add <파일명>
$ git secret add password.txt
위 명령어를 실행하면, .gitignore
파일에 GitHub에 업로드되면 안되는 원본 파일(예시에서는 password.txt
)이 추가됩니다.
$ git secret hide
<파일명>.secret
파일(예시에서는 password.txt.secret
)이 생성됩니다.
이후에는 표준 git 명령어를 수행하여 GitHub에 파일을 업로드합니다.
$ git add .
$ git commit -m "암호화된 파일 추가"
$ git push origin master
GPG key를 생성한 OS에서 CI 서버로 개인키를 전달하기 위해 export를 진행합니다.
$keyid
는 $ gpg --list-secret-keys
명령어를 통해 확인할 수 있습니다.
$ gpg -a --export-secret-keys $keyid > gpg-secret.key
$ gpg --export-ownertrust > gpg-ownertrust.txt
위 명령어를 실행하면, git-secret.key
파일과 gpg-ownertrust.txt
파일이 생성됩니다.
Jenkins > Dashboard > Credentials > System > Global credentials > Add Credentials 에서 아래 2가지 Credential을 생성합니다.
쉘 스크립트에서 개인키와 trustdb를 import합니다.
$ gpg --batch --import $gpg_secret
$ gpg --import-ownertrust $gpg_trust
이후, 아래 명령어를 실행하여 복호화를 진행합니다.
$ git secret reveal -p '$gpg_passphrase
이제 CI 서버에서 복호화된 파일을 이용할 수 있습니다.