Skip to main content

概要

機能

ブロッキングルールは、どの検出結果でプルリクエストのチェックやCIパイプラインを失敗させるかを定義するガードレールです。コードベースが組織のセキュリティ基準と品質基準に沿うようにします。 ブロッキングルールは3種類作成できます:
  • Code Vulnerability Rules: セキュリティ脆弱性、コード品質の検出結果、またはその両方に基づいてPRをブロックする
  • Dependency Vulnerability Rules: SCAスキャンで検出された脆弱な依存関係に基づいてPRをブロックする
  • License Compliance Rules: 特定のSPDXライセンスまたはライセンスファミリを持つ依存関係をブロックする

誰のためか

ブロッキングルールは主に以下のために設計されています:
  • 開発チーム
  • プロジェクトマネージャー
  • セキュリティ専門家
この機能は、厳格なコンプライアンス要件を持つ組織や、コードの品質とセキュリティが最重要となるミッションクリティカルなアプリケーションに取り組む場合に特に有用です。

主な特徴と利点

Common Weakness Enumerations(CWE)に基づくルールを定義し、特定の脆弱性やコード品質の問題を導入するプルリクエストをブロックします。
問題の種類ごとに緊急度(Critical、High、Medium、Low など)を割り当て、優先度を付けて対応できます。
Dependency Vulnerabilityルールでは、両端を含むCVSSスコア範囲を指定し、該当する脆弱な依存関係をブロックします。
特定のSPDXライセンスID、またはCopyleft、Permissive、Commercialのライセンスファミリで依存関係をブロックします。
特定のプロジェクト、プロジェクトタグ、または組織全体にブロッキングルールを適用し、どのプロジェクトにどのルールを適用するかを細かく管理できます。
使いやすいインターフェースでブロッキングルールを作成、編集、削除でき、変化する要件に合わせてルールを最新の状態に保てます。
ブロッキングルールのステータスを切り替え、設定を失わずに一時的に有効化または無効化できます。

ルールの種類

ブロッキングルールには、幅広いセキュリティ要件に対応する3つのタイプがあります。

Code Vulnerability

セキュリティ脆弱性コード品質の検出結果、またはその両方に基づいてプルリクエストをブロックします。設定方法:
  • 問題タイプの選択: All、Vulnerabilities、またはCode Quality
  • 特定のCWE(Common Weakness Enumeration)カテゴリの選択
  • 緊急度/重大度レベルの設定
SQLインジェクション、XSS、安全でない暗号化など、コードレベルの脆弱性があるプルリクエストをブロックできます。

Dependency Vulnerability

ソフトウェア構成解析(SCA)で検出された脆弱な依存関係に基づいてプルリクエストをブロックします。設定方法:
  • 緊急度/重大度レベルの設定(Critical、High、Medium、Low)
  • または、0.0から10.0までのCVSSスコア範囲を両端を含めて設定
既知のセキュリティ脆弱性があるパッケージの導入を防ぎ、サプライチェーンを保護できます。

License Compliance

