명령줄에서 푸시 보호 정보
푸시 보호는 지원되는 비밀을 포함하는 푸시를 차단하여 실수로 리포지토리에 비밀을 커밋하는 것을 방지합니다.
명령줄에서 지원되는 비밀을 푸시 보호로 보안된 리포지토리로 푸시하려고 하면 GitHub이(가) 푸시를 차단합니다.
다음 중 하나를 수행해야 합니다.
- 분기에서 비밀을 제거합니다. 자세한 내용은 "차단된 푸시 해결"을 참조하세요.
- 제공되는 URL을 따라 확인합니다. 자세한 내용은 "푸시 보호 바이패스"을(를) 참조하세요.
검색된 비밀은 명령줄에 한 번에 최대 5개까지 표시됩니다. 리포지토리에서 특정 비밀이 이미 검색되고 경고가 이미 있는 경우 GitHub은(는) 해당 비밀을 차단하지 않습니다.
비밀이 진짜임을 확인하고 나중에 수정하려는 경우 가능한 한 빨리 비밀을 수정하는 것을 목표로 해야 합니다. 예를 들어 비밀을 해지하고 리포지토리의 커밋 기록에서 비밀을 제거할 수 있습니다. 무단 액세스를 방지하려면 노출된 실제 비밀을 해지해야 합니다. 비밀을 해지하기 전에 먼저 비밀을 교체하는 것을 고려할 수 있습니다. 자세한 내용은 "Removing sensitive data from a repository(리포지토리에서 중요한 데이터 제거)"을(를) 참조하세요.
참고:
- Git 구성이 현재 분기뿐만 아니라 여러 분기에 대한 푸시를 지원하는 경우 푸시되는 추가 및 의도하지 않은 참조로 인해 푸시가 차단될 수 있습니다. 자세한 내용은 Git 문서의
push.default
옵션을 참조하세요. - 푸시 시 secret scanning이(가) 시간 초과되면 GitHub은(는) 푸시 후에도 커밋에서 비밀을 검사합니다.
차단된 푸시 해결
차단된 푸시를 해결하려면 표시되는 모든 커밋에서 비밀을 제거해야 합니다.
- 비밀이 최신 커밋에 의해 도입된 경우 "분기의 최신 커밋에 의해 도입된 비밀 제거"를 참조하세요.
- 비밀이 이전 커밋에 표시되는 경우 "분기의 이전 커밋에 의해 도입된 비밀 제거"를 참조하세요.
Note
GitHub UI에서 차단된 커밋을 확인하는 방법을 알아보려면 "GitHub UI에서 푸시 보호 작업" 항목을 참조하세요.
분기의 최신 커밋에 의해 도입된 비밀 제거
차단된 비밀이 분기의 최신 커밋에 의해 도입된 경우 아래 지침을 따를 수 있습니다.
- 코드에서 비밀을 제거합니다.
- 변경 사항을 커밋하려면
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
를 사용하여 변경 사항을 푸시합니다.
푸시 보호 바이패스
GitHub에서 푸시해도 안전하다고 생각되는 비밀을 차단하면 에서 푸시할 비밀을 허용하는 이유를 지정하여 블록을 바이패스할 수 있습니다.
비밀을 푸시하도록 허용하면 보안 탭에 경고가 생성됩니다. GitHub은(는) 경고를 닫고 비밀이 가양성이거나 테스트에서만 사용되도록 지정하는 경우 알림을 보내지 않습니다. 비밀이 실제이고 나중에 수정하도록 지정하면 GitHub는 보안 경고를 열어 두고 커밋 작성자와 리포지토리 관리자에게 알림을 보냅니다. 자세한 내용은 "비밀 검사에서 경고 관리"을(를) 참조하세요.
기여자가 비밀에 대한 푸시 보호 블록을 바이패스하면 GitHub는 메일 알림을 옵트인한 조직 소유자, 보안 관리자 및 리포지토리 관리자에게 메일 경고를 보냅니다.
블록을 바이패스하는 옵션이 표시되지 않으면 리포지토리 관리자 또는 조직 소유자가 푸시 보호에 대한 보다 엄격한 제어를 구성합니다. 대신 커밋에서 비밀을 제거하거나 차단된 비밀을 푸시하기 위해 "권한 바이패스" 요청을 제출해야 합니다. 자세한 내용은 GitHub Enterprise Cloud 설명서의 “바이패스 권한 요청”을 참조하세요.
-
푸시가 차단되었을 때 GitHub에서 반환된 URL을 방문합니다.
-
비밀을 푸시할 수 있어야 하는 이유를 가장 잘 설명하는 옵션을 선택합니다.
- 비밀이 테스트에만 사용되고 위협이 되지 않는 경우 테스트에 사용됨을 클릭합니다.
- 검색된 문자열이 비밀이 아니면 가양성임을 클릭합니다.
- 비밀이 진짜이지만 나중에 수정하려는 경우 나중에 수정을 클릭합니다.
-
이 비밀을 푸시하도록 허용을 클릭합니다.
-
3시간 이내에 명령줄에서 푸시를 다시 시도합니다. 3시간 이내에 푸시하지 않은 경우 이 프로세스를 반복해야 합니다.