Skip to main content

푸시 보호로 차단된 분기 푸시

푸시 보호는 리포지토리에서 비밀이 유출되지 않도록 선제적으로 보호합니다. 차단된 푸시를 해결할 수 있으며, 검색된 비밀이 제거되면 명령줄 또는 웹 UI에서 작업 분기에 변경 내용을 푸시할 수 있습니다.

누가 이 기능을 사용할 수 있는 있나요?

사용자에 대한 푸시 보호는 기본적으로 ON으로 설정되며, 개인 계정 설정에서 사용 중지할 수 있습니다.

사용자 소유 퍼블릭 리포지토리에 대하여 리포지토리 및 조직에 대한 푸시 보호가 무료로 제공됩니다. GitHub Enterprise Cloud을(를) 사용하며 GitHub Advanced Security 라이선스가 있는 조직은 자사 프라이빗 및 내부 리포지토리에서도 푸시 보호를 사용 설정할 수 있습니다.

자세한 내용은 "사용자에 대한 푸시 보호" 및 "리포지토리 및 조직에 대한 푸시 보호"을(를) 참조하세요.

푸시 보호 정보

푸시 보호를 사용하면 리포지토리에 변경 사항을 푸시하기 전에 비밀을 스캔하여 보안 유출을 예방하는 데 도움이 됩니다.

푸시 보호로 안전하게 보호되는 리포지토리에 비밀을 푸시하려 하면 GitHub이(가) 해당 푸시를 차단합니다. 분기에서 비밀을 제거한 다음에 다시 푸시해야 합니다. 차단된 푸시를 해결하는 방법에 대한 자세한 내용은 이 문서의 "명령줄에서 차단된 푸시 해결"과 "웹 UI에서 차단된 커밋 해결"을 참조하십시오.

비밀을 허용해도 안전하다고 판단되면 보호를 바이패스하는 옵션을 선택하면 됩니다. 자세한 내용은 "차단된 비밀의 푸시 허용"과 "비밀의 푸시 보호 바이패스"를 참조하십시오.

푸시 보호에 지원되는 비밀 및 서비스 공급자에 대한 자세한 내용은 "비밀 검사 패턴"을 참조하세요.

명령줄에서 차단된 푸시 해결

푸시 보호로 보호되는 리포지토리에 지원되는 비밀을 푸시하려 하면 GitHub이(가) 푸시를 차단합니다. 분기에서 비밀을 제거하거나 제공된 URL을 따라 푸시를 허용할 수 있습니다.

참고:

  • Git 구성이 현재 분기뿐만 아니라 여러 분기에 대한 푸시를 지원하는 경우 푸시되는 추가 및 의도하지 않은 참조로 인해 푸시가 차단될 수 있습니다. 자세한 내용은 Git 문서의 push.default 옵션을 참조하세요.
  • 푸시 시 secret scanning이(가) 시간 초과되면 GitHub은(는) 푸시 후에도 커밋에서 비밀을 검사합니다.

분기의 최신 커밋에 의해 도입된 비밀 제거

차단된 비밀이 분기의 최신 커밋에 의해 도입된 경우 아래 지침을 따를 수 있습니다.

  1. 코드에서 비밀을 제거합니다.
  2. 변경 사항을 커밋하려면 git commit --amend을(를) 실행합니다. 이렇게 하면 새 커밋을 만들지 않고, 비밀을 도입한 원래 커밋을 업데이트합니다.
  3. git push를 사용하여 변경 사항을 푸시합니다.

분기의 이전 커밋이 도입한 비밀 제거

비밀이 Git 기록의 이전 커밋에 표시되는 경우에도 비밀을 제거할 수 있습니다. 이렇게 하려면 어느 커밋이 처음에 비밀을 도입했는지 파악하여 대화형 다시 지정을 통해 커밋 기록을 수정해야 합니다.

  1. 분기를 푸시하려 할 때 표시된 오류 메시지를 잘 살펴봅니다. 여기에 비밀을 포함한 모든 커밋이 목록으로 기재됩니다.

    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
    
  2. 그런 다음, 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
    
    
  3. 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.
  4. 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.
  5. In the editor, choose to edit the commit identified in step 3 by changing pick to edit 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
    
  6. 편집기를 저장하고 종료하면 대화형 다시 지정이 시작됩니다.

  7. 코드에서 비밀을 제거합니다.

  8. git commit --amend을(를) 사용해 변경 사항을 커밋합니다.

  9. git rebase --continue를 실행하여 다시 지정을 완료합니다.

  10. git push를 사용하여 변경 사항을 푸시합니다.

웹 UI에서 차단된 커밋 해결

웹 UI를 사용하여 푸시 보호로 안전하게 보호되는 리포지토리에 지원되는 비밀을 커밋하려 하면 GitHub이(가) 해당 커밋을 차단합니다.

비밀의 위치에 대한 정보와 비밀을 푸시할 수 있는 옵션이 포함된 대화 상자가 표시됩니다. 또한 비밀은 파일에서 밑줄로 표시되므로 쉽게 찾을 수 있습니다.

웹 UI에서 차단된 커밋을 해결하려면 파일에서 비밀을 제거해야 합니다. 비밀을 제거하면 변경 내용을 커밋할 수 있습니다.

또는 비밀을 허용해도 안전하다고 판단되는 경우 대화 상자에 표시된 옵션을 사용해 푸시 보호를 바이패스하면 됩니다. 웹 UI에서 푸시 보호를 우회하는 방법에 대한 자세한 내용은 "리포지토리 및 조직에 대한 푸시 보호"을 참조하세요.

추가 참고 자료