プッシュ保護とは
プッシュ保護は、[secret scanning] 機能であり、シークレットやトークンなどの機密情報がリポジトリにプッシュされないように設計されています。 コミット後にシークレットを検出する secret scanning とは異なり、プッシュ保護は、プッシュ プロセス中にコードでシークレットを事前にスキャンし、検出された場合はプッシュをブロックします。
プッシュ保護のしくみ
プッシュ保護は、次のもので検出されたシークレットをブロックします。
- コマンド ラインからのプッシュ
- GitHub UI で行われたコミット
- GitHub のリポジトリにファイルをアップロードする
- REST API への要求
- GitHub MCP サーバーとの対話 (パブリック リポジトリのみ)
プッシュ保護は、プッシュ試行中に潜在的なシークレットを検出すると、プッシュをブロックし、ブロックの理由を説明する詳細なメッセージを提供します。 問題のコードを確認し、機密情報を削除して、プッシュを再試行する必要があります。
プッシュ保護の種類
プッシュ保護には次の 2 種類があります。
-
[リポジトリのプッシュ保護](#push-protection-for-repositories) -
[ユーザーのプッシュ保護](#push-protection-for-users)
リポジトリのプッシュ保護
リポジトリのプッシュ保護は、リポジトリ、組織、またはエンタープライズ レベルで有効にすることができます。 この形式のプッシュプロテクション:
- GitHub Secret Protection を有効化する必要があります
- 既定では無効になっており、リポジトリ管理者、組織の所有者、セキュリティ マネージャー、またはエンタープライズ所有者が有効にすることができます。
- シークレットを含むプッシュが特定の保護されたリポジトリに到達するのをブロックします
- リポジトリ、組織、エンタープライズの [セキュリティ ] タブで、プッシュ保護バイパスのアラートを生成します
ヒント
プッシュ保護の有効化状態に関係なく、GitHub Team と GitHub Enterprise の組織は、無料のレポートを実行して、コードで漏洩したシークレットをスキャンできます。 このレポートには、プッシュ保護によって防止されたシークレット リークの数も表示されます。 「GitHub でのシークレット セキュリティについて」を参照してください。
ユーザーのプッシュ保護
ユーザー向けプッシュ保護は、GitHub.com のみで利用でき、GitHub アカウントに固有です。 この形式のプッシュプロテクション:
- 既定で有効になっています
- GitHub のパブリック リポジトリにシークレットをプッシュできないようにします。
- プッシュ保護がリポジトリ レベルでも有効になっていない限り、プッシュ保護をバイパスするときにアラートを生成しません
プッシュプロテクションのバイパスとアラート
リポジトリのプッシュ保護の場合、既定では、リポジトリへの書き込みアクセス権を持つすべてのユーザーは、バイパス理由を指定することでプッシュ保護をバイパスできます。 共同作成者がプッシュ保護ブロックをバイパスすると、GitHub:
- リポジトリ、組織、エンタープライズの [ セキュリティ ] タブにアラートを作成します
- 監査ログにバイパス イベントを追加します。
- シークレットへのリンクと許可された理由を含む、リポジトリを監視している個人アカウント、組織、エンタープライズ所有者、セキュリティ マネージャー、リポジトリ管理者に電子メール アラートを送信します
次の表は、ユーザーが指定できるバイパス理由ごとのアラートの動作を示しています。
| バイパスの理由 | アラート動作 |
|---|---|
| It's used in tests (テストで使用) |
GitHub は、"テストで使用される" として解決された閉じたアラートを作成します。 |
| これは偽陽性です | GitHubは、"誤検知"として解決済みの閉じたアラートを作成します。 | | I'll fix it later (後で修正) | GitHub 開いているアラートを作成する |
どの共同作成者がプッシュ保護をバイパスできるか、シークレットを含むプッシュを許可する必要があるかどうかをより詳細に制御する場合は、バイパス要求を監視および管理するように指定されたレビュー担当者グループを構成できます。
プッシュ保護の利点
-
**予防セキュリティ**: プッシュ保護は、プッシュ時にコードでシークレットがあるかスキャンすることで、最前線の防御メカニズムとして機能します。 この予防的アプローチは、リポジトリにマージされる前に潜在的な問題をキャッチするのに役立ちます。 -
**即時のフィードバック**: プッシュ試行中に潜在的なシークレットが検出された場合、開発者には即座にフィードバックが届きます。 この即時通知により、迅速な修復が可能になり、機密情報が公開される可能性を低減します。 -
**データ リークのリスクを軽減**: 機密情報を含むコミットをブロックすることで、プッシュ保護によって、偶発的にデータが漏洩するリスクが大幅に軽減されます。 これにより、インフラストラクチャ、サービス、およびデータへの不正アクセスを防ぐことができます。 -
**効率的なシークレット管理**: 公開されたシークレットをさかのぼって処理する代わりに、開発者はソースで問題に対処できます。 これにより、シークレット管理の効率が向上し、消費時間も短縮されます。 -
**柔軟性のためのバイパス機能:** 誤検知が発生した場合、または特定のパターンが必要な場合は、ユーザーのプッシュ保護をバイパスできます。指定されたユーザーは委任バイパス機能を使用して、リポジトリのプッシュ保護をバイパスできます。 これにより、全体的なセキュリティを損なうことなく、柔軟性を実現できます。 -
**カスタム パターンを検出する機能 (組織のリポジトリの場合):** 組織は、環境に固有のシークレットを検出するためのカスタム パターンを定義できます。 このカスタマイズにより、プッシュ保護によって、標準以外のシークレットも効果的に識別およびブロックできるようになります。
カスタマイズ
リポジトリのプッシュ保護を有効にしたら、次の方法でカスタマイズできます。
- 一意のシークレット パターンを含むプッシュをブロックするカスタム パターンの定義
- プッシュ保護をバイパスして他の共同作成者のバイパス要求を承認できる共同作成者の指定
- エンタープライズ レベルまたは組織レベルでのプッシュ保護に含めるシークレット パターンの構成
次のステップ
プッシュ保護を有効にするには: * リポジトリについては、 リポジトリのプッシュ保護の有効化 を参照してください。
-
**組織やエンタープライズの場合**、security configuration を適用する必要があります。 「[AUTOTITLE](/code-security/how-tos/secure-at-scale/configure-organization-security/establish-complete-coverage/creating-a-custom-security-configuration)」と「[AUTOTITLE](/code-security/how-tos/secure-at-scale/configure-enterprise-security/establish-complete-coverage/creating-a-custom-security-configuration-for-your-enterprise)」を参照してください。
プッシュ保護でサポートされるシークレットとサービス プロバイダーの一覧については、 サポートされているシークレット スキャン パターン を参照してください。