依存関係が拒否対象のライセンスを使用している場合に、プルリクエストまたはCIパイプラインをブロックします。設定方法:
  • 1つ以上のライセンスファミリを選択: Copyleft、Permissive、またはCommercial
  • 特定のSPDXライセンスIDを入力(例: AGPL-3.0
組織のオープンソースおよび商用ライセンスポリシーを適用するために使用します。

GitHubとの仕組み

前提条件 適切なリポジトリ権限で Corgea GitHub アプリ をインストールし設定している必要があります。
1

プルリクエスト提出

開発者がコード変更を含むプルリクエストを送信します
2

自動解析

システムはコード変更を有効なブロッキングルールと照らして分析します
3

ルール検証

違反が見つかった場合、プルリクエストは自動的にブロックされます
4

開発者通知

開発者がルール違反に関する詳細な通知を受け取ります
5

解決

開発者は違反を修正してFixedとしてマークするか、False PositiveまたはAccepted Riskとしてマークしなければマージできません

Azure DevOpsでの仕組み

前提条件:CorgeaとのAzure DevOps連携が設定され、必要な権限が付与されていることを確認します。
1

プルリクエスト提出

開発者がAzure DevOpsでコード変更を含むプルリクエストを送信します。
2

自動解析

システムはコード変更をCorgeaで設定された有効なブロッキングルールと比較して評価します。
3

ルール検証

違反が見つかると、プルリクエストは自動的にブロックされます。
開発者はPRが解決されるまでマージできません。
4

開発者通知

開発者はCorgea Scanページで失敗した問題の詳細情報を見るリンクを受け取ります。
5

解決

開発者は違反を修正するか、False PositiveまたはAccepted Riskとしてマークしなければマージできません。

使用ガイド

新しいブロッキングルールの作成

1

作成を開始する

「Add Blocking Rule」ボタンをクリックします
2

ルールタイプを選択

ブロッキングルールの種類を選択します。
  • Code Vulnerability: コードのセキュリティ問題に基づくプルリクエストをブロック(SASTの検出結果)
  • Dependency Vulnerability: 脆弱な依存関係に基づくプルリクエストをブロック(SCAの検出結果)
  • License Compliance: 拒否対象のSPDXライセンスまたはライセンスファミリに基づいて依存関係をブロック
Add Blocking Rule modal with Applies To, rule types, and Issue Type
3

基本情報

ルール名と説明を入力し、Applies Toを選択します。
  • Pull Requestsは、プルリクエストのチェックでルールを自動的に適用します。
  • CIは、パイプラインがcorgea scan --block-on <slug>でルールを指定した場合にのみ適用します。CIルールはプルリクエストをブロックしません。
新しいルールのデフォルトはPull Requestsです。Corgeaはルール名からslugを生成し、ルール一覧に表示します。
Add Blocking Rule modal with CI selected and License Compliance configured
4

設定を構成する

Code Vulnerabilityルールでは、Issue Typeとして、AllVulnerabilitiesのみ、またはCode Qualityの検出結果のみを選択します。デフォルトのAllでは、既存ルールの動作が維持されます。次に、緊急度(Critical、High、Medium、Low)または対象のCWEを選択します。ルールを有効にするには、少なくともどちらか一方を指定する必要があります。Dependency Vulnerabilityルールでは、重大度またはCVSSスコアのどちらで絞り込むかを選択します。緊急度(Critical、High、Medium、Low)を選択するか、0.0から10.0までのCVSSスコアの最小値と最大値を入力し、その範囲内の脆弱な依存関係をブロックします。License Complianceルールでは、拒否対象のライセンスファミリ(Copyleft、Permissive、またはCommercial)を少なくとも1つ選択するか、1つ以上のSPDXライセンスIDを入力します。報告されたライセンスのいずれかが選択したファミリまたは特定のIDに一致する場合、その依存関係はブロックされます。
5

スコープを設定

対象のプロジェクトやプロジェクトタグを必要に応じて選択します。プロジェクトが直接選択されている場合、または選択したタグのいずれかがプロジェクトに付いている場合にルールが適用されます。プロジェクトもタグも選択していない場合、ルールはすべてのプロジェクトに適用されます。
6

保存

内容を確認し、Createをクリックします。

既存のルールの管理

名前や設定でルールを検索したり、プロジェクトタグまたはApplies Toの対象で一覧を絞り込んだりできます。ルール表のID列には各ルールのslugが表示され、プロジェクトスコープ、ルールタイプ、およびPull RequestsまたはCIの対象はTriggers Onにチップで表示されます。slugを選択すると、CIコマンドで使うためにコピーできます。プロジェクトやタグのスコープがないルールはすべてのプロジェクトに適用され、長いスコープ一覧は**+N more**のツールチップにまとめられます。
Blocking rules list showing slug, Triggers On chips, and CI badge

CIでのルール適用

Applies ToCIに設定した有効なルールを作成し、そのslugをscanコマンドに渡します。ルール名は、例えばno-criticalsではなくcriticalsのように、トリガーされる条件に合わせて付けてください。こうすると--block-onが直接的な表明として読めます。--block-onにはCorgea CLI 1.10.0以降が必要です。
複数のCIルールを適用するには、slugをカンマ区切りのリストで指定します。いずれかの指定ルールに違反する検出結果があると、コマンドは失敗します。未知のslug、無効なルール、またはプルリクエスト向けのルールはスキップされず、設定エラーとして扱われます。--block-onはBLASTスキャナーのみでサポートされ、--failまたは--fail-onと併用できません。
  1. 表でルールを見つける
  2. Editボタンをクリック
  3. 必要に応じて設定を変更する
  4. Updateをクリックして保存

スキャンでのルール確認

スキャンに適用されるブロッキングルールは、以下の2か所で確認できます。
  1. スキャン詳細ページには「Blocking Rules」セクションがあり、評価されたすべてのルールが表示されます。
  1. 個別の問題では、問題の詳細でどのブロッキングルールが適用されたかを確認できます。
これにより、どのルールがスキャンや特定の問題に影響しているかを把握でき、特定の変更がブロックされる理由を特定しやすくなります。

ルールタイプ: Code VulnerabilityCWE-326(Inadequate Encryption Strength)とCWE-327(Use of a Broken or Risky Cryptographic Algorithm)を対象に、緊急度をCriticalとするルールを作成し、弱い暗号化方式の使用を防ぎます。
ルールタイプ: Code Vulnerability問題タイプとしてCode Qualityを選択し、CWE-398(Indicator of Poor Code Quality)とCWE-477(Use of Obsolete Functions)を対象に、緊急度をMediumとするルールを設定します。
ルールタイプ: Dependency Vulnerability緊急度としてCriticalHighを選択し、重大度がCriticalまたはHighの脆弱性を含む依存関係を導入するプルリクエストを自動的にブロックします。これにより、既知の脆弱なパッケージがコードベースに入ることを防ぎ、サプライチェーンを保護します。
ルールタイプ: Dependency VulnerabilityCVSSスコア(7.0から10.0など)でフィルタリングするルールを作成し、そのスコア範囲内で脆弱な依存関係をもたらすプルリクエストをブロックします。
ルールタイプ: License ComplianceCopyleftファミリを選択し、報告されたライセンスがそのファミリに属する依存関係をブロックします。ポリシーでより狭い拒否リストが必要な場合は、特定のSPDX IDを追加します。

ベストプラクティス

実装のヒント

  • 基本的なルールから始めて徐々に拡大する
  • Dependency Vulnerabilityルールでは、まずCriticalのみ、または限定したCVSS範囲から開始し、チームの運用が安定するにつれて対象を広げる
  • Code Vulnerabilityルールでは、まず影響の大きいCWE(例: インジェクションの欠陥、認証の問題)に注目する
  • 定期的なレビューと更新
  • 明確なドキュメント作成とチームへの周知
  • フィードバックと協力の促進
  • 緊急度レベルの戦略的な活用
  • 同じルールを関連プロジェクト群に適用する場合はプロジェクトタグを検討する

トラブルシューティング

プルリクエストが予期せずブロックされた場合は、まず有効なルールとその設定を確認してください。
  • 予期しないブロック動作
  • ルールの対象設定の問題
  • プロジェクトスコープの問題
  • ルール設定を確認する
  • CWEの対象設定を確認する
  • プロジェクト設定を確認する
  • 必要に応じてサポートに連絡する