シークレット検出
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
はじめに
ソリューションコンポーネントのダウンロード
- アカウントチームから招待コードを入手してください。
- 招待コードを使用して、ソリューションコンポーネントウェブストアからソリューションコンポーネントをダウンロードします。
前提要件
- GitLab Ultimateプラン
- GitLabインスタンスまたはグループへの管理者アクセス
- プロジェクトに対してシークレット検出が有効になっている
シークレット検出カスタムルールの設定
このガイドは、グローバルレベルでシークレット検出セキュリティポリシーを実装するのに役立ちます。このソリューションは、デフォルトのシークレット検出ルールを拡張して、社会保障番号や平文パスワードなどのPIIデータエレメントの検出を含めます。ルール拡張は、リモートルールセットと見なされます。
カスタムルールセットの設定
次の手順でカスタムルールセットをセットアップできます
- トップレベルグループ
Secret Detectionを作成します - ダウンロードしたコンポーネントから、プロジェクト
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"]定義済みカスタムルールセットへのアクセス
カスタムルールセットにアクセスするには、ボットユーザーを生成するグループアクセストークンを作成する必要があります。ボットユーザーは、グローバルセキュリティポリシーでシークレット検出を実行するすべてのプロジェクトで、カスタムルールセットを認証してアクセスするために使用できます。
アクセスと認証を設定するには、次の手順に従います:
- グループトークンを作成します: グループ
Secret Detectionで、SettingsメニューオプションのグループアクセストークンSecret Detection Group Tokenを作成し、トークンにreporterロールとread_repositoryアクセス権を付与します
- グループ変数を作成します: トークン値をコピーし、安全に保管してください。
Settingsメニューオプションのグループ変数をSECRET_DETECTION_GROUP_TOKENというキーとしてトークン値とともに追加します。 - グループトークンのボットユーザーを取得します: 同じグループで、
manageメニューオプションに移動してmemberを選択し、グループアクセストークンSecrete Detection Group Tokenに対応するボットユーザーを調べ、@group_[group_id]_bot_[random_number]の形式でグループのボットユーザーを表す値をコピーします
実装ガイド
このガイドでは、集中型のカスタムルールセットを使用して、すべてのプロジェクトに対してシークレット検出を実行するようにセキュリティポリシーを構成する手順について説明します。
シークレット検出セキュリティポリシーの設定
グローバルセキュリティポリシーとしてパイプラインでシークレット検出を自動的に実行するには、最上位レベル(この場合はトップレベルグループ)でセキュリティポリシーを設定します。新しいシークレット検出セキュリティポリシーを作成するには:
セキュリティポリシーを作成します: 同じグループ
Secret Detectionで、そのグループのセキュリティ > ポリシーページに移動します。新規ポリシーを選択します。
スキャン実行ポリシーを選択します。
セキュリティポリシーを構成します: セキュリティポリシー名
Secret Detection Policyを入力し、説明を入力してSecret Detectionスキャンを選択します「このグループ内のすべてのプロジェクト」(必要に応じて例外を設定)または「特定のプロジェクト」(ドロップダウンからプロジェクトを選択)を選択して、ポリシーのスコープを設定します。
アクションセクションでは、デフォルトで「シークレット検出」が表示されます。
条件セクションでは、すべてのコミット時ではなく、スケジュールに基づいてスキャンを実行する場合は、必要に応じて「トリガー: 」を「スケジュール: 」に変更できます。
カスタムルールセットへのアクセスを設定します。ボットユーザー、グループ変数、およびカスタムルールセットプロジェクトの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変数の詳細については、詳細については、このドキュメントを参照してください。
- ポリシーの作成をクリックします。
セキュリティポリシー構成の完了
セキュリティポリシーの作成後、参照用に、完全なセキュリティポリシー設定を次に示します:
---
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ウィジェットに表示されます。デフォルトブランチがマージされている場合、セキュリティ脆弱性レポートに次のように表示されます:

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


