正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

コンプライアンスフレームワーク

  • プラン: Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

プロジェクトに特定のコンプライアンスフレームワーク要件があるか、追加の監視が必要であることを識別するためのラベルであるコンプライアンスフレームワークを作成できます。

Ultimateプランでは、コンプライアンスフレームワークは、適用されるプロジェクトにコンプライアンスパイプライン設定セキュリティポリシーを任意で適用できます。

コンプライアンスフレームワークはトップレベルグループで作成されます。プロジェクトが既存のトップレベルグループの外部に移動された場合、そのフレームワークは削除されます。

各プロジェクトに最大20個のコンプライアンスフレームワークを適用できます。

クリックしてデモを見るには、カスタムコンプライアンスフレームワークを参照してください。

前提条件

  • コンプライアンスフレームワークを作成、編集、削除するには、ユーザーは次のいずれかの権限が必要です:
    • トップレベルグループに対するオーナーまたはセキュリティマネージャーのロール。
    • カスタムロールまたはadmin_compliance_frameworkカスタム権限が割り当てられていること。
  • プロジェクトにコンプライアンスフレームワークを追加または削除するには、プロジェクトが属するグループにコンプライアンスフレームワークが必要です。

テンプレートからコンプライアンスフレームワークを作成する

  • プラン: Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

この機能の利用可否は、機能フラグによって制御されます。詳細については、履歴を参照してください。

一からコンプライアンスフレームワークをビルドする代わりに、事前に定義されたすぐに使える(OOTB)テンプレートから作成できます。テンプレートには、一般的なコンプライアンス標準に準拠した事前設定済みの要件とコントロールが含まれているため、手動設定なしで迅速に開始できます。

次のテンプレートが利用可能です:

テンプレート説明
CIS CSC v8.1Center for Internet Security Controls v8.1フレームワーク。基礎的、基礎的、および組織的なセキュリティコントロールをカバーします。
CSA CCM v4Cloud Security Alliance Cloud Controls Matrix v4フレームワークは、クラウドセキュリティ保証のためのものです。
Cyber Essentials英国政府が支援するCyber Essentialsスキームで、5つの主要な技術的コントロールをカバーします。
DORA金融セクターのICTリスク管理のためのDigital Operational Resilience Actフレームワーク。
FedRAMP High米国連邦クラウドサービス向けのFedRAMP Highベースライン。
FedRAMP Low米国連邦クラウドサービス向けのFedRAMP Lowベースライン。
FedRAMP Moderate米国連邦クラウドサービス向けのFedRAMP Moderateベースライン。
IRAP OfficialAustralian Information Security Registered Assessors Program Official分類フレームワーク。
IRAP ProtectedAustralian Information Security Registered Assessors Program Protected分類フレームワーク。
IRAP SecretAustralian Information Security Registered Assessors Program Secret分類フレームワーク。
IRAP Top SecretAustralian Information Security Registered Assessors Program Top Secret分類フレームワーク。
ISMAP日本の情報システムセキュリティ管理評価プログラムフレームワーク。
ISO 27001:2022情報セキュリティ管理システムのための国際標準。
NIS 2EUネットワーク情報セキュリティ指令2フレームワークは、重要インフラストラクチャのためのものです。
NIST 800-171 Rev. 3 CMMCNIST SP 800-171リビジョン3サイバーセキュリティ成熟度モデル認証フレームワーク。
NIST SP 800-218NIST Secure Software Development Framework (SSDF) v1.1。
NIST 800-53 Revision 5NIST SP 800-53 Rev. 5情報システム向けセキュリティおよびプライバシーコントロール。
SOC 2システムおよび組織管理2フレームワークは、COSO原則にマッピングされた要件を持ち、脆弱性スキャン、アクセス制御、および変更管理をカバーします。
TISAX自動車産業の情報セキュリティ要件のためのTrusted Information Security Assessment Exchangeフレームワーク。

UIを使用してテンプレートからフレームワークを作成

テンプレートからコンプライアンスフレームワークを作成するには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  3. ページで、フレームワークタブを選択します。
  4. 新規フレームワークを選択します。
  5. テンプレートから作成を選択します。
  6. 利用可能なテンプレートを参照し、要件とコントロールをプレビューするために1つを選択します。
  7. (オプション)オプション。名前説明、またはを上書きして、フレームワークをカスタマイズします。
  8. (オプション)オプション。これをグループのデフォルトフレームワークにするには、デフォルトとして設定を選択します。
  9. フレームワークの作成を選択します。

