자습서: 커밋에서 비밀을 제거합니다
애플리케이션이 외부 리소스를 사용하는 경우 일반적으로 비밀 (토큰 또는 키와 같은)을 사용하여 애플리케이션을 인증해야 합니다. 비밀이 원격 저장소에 푸시되면 저장소에 액세스 할 수있는 사람은 누구나 당신이나 애플리케이션을 표절 할 수 있습니다. 비밀을 실수로 커밋하면 여전히 푸시하기 전에 제거할 수 있습니다.
이 자습서에서는 가짜 비밀을 커밋 한 다음 프로젝트에 푸시하기 전에 커밋 기록에서 비밀을 제거하는 방법을 알아볼 것입니다. 또한 비밀이 저장소에 푸시되었을 때 해야 할 일도 배울 것입니다.
::: 이 자습서는 GitLab Unfiltered 비디오 커밋에서 비밀을 제거합니다에서 적용되었습니다.
시작하기 전에
이 자습서를 완료하기 전에 다음 사항이 있는지 확인하세요.
- 테스트 프로젝트. 모든 프로젝트를 사용할 수 있지만이 자습서를 위해 전용 테스트 프로젝트를 생성하는 것을 고려해보세요.
- 명령줄 Git을 사용하는 방법에 대해 어느 정도 알고 계셔야 합니다.
비밀 커밋
GitLab은 특정 문자, 숫자 및 기호 패턴과 일치시켜 비밀을 식별합니다. 이러한 패턴은 비밀의 유형을 식별하는 데도 사용됩니다. 예를 들어 가짜 비밀 glpat-12345678901234567890
는 glpat-
문자열로 시작하기 때문에 개인 액세스 토큰입니다.
형식에 따라 많은 비밀을 식별 할 수 있지만 저장소에서 작업하는 동안 실수로 비밀을 커밋 할 수 있습니다. 우리는 실수로 비밀을 커밋 한 것으로 시뮬레이션 해 봅시다.
-
테스트 저장소에서 새 브랜치를 체크 아웃 하세요.
git checkout -b secret-tutorial
-
다음 내용으로 새 텍스트 파일을 만들고, 개인 액세스 토큰의 정확한 형식과 일치하도록
-
앞뒤의 공백을 제거하세요.가짜 비밀: glpat - 12345678901234567890 메시지: hello, world!
-
파일을 브랜치에 커밋하세요.
git add . git commit -m "가짜 비밀 추가"
우리는 문제가 있는 상황을 만들었습니다: 변경 사항을 푸시하면 텍스트 파일에 커밋한 개인 액세스 토큰이 노출됩니다! 진행하기 전에 커밋 기록에서 비밀을 제거해야 합니다.
기록에서 비밀 제거
Git 기록에서 비밀이 포함 된 유일한 커밋이 최근 커밋 인 경우, 기록을 수정하여 비밀을 제거 할 수 있습니다.
-
텍스트 파일을 열고 가짜 비밀을 제거하세요.
가짜 비밀: 메시지: hello, world!
-
변경된 내용으로 이전 커밋을 덮어쓰세요.
git add . git commit --amend
비밀은 파일과 커밋 기록에서 제거되어 안전하게 변경 사항을 푸시 할 수 있습니다.
여러 커밋 수정
가끔은 여러 추가 커밋을 만든 후에 비밀이 추가되었음을 알게 될 때가 있습니다. 이런 경우, 가장 최근의 커밋에서 비밀을 제거하는 것만으로 충분하지 않습니다. 비밀이 추가된 후의 모든 커밋을 변경해야 합니다.
- 가짜 비밀을 파일에 추가하고 브랜치에 커밋하세요.
-
최소한 한 번의 추가 커밋을 만드세요. 기록을 검사하면 다음과 유사한 내용이 표시됩니다.
$ git log 커밋 456def 다른 것들을 수행 커밋 123abc 가짜 비밀 추가 ...
456def
커밋에서 비밀을 제거 해도 여전히 기록에 존재하며 현재 변경 사항을 푸시하면 노출될 것입니다. -
기록을 수정하려면 비밀을 도입한 커밋부터 대화식 리베이스를 시작하세요.
git rebase -i 123abc~1
-
수정 창에서 비밀을 포함하는 모든 커밋에 대해
pick
을edit
로 변경하세요.edit 456def 다른 것들을 수행 edit 123abc 가짜 비밀 추가
- 텍스트 파일을 열고 가짜 비밀을 제거하세요.
-
변경 사항을 커밋하세요.
git add . git commit --amend
-
(옵션) 비밀을 삭제하면 커밋에 유일한 차이가 사라질 수 있습니다. 이런 경우 Git은 다음과 같은 메시지를 표시합니다.
변경 사항 없음 최신 커밋을 수정하도록 요청했지만 그렇게 하면 비어있는 커밋이됩니다.
빈 커밋을 제거하세요.
git reset HEAD^
-
리베이스를 계속하세요.
git rebase --continue
-
다음 커밋에서 비밀을 제거하고 리베이스를 계속하세요. 리베이스가 완료 될 때 까지이 프로세스를 반복하세요.
성공적으로 리베이스가 완료되어 refs/heads/secret-tutorial이(가) 업데이트되었습니다.
비밀이 제거되었으며 변경 사항을 안전하게 원격 저장소에 푸시 할 수 있습니다.
비밀을 푸시 한 경우 해야 할 일
가끔은 비밀을 포함 한 상태로 변경 사항을 푸시하기도 합니다. 프로젝트에서 비밀 푸시 보호가 활성화 된 경우, 푸시가 자동으로 차단되고 문제가있는 커밋이 표시됩니다.
그러나 비밀이 원격 저장소에 성공적으로 푸시되면 더는 안전하지 않으며 즉시 취소해야 합니다. 비밀에 액세스 할 수있는 사람이 많지 않다고 생각하더라도 교체해야 합니다. 노출된 비밀은 심각한 보안 위험이 됩니다.
다음 단계
애플리케이션 보안을 개선하려면 프로젝트의 비밀 탐지 방법 중 하나를 활성화하는 것을 고려해 보세요.