セキュリティメトリクスとKPI
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
このドキュメントでは、GitLab Security Metrics and KPIsソリューションコンポーネントのインストール、設定、およびユーザーガイドについて説明します。このセキュリティソリューションコンポーネントは、ビジネスユニット、期間、脆弱性の重大度、およびセキュリティタイプ別に表示できるメトリクスとKPIを提供します。PDFドキュメントで、月単位または四半期単位でセキュリティ対策状況のスナップショットを提供できます。データはSplunkのダッシュボードを使用して可視化されます。
このソリューションは、GraphQL APIを使用してGitLabプロジェクトまたはグループから脆弱性データをエクスポートし、HTTP Event Collector(HEC)を介してSplunkに送信し、すぐに使用できるセキュリティ指標の可視化のためのダッシュボードが含まれています。エクスポートプロセスは、スケジュールに基づいてGitLab CDパイプラインとして実行するように設計されています。
はじめに
ソリューションコンポーネントのダウンロード
- アカウントチームから招待コードを入手してください。
- 招待コードを使用して、ソリューションコンポーネントのWebストアからソリューションコンポーネントをダウンロードします。
ソリューションコンポーネントプロジェクトのセットアップ
- このエクスポーターをホストする新しいGitLabプロジェクトを作成します。
- 提供されたファイルをプロジェクトにコピーします:
export_vulns.pysend_to_splunk.pyrequirements.txt.gitlab-ci.yml
- プロジェクトの設定で、必須のCI/CD変数を設定します。
- パイプラインスケジュールを設定します(たとえば、毎日または毎週)。
仕組み
このソリューションは、主に2つのコンポーネントで構成されています:
GitLabセキュリティダッシュボードからデータをフェッチする脆弱性エクスポーター
エクスポートされたデータを処理してSplunk HECに送信するSplunk取り込みツール
パイプラインは2つのステージで実行されます:
extract: 脆弱性をフェッチし、CSVに保存しますingest: 脆弱性データをSplunkに送信します
設定
必須CI/CD変数
| 変数 | 説明 | 値の例 |
|---|---|---|
SCOPE | 脆弱性スキャンのターゲットスコープ | group:security/appsecまたはsecurity/my-project |
GRAPHQL_API_TOKEN | APIアクセスを持つGitLabパーソナルアクセストークン | glpat-XXXXXXXXXXXXXXXX |
GRAPHQL_API_URL | GitLab GraphQL API URL | https://gitlab.com/api/graphql |
SPLUNK_HEC_TOKEN | Splunk HTTP Event Collectorトークン | 11111111-2222-3333-4444-555555555555 |
SPLUNK_HEC_URL | Splunk HECエンドポイントAPI URL | https://splunk.company.com:8088/services/collector |
オプションのCI/CD変数
| 変数 | 説明 | 値の例 | デフォルト |
|---|---|---|---|
SEVERITY_FILTER | カンマ区切りの重大度レベルのリスト | CRITICAL,HIGH,MEDIUM | すべての重大度 |
VULN_TIME_WINDOW | 脆弱性収集の期間 | 24h、7d、またはall | 24h |
スコープの設定
SCOPE変数は、スキャンするプロジェクトまたはグループを決定します:
- プロジェクトの場合:
mygroup/myproject - グループの場合:
group:mygroup/subgroup - インスタンス全体の場合:
instance
重大度フィルターの例
有効な重大度レベル:
CRITICALHIGHMEDIUMLOWUNKNOWN
組み合わせの例:
CRITICAL,HIGHCRITICAL,HIGH,MEDIUM- すべての重大度を含めるには、空のままにします
期間の設定
VULN_TIME_WINDOW変数は、脆弱性をどこまで遡って検索するかを制御します:
- 形式:
<number><unit>。各設定項目の意味は次のとおりです。number: 任意の正の整数unit: 時間の場合はh、日の場合はd
- 例:
24h: 過去24時間7h: 過去7時間15d: 過去15日間30d: 過去30日間all: すべての脆弱性(初回実行に役立ちます)
デフォルト値: 24h
パイプライン構成の例:
# For 12-hour window
variables:
VULN_TIME_WINDOW: "12h"
# For 3-day window
variables:
VULN_TIME_WINDOW: "3d"
# For all vulnerabilities
variables:
VULN_TIME_WINDOW: "all"選択した期間に基づいてパイプラインをスケジュールします。例:
- 12時間の場合: 1日に2回スケジュールします
- 3日間の場合: 3日ごとにスケジュールします
- 脆弱性が見落とされないように、スケジュールに多少のオーバーラップを追加します
パイプラインのセットアップ
First Run(初回実行):
- すべての履歴脆弱性を収集するために
VULN_TIME_WINDOW: "all"を設定します - パイプラインを一度実行します。
- すべての履歴脆弱性を収集するために
Ongoing Collection(継続的な収集):
VULN_TIME_WINDOWを目的の期間(24hまたは7d)に設定します- パイプラインスケジュールを設定します:
24hの場合: 毎日スケジュールします7dの場合: 毎週スケジュールします
Splunkインテグレーション
このスクリプトは、脆弱性をイベントとしてSplunkに送信します。
インデックスの設定
Splunkに
gitlab_vulnsという名前の新しいインデックスを作成しますHECトークンを作成する場合:
- デフォルトのインデックスを
gitlab_vulnsに設定します(このインデックスは、提供されているSplunkダッシュボードの基本検索で参照されます) - このインデックスに書き込む権限がトークンにあることを確認します
- トークンに、イベントデータがJSONとして正しく解析されるようにするsourcetypeがあることを確認してください
- デフォルトのインデックスを
各イベントには以下が含まれます:
- 検出時間
- 脆弱性のタイトルと説明
- 重大度レベル
- スキャナー情報
- プロジェクト詳細
- プロジェクトと脆弱性両方のURL
ダッシュボードのセットアップ
提供されているダッシュボードは、次の可視化により、GitLab脆弱性データへの包括的な可視性を提供します:
- 重大な脆弱性と高重大度の脆弱性のP95 Ageメトリクス(ラジアルゲージ)
- 重大な脆弱性と高重大度の脆弱性の経過時間バケット(0〜30日、31〜90日、91〜180日、180日以上)にわたる分布を示す経過時間分析
- 発生数が多い上位10個のCVE
- プロジェクトパスと重大度別の脆弱性の分布
- すべてのメトリクスは、ビジネスユニットと期間でフィルタリングできます
ダッシュボードを設定するには:
Business Unit Mapping(ビジネスユニットのマッピング):
- 2つの列を持つCSVファイルを作成します:
project_url,business_unit- 各GitLabプロジェクトURLを対応するビジネスユニットにマップします。
- ルックアップテーブルとして、ファイルをSplunkにアップロードします:
- 設定 > Lookups(ルックアップ) > Lookup table files(ルックアップテーブルファイル)に移動します。
- New Lookup Table File(新しいルックアップテーブルファイル)を選択します。
- CSVファイルをアップロードします。
- Destination filename(宛先ファイル名)を
business_unit_mapping.csvに設定します。 - 権限を設定します:
<splunk_dir>/etc/apps/search/lookups/business_unit_mapping.csvというラベルの付いた行を見つけます。- 権限を選択します。
- 権限を次のいずれかに設定します:
- インスタンス全体のアクセスには、グローバルに設定します。
- 必要に応じて、特定のアプリまたはロールと共有します。
- 保存を選択します。
Dashboard Installation(ダッシュボードのインストール):
- 提供されている
vuln_metrics_dashboard.xmlファイルを保存します。 - Splunkで:
- 検索アプリに移動します。
- Dashboards(ダッシュボード) > Create New Dashboard(新しいダッシュボードを作成)をクリックします。
- 編集ビューでソースを選択します。
- デフォルトのXMLを
vuln_metrics_dashboard.xmlの内容に置き換えます。 - ダッシュボードを保存します。
- 提供されている
出力形式
中間CSVファイルには、以下が含まれます:
detectedAt: 検出タイムスタンプtitle: 脆弱性タイトルseverity: 重大度レベルprimaryIdentifier: 脆弱性識別子exporter: スキャナー名projectPath: GitLabプロジェクトパスprojectUrl: プロジェクトURLdescription: 脆弱性の説明webUrl: 脆弱性の詳細URL
エラー処理
このソリューションには、以下が含まれています:
- 指数バックオフによるレート制限処理
- Splunk取り込みのバッチ処理
- 適切なエラー報告
- タイムアウト処理
- UTF-8エンコードのサポート
ベストプラクティス
Token Permissions(トークン)権限:
- GRAPHQL_API_TOKENに必要なもの:
- ターゲットグループ/プロジェクトへの読み取りアクセス
- セキュリティダッシュボードアクセス
- SPLUNK_HEC_TOKENに必要なもの:
- ターゲットインデックスへのイベント送信権限
- GRAPHQL_API_TOKENに必要なもの:
Schedule Frequency(パイプラインスケジュール頻度):
- スケジュールを
VULN_TIME_WINDOWに一致させます - 脆弱性の見落としを防ぐために、オーバーラップを含めます
- 組織のSLAを検討してください
- スケジュールを
モニタリング:
- パイプラインの成功/失敗を監視します
- エクスポートされた脆弱性の数を追跡します
- Splunk取り込みの成功を監視します
トラブルシューティング
一般的な問題と解決策:
No vulnerabilities exported(脆弱性がエクスポートされない):
- スコープ設定を確認します
- トークン権限を確認してください
- セキュリティダッシュボードアクセスを確認します
Splunk ingestion fails(Splunk取り込みが失敗する):
- HEC URLとトークンを確認します
- ネットワーク接続を確認してください
- インデックスの権限を確認します
