Skip to main content

コマンド ラインからのプッシュ保護を操作する

secret scanning が変更でシークレットを検出した場合に、コマンド ラインから GitHub へのプッシュのブロックを解除するオプションについて説明します。

この機能を使用できるユーザーについて

書き込み アクセスを持つユーザー

ブロックされたプッシュを解決する

ブロックされたプッシュを解決するには、そのプッシュが表示されるすべてのコミットからシークレットを削除する必要があります。

ブランチで最新のコミットによって導入されたシークレットを削除する

  1. コードからシークレットを削除します。
  2. 変更をコミットするには、git commit --amend --all を実行します。 これにより、新しいコミットを作成する代わりに、シークレットを導入した元のコミットが更新されます。
  3.        `git push` を使用して変更をプッシュします。
    

ブランチで以前のコミットによって導入されたシークレットを削除する

  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 add .` を使用して変更をステージング領域に追加します。
    

    メモ

    完全なコマンドは、git add . です: * add. 間にはスペースがあります。

    • スペースの後のピリオドはコマンドの一部です。
  9.        `git commit --amend` を使用して、変更をコミットします。
    
  10.        `git rebase --continue` を実行して、リベースを完了します。
    
  11.        `git push` を使用して変更をプッシュします。
    

プッシュ保護をバイパスする

メモ

ブロックをバイパスするオプションが表示されない場合は、コミットからシークレットを削除するか、ブロックされたシークレットをプッシュするために "特権のバイパス" 要求を送信する必要があります。 バイパス特権の要求を参照してください。

  1. プッシュがブロックされたら、プッシュを実行したのと同じユーザーとして、GitHub から返される URL にアクセスします。 異なるユーザーがこの URL にアクセスしようとすると、404 エラーが表示されます。

  2. シークレットをプッシュできる理由を最もよく表しているオプションを選択します。

    • シークレットがテストでのみ使用され、脅威がない場合は、 [テストで使用されます] をクリックします。

    • 検出された文字列がシークレットでない場合は、 [誤検知です] をクリックします。

    • シークレットが本物で、後で修正する予定の場合は、 [後で修正します] をクリックします。

    メモ

    リポジトリでシークレット スキャンが有効になっている場合は、プッシュ保護をバイパスする理由を指定する必要があります。

    シークレット スキャンが有効になっていない_パブリック_ リポジトリにプッシュする場合でも、ユーザー アカウントに対して既定で有効になっている_ユーザーのプッシュ保護_により、シークレットが誤ってプッシュされることから保護されます。

    ユーザーのプッシュ保護により、サポートされているシークレットがプッシュに含まれている場合、GitHub はパブリック リポジトリへのプッシュを自動的にブロックしますが、シークレットを許可する理由を指定する必要はなく、GitHub は許可しません。アラートを生成します。 詳しくは、「ユーザーのプッシュ保護」をご覧ください。

  3.        **[このシークレットをプッシュできるようにする]** をクリックします。
    
  4. 3 時間以内にコマンド ラインでプッシュを再試行します。 3 時間以内にプッシュしていない場合は、このプロセスを繰り返す必要があります。

バイパス権限を要求する

  1. プッシュがブロックされたら、プッシュを実行したのと同じユーザーとして、GitHub から返される URL にアクセスします。 異なるユーザーがこの URL にアクセスしようとすると、404 エラーが表示されます。

  2. [バイパス特権を要求する] で、コメントを追加します。 たとえば、シークレットがプッシュしても安全だと考える理由や、ブロックをバイパスする要求に関するコンテキストを提供する理由を説明できます。

  3. [要求の送信] をクリックします

  4. メール通知で要求への応答を確認します。 要求が確認されると、決定を通知する電子メールが届きます。

    • 要求が 承認された場合は、シークレットを含むコミット (またはコミット) と、同じシークレットを含む将来のコミットをリポジトリにプッシュできます。
    • 要求が 拒否された場合は、再度プッシュする前に、すべてのコミットからシークレットを削除する必要があります。 ブロックされたシークレットを削除する方法については、「ブロックされたプッシュを解決する」を参照してください。

詳細については、次を参照してください。

  •         [AUTOTITLE](/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-in-the-github-ui)
    
  •         [AUTOTITLE](/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-rest-api)