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

シークレット検出

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

はじめに

ソリューションコンポーネントのダウンロード

  1. アカウントチームから招待コードを入手してください。
  2. 招待コードを使用して、ソリューションコンポーネントウェブストアからソリューションコンポーネントをダウンロードします。

前提要件

  • GitLab Ultimateプラン
  • GitLabインスタンスまたはグループへの管理者アクセス
  • プロジェクトに対してシークレット検出が有効になっている

シークレット検出カスタムルールの設定

このガイドは、グローバルレベルでシークレット検出セキュリティポリシーを実装するのに役立ちます。このソリューションは、デフォルトのシークレット検出ルールを拡張して、社会保障番号や平文パスワードなどのPIIデータエレメントの検出を含めます。ルール拡張は、リモートルールセットと見なされます。

カスタムルールセットの設定

次の手順でカスタムルールセットをセットアップできます

  1. トップレベルグループSecret Detectionを作成します
  2. ダウンロードしたコンポーネントから、プロジェクトSecret Detection Custom Rulesetを新しく作成したSecret Detectionグループにコピーします。

このカスタムルールセットは、GitLabのプリビルドルールを拡張します。この拡張機能は、以下を含むシークレットを検出してアラートを送信できます:

  • PIIデータエレメント: 社会保障番号
  • 平文のパスワード。

カスタムルールセットファイル

カスタムルールセットは.gitlab/secret-detection-ruleset.tomlで定義されています。ルールはregexを使用して定義できます

PIIデータエレメントの検出

PIIデータエレメント検出用の拡張ルール

[[rules]]
id = "ssn"
description = "Social Security Number"
regex = "[0-9]{3}-[0-9]{2}-[0-9]{4}"
tags = ["ssn", "social-security-number"]
keywords = ["ssn"]

平文のパスワード

平文のパスワードに対する拡張ルール

[[rules]]
id = "password-secret"
description = "Detect secrets starting with Password or PASSWORD"
regex = "(?i)Password[:=]\\s*['\"]?[^'\"]+['\"]?"
tags = ["password", "secret"]
keywords = ["password", "PASSWORD"]

定義済みカスタムルールセットへのアクセス

カスタムルールセットにアクセスするには、ボットユーザーを生成するグループアクセストークンを作成する必要があります。ボットユーザーは、グローバルセキュリティポリシーでシークレット検出を実行するすべてのプロジェクトで、カスタムルールセットを認証してアクセスするために使用できます。

アクセスと認証を設定するには、次の手順に従います:

  1. グループトークンを作成します: グループSecret Detectionで、SettingsメニューオプションのグループアクセストークンSecret Detection Group Tokenを作成し、トークンにreporterロールとread_repositoryアクセス権を付与します

セキュリティダッシュボード

  1. グループ変数を作成します: トークン値をコピーし、安全に保管してください。Settingsメニューオプションのグループ変数をSECRET_DETECTION_GROUP_TOKENというキーとしてトークン値とともに追加します。
  2. グループトークンのボットユーザーを取得します: 同じグループで、manageメニューオプションに移動してmemberを選択し、グループアクセストークンSecrete Detection Group Tokenに対応するボットユーザーを調べ、@group_[group_id]_bot_[random_number]の形式でグループのボットユーザーを表す値をコピーします

シークレット検出グループトークンボット

実装ガイド

このガイドでは、集中型のカスタムルールセットを使用して、すべてのプロジェクトに対してシークレット検出を実行するようにセキュリティポリシーを構成する手順について説明します。

シークレット検出セキュリティポリシーの設定

グローバルセキュリティポリシーとしてパイプラインでシークレット検出を自動的に実行するには、最上位レベル(この場合はトップレベルグループ)でセキュリティポリシーを設定します。新しいシークレット検出セキュリティポリシーを作成するには:

  1. セキュリティポリシーを作成します: 同じグループSecret Detectionで、そのグループのセキュリティ > ポリシーページに移動します。

  2. 新規ポリシーを選択します。

  3. スキャン実行ポリシーを選択します。

  4. セキュリティポリシーを構成します: セキュリティポリシー名Secret Detection Policyを入力し、説明を入力してSecret Detectionスキャンを選択します

  5. 「このグループ内のすべてのプロジェクト」(必要に応じて例外を設定)または「特定のプロジェクト」(ドロップダウンからプロジェクトを選択)を選択して、ポリシーのスコープを設定します。

  6. アクションセクションでは、デフォルトで「シークレット検出」が表示されます。

  7. 条件セクションでは、すべてのコミット時ではなく、スケジュールに基づいてスキャンを実行する場合は、必要に応じて「トリガー: 」を「スケジュール: 」に変更できます。

  8. カスタムルールセットへのアクセスを設定します。ボットユーザー、グループ変数、およびカスタムルールセットプロジェクトのURLの値を持つCI変数を追加します。

    カスタムルールセットは別のプロジェクトでホストされ、リモートルールセットと見なされるため、SECRET_DETECTION_RULESET_GIT_REFERENCEを使用する必要があります。

    variables:
      SECRET_DETECTION_RULESET_GIT_REFERENCE: "group_[group_id]_bot_[random_number]:$SECRET_DETECTION_GROUP_TOKEN@[custom ruleset project URL]"
      SECRET_DETECTION_HISTORIC_SCAN: "true"

UI設定は、次の画面に表示されます: セキュリティダッシュボード このCI変数の詳細については、詳細については、このドキュメントを参照してください

  1. ポリシーの作成をクリックします。

セキュリティポリシー構成の完了

セキュリティポリシーの作成後、参照用に、完全なセキュリティポリシー設定を次に示します:

---
scan_execution_policy:
- name: Scan Execution for Secret Detection with Custom Rules
  description: ''
  enabled: true
  policy_scope:
    projects:
      excluding: []
  rules:
  - type: pipeline
    branches:
    - "*"
  actions:
  - scan: secret_detection
    variables:
      SECRET_DETECTION_RULESET_GIT_REFERENCE: "@group_[group_id]_bot_[random_number]:$SECRET_DETECTION_GROUP_TOKEN@gitlab.com/example_group/secret-detection/secret-detection-custom-ruleset"
      SECRET_DETECTION_HISTORIC_SCAN: 'true'
  skip_ci:
    allowed: true
    allowlist:
      users: []
approval_policy: []

仕組み

セキュリティポリシーが実行されると、グローバルセキュリティポリシーに関連付けられているすべてのプロジェクトで、secret detectジョブがsecret_detection_0ジョブとしてパイプラインで自動的に実行されます。 セキュリティダッシュボード

シークレットが検出され、表面化されます。マージリクエストがある場合、ネット新規シークレットがMRウィジェットに表示されます。デフォルトブランチがマージされている場合、セキュリティ脆弱性レポートに次のように表示されます: パスワード脆弱性の結果をシークレット検出

以下は、平文のパスワードの例です: 検出パスワードの調査結果をシークレット検出

トラブルシューティング

セキュリティポリシーが適用されていません

変更したセキュリティポリシープロジェクトがグループに正しくリンクされていることを確認してください。詳細については、セキュリティポリシープロジェクトへのリンクを参照してください。