フレームワークは、テンプレートから自動入力されたすべての要件とコントロールで作成されます。その後、必要に応じてフレームワークを編集し、要件を追加、削除、または変更できます。

APIベースの作成については、テンプレートからコンプライアンスフレームワークを作成するを参照してください。

コンプライアンスフレームワークをインポート

この機能により、共有またはバックアップされたコンプライアンスフレームワークを使用できます。JSONファイルは、既存のコンプライアンスフレームワークと同じ名前であってはなりません。

JSONテンプレートのライブラリは、コンプライアンス遵守テンプレートプロジェクトから入手できます。これらの事前定義されたテンプレートは、完全なフレームワークを提供します。手動設定は不要で、迅速に開始できます。

事前定義されたコンプライアンスフレームワークをインポート

事前にビルドされたコンプライアンスフレームワークをインポートするには:

  1. コンプライアンス遵守テンプレートプロジェクトに移動します。
  2. 利用可能なフレームワークテンプレートを参照し、ご使用のフレームワーク用のJSONファイルをダウンロードします。
  3. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  4. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  5. ページで、フレームワークタブを選択します。
  6. 新規フレームワークを選択します。
  7. フレームワークのインポートを選択します。
  8. 表示されるダイアログで、ローカルシステムからJSONファイルを選択します。
  9. インポートが成功すると、新しいコンプライアンスフレームワークがリストに表示されます。

フレームワークをプロジェクトに適用する準備ができました。プロジェクトにコンプライアンスフレームワークを適用するを参照してください。

JSONファイルからコンプライアンスフレームワークをインポート

JSONテンプレートを使用してコンプライアンスフレームワークをインポートするには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  3. ページで、フレームワークタブを選択します。
  4. 新規フレームワークを選択します。
  5. フレームワークのインポートを選択します。
  6. 表示されるダイアログで、ローカルシステムからJSONファイルを選択します。

インポートが成功すると、新しいコンプライアンスフレームワークがリストに表示されます。エラーがあれば修正のために表示されます。

コンプライアンスフレームワークを作成、編集、または削除

コンプライアンスフレームワークレポートまたはコンプライアンスプロジェクトレポートのいずれかを使用して、コンプライアンスフレームワークを作成、編集、または削除できます。

コンプライアンスフレームワークレポートの使用方法の詳細については、以下を参照してください:

コンプライアンスプロジェクトレポートの使用方法の詳細については、以下を参照してください:

プロジェクトにコンプライアンスフレームワークを適用

複数のコンプライアンスフレームワークをプロジェクトに適用できますが、個人のネームスペース内のプロジェクトにはコンプライアンスフレームワークを適用できません。

プロジェクトにコンプライアンスフレームワークを適用するには、コンプライアンスプロジェクトレポートを介してコンプライアンスフレームワークを適用します。

GraphQL APIを使用して、1つまたは複数のコンプライアンスフレームワークをプロジェクトに適用できます。

GraphQLでサブグループにコンプライアンスフレームワークを作成する場合、ユーザーが正しい権限を持っていると、フレームワークはルート祖先に作成されます。GitLab UIは、この動作を推奨しないために読み取り専用のビューを表示します。

コンプライアンスフレームワークを介してプロジェクトにコンプライアンスフレームワークを適用するには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  3. ページで、プロジェクトタブを選択します。
  4. コンプライアンスフレームワークにカーソルを合わせ、Edit Frameworkタブを選択します。
  5. プロジェクトセクションを選択します。
  6. リストからプロジェクトを選択します。
  7. Update Frameworkを選択します。

デフォルトのコンプライアンスフレームワーク

グループのオーナーは、デフォルトのコンプライアンスフレームワークを設定できます。デフォルトフレームワークは、そのグループで作成されたすべての新規およびインポートされたプロジェクトに適用されます。既存のプロジェクトに適用されているフレームワークには影響しません。デフォルトフレームワークは削除できません。

デフォルトに設定されているコンプライアンスフレームワークには、defaultラベルが付いています。

コンプライアンスセンターを使用してデフォルトを設定および削除

