API Key 등을 따로 파일 분리하여 관리하다보면 싱크가 안 맞는 경우가 생기는 게 조금 불편하다고 생각했다.
(원래 형상관리를 깃이 편하게 해주는데 깃에 올리지를 않으니..)
그래서 깃에는 올리되 특정 인원만 해당 파일을 볼 수 있게 암호화 하는 방법이 있지 않을까? 하는 생각으로 검색해봤고,
그에 대한 기록을 작성해두는 포스팅이다.
참고로 새삼스럽게 적어보자면 맥 환경을 기준으로 작성했다.
1. 사용 준비
1-a. GPG 설치
❓ GPG란?
GPG(gnupg, GNU Privacy Guard)는 데이터를 암호화하고 디지털 서명을 생성할 수 있는 오픈 소스 소프트웨어입니다. 주로 이메일, 파일, 코드 등의 보안을 유지하기 위해 사용됩니다. GPG는 공개 키 암호화를 사용하여 데이터를 안전하게 암호화하고, 디지털 서명을 통해 데이터의 무결성과 출처를 확인할 수 있습니다.
brew install gnupg
1-b. git-crypt 설치
brew install git-crypt
1-c. 공개키 만들기
git-crypt 생성자가 아닌 팀원들은 모두 만들어서 공유해야 한다.
기본적으로 초기에 git-crypt를 설정한 사람은 올리고 내릴때 자동으로 encrypt decrypt가 되지만, 다른 collaborator들은 적용되지 않으므로 추가적인 설정이 필요한데 이때 사용하는 키파일이다.
gpg --full-generate-key
<키 생성 시 권장 설정값>
1. Key Type: RSA and RSA (옵션 1)
2. Key Size: 4096 bits
3. Expiration Date: 설정 (예: 1y 또는 무제한 0)
4. User ID: 이름과 이메일 주소
5. Passphrase: 강력한 패스프레이즈 설정 (추후 git-crypt unlock 할 때 비밀번호로 사용됨)
gpg --export -a "[A@example.com]" > [A_public_key].asc
위에서 생성한 키를 공개키로 내보낸다. 각 [] 괄호 안의 값은 알맞게 셋팅해주자.
그리고 만들어진 ```[A_public_key].asc``` 파일을 git-crypt 생성자에게 전달하면 된다.
2. 프로젝트 적용
2-a. 프로젝트 폴더에서 git-crypt 초기화
git-crypt init
그러면 .git/git-crypt가 추가되고, git-crypt 할 수 있게 된다.
2-b. 프로젝트 폴더에 .gitattributes 파일 작성
[암호화할 파일의 경로] filter=git-crypt diff=git-crypt
vim .gitattributes
2-c. 프로젝트에 팀원들의 공개키 추가
2-a, 2-b를 진행한 git-crypt 생성자가 해주면 되는 과정이다.
gpg --import [A_public_key].asc
생성자의 gpg 키 리스트에 팀원 공개키 추가하는 과정이다.
최초 1회만 하면 될 것으로 추정하는데, 직접 확인해본 것은 아니긴 하다.
gpg --list-keys
명령어를 통해 gpg 키 리스트에 위 공개키가 잘 추가됐는지 확인해볼 수 있다.
git-crypt add-gpg-user --trusted [A@example.com]
gpg 키 리스트에 추가한 사용자를 프로젝트의 git-crypt에도 추가해준다.
여기까지 해주면 git-crypt 생성자의 역할은 끝이다.
2-d. 암호화된 파일 복호화 하기
생성자가 공개키를 추가해주고 나면, git-crypt 생성자가 아닌 팀원들은 이제 파일을 암호화된 파일을 받아 복호화 할 수 있다.
git-crypt unlock
프로젝트를 ```pull``` 한 후 위 명령어를 실행하면 비밀번호를 입력하라고 한다.
1-c에서 5번 과정에 입력한 비밀번호를 사용하면 된다.
혹시라도 Local change가 있다면 복호화가 불가능하므로, 수정사항이 있다면 discard를 하든 백업을 해두든 하자.
(해보진 않았지만 stash도 괜찮겠지?)
일단 암호화 한 파일을 깃에 올리고 다른 계정에서 해당 파일 복호화하는 작업까지 해보긴 했는데,
아직 낯설고 이해도가 낮다는 판단 하에 실제로 팀 내에 도입하지는 않았다.
테스트해보지 않았지만, 초기에 git-crypt를 설정한 사람이 아니더라도 collaborator가 또 사용자를 추가해 줄 수 있을까?
만약 아니라면 다른 사람이 퇴사해도 공용으로 사용할 수 있는 최고 관리자 계정을 또 따로 둬야 할 것 같은데..
나중에 기회가 된다면 좀더 계속 알아보고 싶은 부분이다.
(API Key 외부에 백업해두고 싱크 안 맞고 하는거 너무 불편하기 때문에..)
<도움 받은 링크들>
'개발노트 > 기타' 카테고리의 다른 글
git head 사라짐;; (유실된 커밋 복원) (0) | 2022.12.25 |
---|---|
Moving git repository and all its branches (0) | 2022.12.16 |