Skip to main content

명령줄에서 푸시 보호 작업

secret scanning에서 변경 내용의 비밀을 검색하는 경우 명령줄에서 GitHub을(를) 사용하여 푸시를 차단 해제하는 옵션을 알아봅니다.

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

리포지토리 소유자, 조직 소유자, 보안 관리자 및 관리자 역할이 있는 사용자

명령줄에서 푸시 보호 정보

푸시 보호는 지원되는 비밀을 포함하는 푸시를 차단하여 실수로 리포지토리에 비밀을 커밋하는 것을 방지합니다.

명령줄에서 지원되는 비밀을 푸시 보호로 보안된 리포지토리로 푸시하려고 하면 GitHub이(가) 푸시를 차단합니다.

다음 중 하나를 수행해야 합니다.

검색된 비밀은 명령줄에 한 번에 최대 5개까지 표시됩니다. 리포지토리에서 특정 비밀이 이미 검색되고 경고가 이미 있는 경우 GitHub은(는) 해당 비밀을 차단하지 않습니다.

비밀이 진짜임을 확인하고 나중에 수정하려는 경우 가능한 한 빨리 비밀을 수정하는 것을 목표로 해야 합니다. 예를 들어 비밀을 해지하고 리포지토리의 커밋 기록에서 비밀을 제거할 수 있습니다. 무단 액세스를 방지하려면 노출된 실제 비밀을 해지해야 합니다. 비밀을 해지하기 전에 먼저 비밀을 교체하는 것을 고려할 수 있습니다. 자세한 내용은 "Removing sensitive data from a repository(리포지토리에서 중요한 데이터 제거)"을(를) 참조하세요.

참고:

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

차단된 푸시 해결

차단된 푸시를 해결하려면 표시되는 모든 커밋에서 비밀을 제거해야 합니다.

Note

GitHub UI에서 차단된 커밋을 확인하는 방법을 알아보려면 "GitHub UI에서 푸시 보호 작업" 항목을 참조하세요.

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

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

  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를 사용하여 변경 사항을 푸시합니다.

푸시 보호 바이패스

GitHub에서 푸시해도 안전하다고 생각되는 비밀을 차단하면 에서 푸시할 비밀을 허용하는 이유를 지정하여 블록을 바이패스할 수 있습니다.

비밀을 푸시하도록 허용하면 보안 탭에 경고가 생성됩니다. GitHub은(는) 경고를 닫고 비밀이 가양성이거나 테스트에서만 사용되도록 지정하는 경우 알림을 보내지 않습니다. 비밀이 실제이고 나중에 수정하도록 지정하면 GitHub는 보안 경고를 열어 두고 커밋 작성자와 리포지토리 관리자에게 알림을 보냅니다. 자세한 내용은 "비밀 검사에서 경고 관리"을(를) 참조하세요.

기여자가 비밀에 대한 푸시 보호 블록을 바이패스하면 GitHub는 메일 알림을 옵트인한 조직 소유자, 보안 관리자 및 리포지토리 관리자에게 메일 경고를 보냅니다.

블록을 바이패스하는 옵션이 표시되지 않으면 리포지토리 관리자 또는 조직 소유자가 푸시 보호에 대한 보다 엄격한 제어를 구성합니다. 대신 커밋에서 비밀을 제거하거나 차단된 비밀을 푸시하기 위해 "권한 바이패스" 요청을 제출해야 합니다. 자세한 내용은 GitHub Enterprise Cloud 설명서의 “바이패스 권한 요청”을 참조하세요.

  1. 푸시가 차단되었을 때 GitHub에서 반환된 URL을 방문합니다.

  2. 비밀을 푸시할 수 있어야 하는 이유를 가장 잘 설명하는 옵션을 선택합니다.

    • 비밀이 테스트에만 사용되고 위협이 되지 않는 경우 테스트에 사용됨을 클릭합니다.
    • 검색된 문자열이 비밀이 아니면 가양성임을 클릭합니다.
    • 비밀이 진짜이지만 나중에 수정하려는 경우 나중에 수정을 클릭합니다.

    참고: 리포지토리에서 비밀 스캔이 사용 설정된 경우, 푸시 보호를 바이패스하는 이유를 지정해야 합니다.

    비밀 스캔을 사용 설정하지 않은 퍼블릭 리포지토리에 대하여 푸시하는 경우에도, 사용자 계정에 기본적으로 ON으로 설정된 사용자에 대한 푸시 보호 덕분에 우발적으로 비밀을 푸시하지 않도록 보호됩니다.

    사용자에 대한 푸시 보호를 사용하면 GitHub가 퍼블릭 리포지토리에 대한 푸시에 지원되는 비밀이 포함된 경우 해당 푸시를 자동으로 차단하지만, 비밀을 허용하는 이유를 지정하지 않아도 되고, GitHub이(가) 경고를 생성하지도 않습니다. 자세한 내용은 "사용자에 대한 푸시 보호"을(를) 참조하세요.

  3. 이 비밀을 푸시하도록 허용을 클릭합니다.

  4. 3시간 이내에 명령줄에서 푸시를 다시 시도합니다. 3시간 이내에 푸시하지 않은 경우 이 프로세스를 반복해야 합니다.

바이패스 권한 요청

푸시 보호에 의해 푸시가 차단되었으며 비밀이 푸시해도 안전하다고 생각되는 경우 블록을 바이패스할 수 있는 권한을 요청할 수 있습니다. 요청이 지정된 검토자 그룹으로 전송되며, 검토자는 요청을 승인하거나 거부합니다.

요청은 7일 후에 만료됩니다.

  1. 푸시가 차단되었을 때 GitHub에서 반환된 URL을 방문합니다.
  2. "또는 권한 무시 요청"에 설명을 추가합니다. 예를 들어 비밀이 돌려주는 것이 안전하다고 생각하는 이유를 설명하거나 차단을 무시하기 위한 요청의 컨텍스트를 제공할 수 있습니다.
  3. 요청 제출을 클릭합니다.
  4. 메일 알림 요청에 대한 응답을 확인하세요.

요청이 검토되고 나면 결정 내용을 알리는 이메일을 받게 됩니다.

요청이 승인되면 비밀을 포함하는 하나 이상의 커밋을 리포지토리에 푸시할 수 있으며 동일한 비밀을 포함하는 이후 커밋도 푸시할 수 있습니다.

요청이 거부된 경우 다시 푸시하기 전에 비밀을 포함하는 모든 커밋에서 비밀을 제거해야 합니다. 차단된 비밀을 삭제하는 방법에 대한 자세한 내용은 "차단된 푸시 해결"을 참조하세요.

추가 참고 자료