コンプライアンスプロジェクトレポートからデフォルトとして設定(またはデフォルトを削除)するには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  3. ページで、プロジェクトタブを選択します。
  4. コンプライアンスフレームワークにカーソルを合わせ、Edit Frameworkタブを選択します。
  5. デフォルトとして設定を選択します。
  6. 変更を保存を選択します。

コンプライアンスフレームワークレポートからデフォルトとして設定(またはデフォルトを削除)するには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  3. ページで、フレームワークタブを選択します。
  4. コンプライアンスフレームワークにカーソルを合わせ、Edit Frameworkタブを選択します。
  5. デフォルトとして設定を選択します。
  6. 変更を保存を選択します。

プロジェクトからコンプライアンスフレームワークを削除

グループ内の1つまたは複数のプロジェクトからコンプライアンスフレームワークを削除するには、コンプライアンスプロジェクトレポートを介してコンプライアンスフレームワークを削除します。

コンプライアンスフレームワークをJSONファイルとしてエクスポート

この機能により、コンプライアンスフレームワークを共有およびバックアップできます。

コンプライアンスセンターからコンプライアンスフレームワークをエクスポートするには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  3. ページで、フレームワークタブを選択します。
  4. エクスポートしたいコンプライアンスフレームワークを見つけます。
  5. 縦方向の省略記号 ( ellipsis_v ) を選択します。
  6. Export as JSON fileを選択します。

JSONファイルはローカルシステムにダウンロードされます。

JSONテンプレートの構造とスキーマ

コンプライアンスフレームワークのJSONテンプレートは、フレームワークのメタデータ、要件、および関連するコントロールを定義する特定のスキーマ構造に従います。この構造を理解することで、組織の特定のコンプライアンスニーズを満たすためのカスタムテンプレートを作成したり、既存のテンプレートを修正したりするのに役立ちます。

フレームワークプロパティ

各JSONテンプレートには、次のトップレベルプロパティが含まれています:

