푸시 보호 정보
푸시 보호를 사용하면 리포지토리에 변경 사항을 푸시하기 전에 비밀을 스캔하여 보안 유출을 예방하는 데 도움이 됩니다.
푸시 보호로 안전하게 보호되는 리포지토리에 비밀을 푸시하려 하면 GitHub이(가) 해당 푸시를 차단합니다. 분기에서 비밀을 제거한 다음에 다시 푸시해야 합니다. 차단된 푸시를 해결하는 방법에 대한 자세한 내용은 이 문서의 "명령줄에서 차단된 푸시 해결"과 "웹 UI에서 차단된 커밋 해결"을 참조하십시오.
비밀을 허용해도 안전하다고 판단되면 보호를 바이패스하는 옵션을 선택하면 됩니다. 자세한 내용은 "차단된 비밀의 푸시 허용"과 "비밀의 푸시 보호 바이패스"를 참조하십시오.
푸시 보호에 지원되는 비밀 및 서비스 공급자에 대한 자세한 내용은 "비밀 검사 패턴"을 참조하세요.
명령줄에서 차단된 푸시 해결
푸시 보호로 보호되는 리포지토리에 지원되는 비밀을 푸시하려 하면 GitHub이(가) 푸시를 차단합니다. 분기에서 비밀을 제거하거나 제공된 URL을 따라 푸시를 허용할 수 있습니다.
참고:
- Git 구성이 현재 분기뿐만 아니라 여러 분기에 대한 푸시를 지원하는 경우 푸시되는 추가 및 의도하지 않은 참조로 인해 푸시가 차단될 수 있습니다. 자세한 내용은 Git 문서의
push.default
옵션을 참조하세요. - 푸시 시 secret scanning이(가) 시간 초과되면 GitHub은(는) 푸시 후에도 커밋에서 비밀을 검사합니다.
분기의 최신 커밋에 의해 도입된 비밀 제거
차단된 비밀이 분기의 최신 커밋에 의해 도입된 경우 아래 지침을 따를 수 있습니다.
- 코드에서 비밀을 제거합니다.
- 변경 사항을 커밋하려면
git commit --amend
을(를) 실행합니다. 이렇게 하면 새 커밋을 만들지 않고, 비밀을 도입한 원래 커밋을 업데이트합니다. git push
를 사용하여 변경 사항을 푸시합니다.
분기의 이전 커밋이 도입한 비밀 제거
비밀이 Git 기록의 이전 커밋에 표시되는 경우에도 비밀을 제거할 수 있습니다. 이렇게 하려면 어느 커밋이 처음에 비밀을 도입했는지 파악하여 대화형 다시 지정을 통해 커밋 기록을 수정해야 합니다.
-
분기를 푸시하려 할 때 표시된 오류 메시지를 잘 살펴봅니다. 여기에 비밀을 포함한 모든 커밋이 목록으로 기재됩니다.
remote: —— GitHub Personal Access Token —————————————————————— remote: locations: remote: - commit: 8728dbe67 remote: path: README.md:4 remote: - commit: 03d69e5d3 remote: path: README.md:4 remote: - commit: 8053f7b27 remote: path: README.md:4
-
그런 다음,
git log
을(를) 실행하여 상응하는 타임스탬프와 함께 분기의 모든 커밋 전체 기록을 봅니다.test-repo (test-branch)]$ git log commit 8053f7b27 (HEAD -> main) Author: Octocat <1000+octocat@users.noreply.github.com Date: Tue Jan 30 13:03:37 2024 +0100 my fourth commit message commit 03d69e5d3 Author: Octocat <1000+octocat@users.noreply.github.com> Date: Tue Jan 30 13:02:59 2024 +0100 my third commit message commit 8728dbe67 Author: Octocat <1000+octocat@users.noreply.github.com Date: Tue Jan 30 13:01:36 2024 +0100 my second commit message commit 6057cbe51 Author: Octocat <1000+octocat@users.noreply.github.com Date: Tue Jan 30 12:58:24 2024 +0100 my first commit message
-
Focusing only on the commits that contain the secret, use the output of
git log
to identify which commit comes earliest in your Git history.- In the example, commit
8728dbe67
was the first commit to contain the secret.
- In the example, commit
-
Start an interactive rebase with
git rebase -i <COMMIT-ID>~1
.- For
<COMMIT-ID>
, use the commit identified in step 3. For example,git rebase -i 8728dbe67~1
.
- For
-
In the editor, choose to edit the commit identified in step 3 by changing
pick
toedit
on the first line of the text.edit 8728dbe67 my second commit message pick 03d69e5d3 my third commit message pick 8053f7b27 my fourth commit message
-
편집기를 저장하고 종료하면 대화형 다시 지정이 시작됩니다.
-
코드에서 비밀을 제거합니다.
-
git commit --amend
을(를) 사용해 변경 사항을 커밋합니다. -
git rebase --continue
를 실행하여 다시 지정을 완료합니다. -
git push
를 사용하여 변경 사항을 푸시합니다.
웹 UI에서 차단된 커밋 해결
웹 UI를 사용하여 푸시 보호로 안전하게 보호되는 리포지토리에 지원되는 비밀을 커밋하려 하면 GitHub이(가) 해당 커밋을 차단합니다.
비밀의 위치에 대한 정보와 비밀을 푸시할 수 있는 옵션이 포함된 대화 상자가 표시됩니다. 또한 비밀은 파일에서 밑줄로 표시되므로 쉽게 찾을 수 있습니다.
웹 UI에서 차단된 커밋을 해결하려면 파일에서 비밀을 제거해야 합니다. 비밀을 제거하면 변경 내용을 커밋할 수 있습니다.
또는 비밀을 허용해도 안전하다고 판단되는 경우 대화 상자에 표시된 옵션을 사용해 푸시 보호를 바이패스하면 됩니다. 웹 UI에서 푸시 보호를 우회하는 방법에 대한 자세한 내용은 "리포지토리 및 조직에 대한 푸시 보호"을 참조하세요.