プロパティタイプ必須説明
name文字列はいコンプライアンスフレームワークの表示名。
description文字列はいフレームワークの目的の詳細な説明。
color文字列はいフレームワークの16進数色コード(例: #1f75cb)。
requirements配列いいえコンプライアンスコントロールを定義する要件オブジェクトの配列。

要件の構造

requirements配列内の各要件には、以下が含まれます:

プロパティタイプ必須説明
name文字列はいコンプライアンス要件の名前。
description文字列はい要件が強制する内容の詳細な説明。
controls配列はい要件を実装するコントロールオブジェクトの配列。

コントロール構造

controls配列内の各コントロールは、特定のチェックを定義します:

プロパティタイプ必須説明
name文字列はいGitLabコントロールID(例: scanner_sast_running)。
control_type文字列はいGitLabコントロールでは常に"internal"
expressionオブジェクトはいコントロールの評価ロジックを定義します。

式オブジェクト

expressionオブジェクトは、コントロールがどのように評価されるかを定義します:

プロパティタイプ必須説明
field文字列はい評価するフィールド名(コントロール名と一致)。
operator文字列はい比較演算子(=, >=, <=, >, <)。
value混合はい予期される値(ブール値、数値、または文字列)。

JSONテンプレート構造の例

以下は、完全な構造を示す簡略化された例です:

{
  "name": "Example Compliance Framework",
  "description": "Example framework demonstrating JSON structure",
  "color": "#1f75cb",
  "requirements": [
    {
      "name": "Security Scanning Requirement",
      "description": "Ensure security scanning is enabled for all projects",
      "controls": [
        {
          "name": "scanner_sast_running",
          "control_type": "internal",
          "expression": {
            "field": "scanner_sast_running",
            "operator": "=",
            "value": true
          }
        },
        {
          "name": "minimum_approvals_required_2",
          "control_type": "internal",
          "expression": {
            "field": "minimum_approvals_required",
            "operator": ">=",
            "value": 2
          }
        }
      ]
    }
  ]
}

要件

  • プラン: Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

GitLab Ultimateでは、コンプライアンスフレームワークに特定のrequirementsを定義できます。要件は1つまたは複数のコントロールで構成されており、フレームワークが割り当てられたプロジェクトの設定または動作に対するチェックです。各要件には最大5つのコントロールがあります。

各コントロールには、GitLabがスケジュールされたスキャンまたはトリガーされたスキャン中にプロジェクトの順守状況を評価するために使用するロジックが含まれています。順守状況がどのように追跡されるかの詳細については、コンプライアンスステータスレポートを参照してください。

フレームワーク要件には、GitLabコンプライアンスコントロールまたは外部コントロールを使用できます。

GitLabコンプライアンスコントロール

GitLabコンプライアンスコントロールは、GitLabコンプライアンスフレームワークで使用できます。コントロールは、コンプライアンスフレームワークに割り当てられたプロジェクトの設定または動作に対するチェックです。

GitLabコンプライアンスコントロールを組み合わせて、コンプライアンス標準を満たすのに役立てることができます。

実行中のスキャナーをチェックするセキュリティスキャナーコントロールは、子パイプラインで設定されたスキャナーを検出するのに失敗します。これらのコントロールがパスするには、親パイプラインでセキュリティスキャナーを設定する必要があります。詳細については、イシュー595632を参照してください。

コントロール名コントロールID説明
APIセキュリティ実行中scanner_api_security_runningプロジェクトのデフォルトブランチパイプラインでAPIセキュリティスキャンが設定され、実行されていることを保証します。
少なくとも1つの承認minimum_approvals_required_1マージリクエストがマージされる前に少なくとも1つの承認を必要とすることを保証します。
少なくとも2つの承認minimum_approvals_required_2マージリクエストがマージされる前に少なくとも2つの承認を必要とすることを保証します。
認証SSOが有効auth_sso_enabledプロジェクトでシングルサインオン(SSO)認証が有効になっていることを保証します。
作成者が承認したマージリクエストは禁止されていますmerge_request_prevent_author_approvalマージリクエストの作成者が自身の変更を承認できないことを保証します。
ブランチ削除無効branch_deletion_disabledブランチを削除できないことを保証します。
CI/CDジョブトークンスコープが有効cicd_job_token_scope_enabledCI/CDジョブトークンのスコープ制限が有効になっていることを保証します。
コードオーナーが必要なコード変更code_changes_requires_code_ownersコード変更には、コードオーナーからの承認が必要であることを保証します。
コードオーナー承認が必要code_owner_approval_requiredコードオーナーファイルが設定されていることを保証します。
コード品質実行中scanner_code_quality_runningプロジェクトのデフォルトブランチパイプラインでコード品質スキャンが設定され、実行されていることを保証します。
コミッターが承認したマージリクエストは禁止されていますmerge_request_prevent_committers_approvalマージリクエストにコミットしたユーザーがそれを承認できないことを保証します。
コンテナスキャン実行中scanner_container_scanning_runningプロジェクトのデフォルトブランチパイプラインでコンテナスキャンが設定され、実行されていることを保証します。
DAST実行中scanner_dast_runningプロジェクトのデフォルトブランチパイプラインで動的アプリケーションセキュリティテスト(DAST)が設定され、実行されていることを保証します。
デフォルトブランチが保護されていますdefault_branch_protectedデフォルトブランチで保護ルールが有効になっていることを保証します。
ダイレクトプッシュから保護されたデフォルトブランチdefault_branch_protected_from_direct_pushデフォルトブランチへの直接プッシュを禁止します。
デフォルトブランチユーザーはマージ可能default_branch_users_can_mergeユーザーがデフォルトブランチに変更をマージできるかどうかを制御します。
デフォルトブランチユーザーはプッシュ可能default_branch_users_can_pushユーザーがデフォルトブランチに直接プッシュできるかどうかを制御します。
依存関係スキャン実行中scanner_dep_scanning_runningプロジェクトのデフォルトブランチパイプラインで依存関係スキャンが設定され、実行されていることを保証します。: GitLab Self-Managedインスタンス(18.4以降)では、SBOMベースの依存関係スキャンを使用する場合、アーティファクトの差違によりこのコントロールが失敗する可能性があります。互換性の考慮事項を参照してください。
1つのリポジトリにつき2人の管理者を確保ensure_2_admins_per_repo各プロジェクトに少なくとも2人のオーナーが割り当てられていることを保証します。
エラー追跡が有効error_tracking_enabledプロジェクトでエラー追跡が有効になっていることを保証します。
強制プッシュが無効force_push_disabledリポジトリへの強制プッシュを防ぎます。
プロジェクトのフォークが存在するhas_forksプロジェクトがフォークしたことを保証します
GitLabライセンスレベルUltimategitlab_license_level_ultimateGitLabインスタンスがUltimateライセンスを使用していることを保証します。
有効なCI/CD設定があるhas_valid_ci_configプロジェクトに有効なCI/CD設定があることを保証します。
IaCスキャン実行中scanner_iac_runningプロジェクトのデフォルトブランチパイプラインでInfrastructure as Code(IaC)スキャンが設定され、実行されていることを保証します。
内部表示レベルは禁止されていますproject_visibility_not_internalプロジェクトが内部表示レベルに設定されていないことを保証します。
イシュートラッキングが有効issue_tracking_enabledプロジェクトでイシュートラッキングが有効になっていることを保証します。
ライセンスコンプライアンス実行中scanner_license_compliance_runningプロジェクトのデフォルトブランチパイプラインでライセンスコンプライアンススキャンが設定され、実行されていることを保証します。
マージリクエストのコミットにより承認がリセットされますmerge_request_commit_reset_approvalsマージリクエストへの新しいコミットが承認をリセットすることを保証します。
マージリクエスト承認ルールは編集を禁止しますmerge_requests_approval_rules_prevent_editingマージリクエスト承認ルールを編集できないことを保証します。
マージリクエストにはコードオーナーの承認が必要ですmerge_requests_require_code_owner_approvalマージリクエストには、コードオーナーからの承認が必要であることを保証します。
管理者よりも多くのメンバーmore_members_than_adminsプロジェクトに(オーナーまたはメンテナー)である管理者の割り当てが、総メンバー数よりも少ないことを保証します。
パッケージハンターはトリアージされていない結果がありませんpackage_hunter_no_findings_untriagedすべてのパッケージハンターの結果がトリアージされることを保証します。
プロジェクトはアーカイブされていませんproject_archivedプロジェクトがアーカイブされているかどうかをチェックします。通常、falseは準拠しています。
プロジェクトは削除対象としてマークされていませんproject_marked_for_deletionプロジェクトが削除対象としてマークされているかどうかをチェックします。falseは準拠しています。
プロジェクトのパイプラインは公開されていませんproject_pipelines_not_publicプロジェクトのパイプラインが公開されていないことを保証します。プロジェクトの表示レベルは考慮しません。
プロジェクトのリポジトリが存在するproject_repo_existsプロジェクトにGitリポジトリが存在することを保証します。
プロジェクトの表示レベルは公開されていませんproject_visibility_not_publicプロジェクトが公開表示レベルに設定されていないことを保証します。
保護ブランチが存在するprotected_branches_setプロジェクトに保護ブランチが含まれていることを保証します。
プッシュ保護が有効push_protection_enabledプロジェクトでシークレットプッシュ保護が有効になっていることを保証します。
ブランチが最新であることを要求require_branch_up_to_dateマージ前にソースブランチがターゲットブランチと最新の状態であることを保証します。
線形履歴を要求require_linear_historyマージコミットを禁止することにより、線形コミット履歴を保証します。
組織レベルでのMFAを要求require_mfa_at_org_level組織レベルで多要素認証が必要であることを保証します。
コントリビューターにはMFAを要求require_mfa_for_contributorsコントリビューターが多要素認証を有効にしていることを保証します。
署名済みコミットを要求require_signed_commits署名済みコミットが必要であることを保証します。
プッシュ時に承認をリセットreset_approvals_on_pushマージリクエストに新しいコミットがプッシュされたときに、承認がリセットされることを保証します。
ディスカッションの解決が必要resolve_discussions_requiredマージが許可される前に、すべてのディスカッションが解決することを保証します。
プッシュ/マージアクセス制御を制限restrict_push_merge_access保護ブランチにプッシュまたはマージできるユーザーを制限します。
制限されたビルドアクセス制御restricted_build_accessビルドアーティファクトとパイプライン出力へのアクセス制御が制限されていることを保証します。
期限切れのリポジトリをレビューしてアーカイブreview_and_archive_stale_repos期限切れのリポジトリがレビューされ、アーカイブされることを保証します。
非アクティブなユーザーをレビューして削除review_and_remove_inactive_users非アクティブなユーザーがレビューされ、削除されることを保証します。
SAST実行中scanner_sast_runningプロジェクトのデフォルトブランチパイプラインで静的アプリケーションセキュリティテスト(SAST)が設定され、実行されていることを保証します。
シークレット検出実行中scanner_secret_detection_runningプロジェクトのデフォルトブランチパイプラインでシークレット検出スキャンが設定され、実行されていることを保証します。
安全なWebhooksecure_webhooksWebhookが安全に設定されていることを保証します。
古いブランチのクリーンアップが有効stale_branch_cleanup_enabled古いブランチの自動クリーンアップが有効になっていることを保証します。
ステータスチェックが必要status_checks_requiredマージが許可される前に、ステータスチェックがパスすることを保証します。
ステータスページが設定済みstatus_page_configuredプロジェクトにステータスページが設定されていることを保証します。
リポジトリの厳格な権限strict_permissions_for_repoリポジトリアクセス制御のために厳格な権限が設定されていることを保証します。
Terraformが有効terraform_enabledプロジェクトでTerraformインテグレーションが有効になっていることを保証します。
ユーザー定義のCI/CD変数はメンテナーに制限project_user_defined_variables_restricted_to_maintainersメンテナーロール以上のユーザーのみが、パイプラインをトリガーする際にユーザー定義変数を渡せることを保証します。
脆弱性SLOしきい値超過日数vulnerabilities_slo_days_over_thresholdSLOしきい値(180日)内で脆弱性が対処されることを保証します。

外部コントロール

外部コントロールは、外部システムに対して外部コントロールまたは要件のステータスをリクエストするAPIコールです。

サードパーティツールにデータを送信する外部コントロールを作成できます。

コンプライアンススキャンが実行されると、GitLabは通知を送信します。ユーザーまたは自動化されたワークフローは、GitLabの外部からコントロールのステータスを更新できます。

このインテグレーションにより、ServiceNowなどのサードパーティワークフローツール、または選択したカスタムツールと統合できます。サードパーティツールは関連するステータスで応答します。このステータスは、コンプライアンスステータスレポートに表示されます。

個々のプロジェクトごとに外部コントロールを設定できます。外部コントロールはプロジェクト間で共有されません。外部コントロールが6時間以上保留状態のままである場合、ステータスチェックは失敗します。

外部コントロールを追加

フレームワークを作成または編集する際に外部コントロールを追加するには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  3. ページで、フレームワークタブを選択します。
  4. 新規フレームワークを選択するか、既存のものを編集します。
  5. 要件セクションで、新しい要件を選択します。
  6. 外部コントロールの追加を選択します。
  7. フィールドで、外部コントロール名外部URL、および HMAC共有シークレット を編集します。
  8. (オプション)オプション。Ping enabled切替をオフにして、コンプライアンススキャン中にGitLabが外部サービスに通知を送信するかどうかを制御します。
  9. フレームワークへの変更を保存を選択して、要件を保存します。

Ping enabled設定

Ping enabled設定は、GitLabが12時間ごとに外部システムから外部コントロールステータス更新をリクエストするかどうかを制御します。

  • 有効(デフォルト): GitLabは12時間ごとに外部サービスURLにHTTPリクエストを自動的に送信し、応答に基づいて外部コントロールステータスを更新します。
  • 無効: GitLabは外部サービスに通知を送信せず、外部コントロールはコンプライアンスフレームワークUIに無効バッジを表示します。外部コントロールのステータスをリクエストするには、外部コントロールAPIを手動で使用する必要があります。

外部コントロールライフサイクル

外部コントロールにはasynchronousのワークフローがあります。コンプライアンススキャンが実行されると、外部サービスにペイロードを送信します。

%%{init: { "fontFamily": "GitLab Sans" }}%%
sequenceDiagram
    accTitle: Workflow for external compliance controls
    accDescr: GitLab sends a requirement payload to an external service and receives a control response for compliance validation.

    GitLab->>+External service: Requirement payload
    External service-->>-GitLab: Control response
    Note over External service,GitLab: Response includes SHA at HEAD

ペイロードが受信されると、外部サービスは必要なプロセスを実行できます。外部サービスは、REST APIを使用して、応答をマージリクエストにポストできます。

外部コントロールには、3つのステータスのいずれかがあります。

ステータス説明
pendingデフォルトステータス。外部サービスからの応答はありません。
pass外部サービスから応答が受信され、外部コントロールは外部サービスによって承認されました。
fail外部サービスから応答が受信され、外部コントロールは外部サービスによって拒否されました。

GitLabの外部で何かが変更された場合、APIを使用して外部コントロールのステータスを設定できます。最初にペイロードが送信されるのを待つ必要はありません。

外部コントロールペイロードの例

GitLabがコンプライアンススキャン中に外部サービスに通知を送信すると、ペイロードに詳細なプロジェクト情報が含まれます。以下はJSONペイロード構造の例です:

{
  "id": 123456,
  "description": "Project for compliance testing and validation",
  "name": "Compliance Test Project",
  "name_with_namespace": "acme-corp / engineering / security / compliance-test-project",
  "path": "compliance-test-project",
  "path_with_namespace": "acme-corp/engineering/security/compliance-test-project",
  "created_at": "2024-01-15T10:30:00.000Z",
  "tag_list": ["compliance", "security"],
  "topics": ["governance", "audit"],
  "ssh_url_to_repo": "git@gitlab.com:acme-corp/engineering/security/compliance-test-project.git",
  "http_url_to_repo": "https://gitlab.com/acme-corp/engineering/security/compliance-test-project.git",
  "web_url": "https://gitlab.com/acme-corp/engineering/security/compliance-test-project",
  "avatar_url": "https://gitlab.com/uploads/-/system/project/avatar/123456/avatar.png",
  "star_count": 5,
  "last_activity_at": "2024-11-20T14:25:30.000Z",
  "visibility": "private",
  "namespace": {
    "id": 654321,
    "name": "Security Group",
    "path": "security",
    "kind": "group",
    "full_path": "acme-corp/engineering/security",
    "parent_id": 654320,
    "avatar_url": "https://gitlab.com/uploads/-/system/group/avatar/654321/avatar.png",
    "web_url": "https://gitlab.com/groups/acme-corp/engineering/security"
  },
  "container_registry_image_prefix": "registry.gitlab.com/acme-corp/engineering/security/compliance-test-project",
  "_links": {
    "self": "https://gitlab.com/api/v4/projects/123456",
    "issues": "https://gitlab.com/api/v4/projects/123456/issues",
    "merge_requests": "https://gitlab.com/api/v4/projects/123456/merge_requests",
    "repo_branches": "https://gitlab.com/api/v4/projects/123456/repository/branches",
    "labels": "https://gitlab.com/api/v4/projects/123456/labels",
    "events": "https://gitlab.com/api/v4/projects/123456/events",
    "members": "https://gitlab.com/api/v4/projects/123456/members",
    "cluster_agents": "https://gitlab.com/api/v4/projects/123456/cluster_agents"
  },
  "marked_for_deletion_at": null,
  "marked_for_deletion_on": null,
  "packages_enabled": true,
  "empty_repo": false,
  "archived": false,
  "resolve_outdated_diff_discussions": false,
  "container_expiration_policy": {
    "cadence": "1d",
    "enabled": false,
    "keep_n": 10,
    "older_than": "90d",
    "name_regex": ".*",
    "name_regex_keep": null,
    "next_run_at": "2024-01-16T10:30:00.000Z"
  },
  "repository_object_format": "sha1",
  "issues_enabled": true,
  "merge_requests_enabled": true,
  "wiki_enabled": true,
  "jobs_enabled": true,
  "snippets_enabled": true,
  "container_registry_enabled": true,
  "service_desk_enabled": true,
  "can_create_merge_request_in": false,
  "issues_access_level": "enabled",
  "repository_access_level": "enabled",
  "merge_requests_access_level": "enabled",
  "forking_access_level": "enabled",
  "wiki_access_level": "enabled",
  "builds_access_level": "enabled",
  "snippets_access_level": "enabled",
  "pages_access_level": "private",
  "analytics_access_level": "enabled",
  "container_registry_access_level": "enabled",
  "security_and_compliance_access_level": "private",
  "releases_access_level": "enabled",
  "environments_access_level": "enabled",
  "feature_flags_access_level": "enabled",
  "infrastructure_access_level": "enabled",
  "monitor_access_level": "enabled",
  "model_experiments_access_level": "enabled",
  "model_registry_access_level": "enabled",
  "package_registry_access_level": "enabled",
  "emails_disabled": false,
  "emails_enabled": true,
  "show_diff_preview_in_email": true,
  "shared_runners_enabled": true,
  "lfs_enabled": true,
  "creator_id": 111222,
  "import_status": "none",
  "open_issues_count": 3,
  "description_html": "<p>Project for compliance testing and validation</p>",
  "updated_at": "2024-11-20T14:25:30.000Z",
  "public_jobs": true,
  "shared_with_groups": [],
  "only_allow_merge_if_pipeline_succeeds": false,
  "allow_merge_on_skipped_pipeline": null,
  "request_access_enabled": true,
  "only_allow_merge_if_all_discussions_are_resolved": false,
  "remove_source_branch_after_merge": true,
  "printing_merge_request_link_enabled": true,
  "merge_method": "merge",
  "merge_request_title_regex": null,
  "merge_request_title_regex_description": null,
  "squash_option": "default_off",
  "enforce_auth_checks_on_uploads": true,
  "suggestion_commit_message": null,
  "merge_commit_template": null,
  "squash_commit_template": null,
  "issue_branch_template": null,
  "warn_about_potentially_unwanted_characters": true,
  "autoclose_referenced_issues": true,
  "max_artifacts_size": null,
  "approvals_before_merge": 0,
  "mirror": false,
  "external_authorization_classification_label": "",
  "requirements_enabled": true,
  "requirements_access_level": "enabled",
  "security_and_compliance_enabled": false,
  "compliance_frameworks": ["SOC 2 Compliance Framework"],
  "merge_pipelines_enabled": false,
  "merge_trains_enabled": false,
  "merge_trains_skip_train_allowed": false,
  "only_allow_merge_if_all_status_checks_passed": false,
  "allow_pipeline_trigger_approve_deployment": false,
  "prevent_merge_without_jira_issue": false,
  "auto_duo_code_review_enabled": false,
  "duo_remote_flows_enabled": true,
  "duo_foundational_flows_enabled": true,
  "spp_repository_pipeline_access": false,
  "project_control_compliance_status": {
    "status": "pending",
    "compliance_requirements_control_id": 100001,
    "project_id": 123456,
    "compliance_requirement_id": 200001,
    "namespace_id": 654321,
    "id": 300001,
    "created_at": "2024-11-26T10:00:00.000Z",
    "updated_at": "2024-11-26T10:00:00.000Z",
    "requirement_status_id": null
  }
}

外部サービスはこの情報を使用してコンプライアンスチェックを実行し、外部コントロールAPIを使用して適切なコントロールステータスで応答できます。

要件を追加

フレームワークを作成または編集する際に要件を追加するには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  3. ページで、フレームワークタブを選択します。
  4. 新規フレームワークを選択するか、既存のものを編集します。
  5. 要件セクションで、新しい要件を選択します。
  6. ダイアログで名前説明を追加します。
  7. GitLabコントロールを追加するを選択して、コントロールを追加します。
  8. コントロールのドロップダウンリストでコントロールを検索して選択します。
  9. フレームワークへの変更を保存を選択して、要件を保存します。

要件を編集

フレームワークを作成または編集する際に要件を編集するには:

  1. 上部のバーで、検索または移動先を選択して、グループを見つけます。
  2. 左のサイドバーで、セキュリティ > コンプライアンスセンターを選択します。
  3. ページで、フレームワークタブを選択します。
  4. 新規フレームワークを選択するか、既存のものを編集します。
  5. 要件セクションで、アクション > 編集を選択します。
  6. ダイアログで名前説明を編集します。
  7. GitLabコントロールを追加するを選択して、コントロールを追加します。
  8. コントロールのドロップダウンリストでコントロールを検索して選択します。
  9. remove を選択してコントロールを削除します。
  10. フレームワークへの変更を保存を選択して、要件を保存します。

トラブルシューティング

コンプライアンスフレームワークを操作する際に、次の問題が発生する可能性があります。

エラー: Unable to determine the correct upload URL

JSONテンプレートと同じ名前のコンプライアンスフレームワークが既に存在する場合、コンプライアンスフレームワークインポート中にこのエラーが発生します。