セキュリティメトリクスとKPI
- プラン: Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
このドキュメントは、GitLabセキュリティメトリクスおよびKPIソリューションコンポーネントのインストール、設定、およびユーザーガイドを説明します。このセキュリティソリューションコンポーネントは、ビジネスユニット、時間範囲、脆弱性の重大度、およびセキュリティタイプ別に表示できるメトリクスとKPIを提供します。PDFドキュメントを使用して、月次または四半期ベースでセキュリティ対策状況のスナップショットを提供できます。データはSplunkのダッシュボードを使用して可視化されます。
このソリューションは、GitLabプロジェクトまたはグループからGraphQL APIを使用して脆弱性データをエクスポートし、HTTP Event Collector(HEC)を介してSplunkに送信し、セキュリティメトリクスの可視化のためにすぐに使えるダッシュボードを含みます。エクスポート処理は、GitLab CI/CDパイプラインとして定期的に実行されるように設計されています。
はじめに
ソリューションコンポーネントをダウンロードする
- アカウントチームから招待コードを取得します。
- 招待コードを使用して、ソリューションコンポーネントのウェブストアからソリューションコンポーネントをダウンロードしてください。
ソリューションコンポーネントプロジェクトをセットアップする
- このexporterをホストする新しいGitLabプロジェクトを作成します。
- 提供されたファイルをプロジェクトにコピーします:
export_vulns.pysend_to_splunk.pyrequirements.txt.gitlab-ci.yml
- プロジェクトの設定で必要なCI/CD変数を設定します。
- パイプラインスケジュールを設定します(例: 毎日または毎週)。
仕組み
このソリューションは、2つの主要なコンポーネントで構成されています:
- GitLabセキュリティダッシュボードからデータをフェッチする脆弱性exporter
- エクスポートされたデータを処理し、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エンドポイント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時間の場合: 毎日2回スケジュールする
- 3日間の場合: 3日ごとにスケジュールする
- 脆弱性を見逃さないように、スケジューリングに重複を追加します。
パイプラインのセットアップ
初回実行時:
- すべての過去の脆弱性を収集するために
VULN_TIME_WINDOW: "all"を設定します - パイプラインを1回実行します
- すべての過去の脆弱性を収集するために
継続的な収集:
VULN_TIME_WINDOWを希望する期間(24hまたは7d)に設定します- パイプラインスケジュールを設定します:
24hの場合: 毎日スケジュールする7dの場合: 毎週スケジュールする
Splunkインテグレーション
スクリプトは脆弱性をイベントとしてSplunkに送信します。
インデックスの設定
- Splunkで
gitlab_vulnsという名前の新しいインデックスを作成します - HECトークンを作成する際:
- デフォルトのインデックスを
gitlab_vulnsに設定します(このインデックスは、提供されるSplunkダッシュボードのベース検索で参照されます) - トークンにこのインデックスへの書き込み権限があることを確認します
- トークンに、イベントデータをJSONとして正しく解析できるsourcetypeがあることを確認します
- デフォルトのインデックスを
各イベントには以下が含まれます:
- 検出時間
- 脆弱性のタイトルと説明
- 重大度レベル
- スキャナー情報
- プロジェクトの詳細
- プロジェクトと脆弱性の両方のURL
ダッシュボードのセットアップ
提供されたダッシュボードは、以下の可視化によりGitLabの脆弱性データに関する包括的な表示レベルを提供します:
- 致命的および高重大度の脆弱性に対するP95経年メトリクス(ラジアルゲージ)
- 致命的および高重大度の脆弱性の経年バケット(0〜30日、31〜90日、91〜180日、180日以上)にわたる分布を示す経年分析
- 発生数を含む上位10の最も頻繁なCVE
- プロジェクトパスと重大度による脆弱性分布
- すべてのメトリクスは、ビジネスユニットと時間範囲でフィルターできます。
ダッシュボードを設定するには:
ビジネスユニットのマッピング:
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というラベルの行を見つけます。- 権限を選択します。
- 権限を次のいずれかに設定します:
- インスタンス全体でのアクセスを許可するためにグローバルに設定します。
- 必要に応じて特定のアプリまたはロールと共有します。
- 保存を選択します。
ダッシュボードのインストール:
- 提供されている
vuln_metrics_dashboard.xmlファイルを保存します。 - Splunkで:
- Searchアプリに移動します。
- ダッシュボード > Create New Dashboardをクリックします。
- 編集ビューでソースを選択します。
- デフォルトのXMLを
vuln_metrics_dashboard.xmlの内容で置き換えます。 - ダッシュボードを保存します。
- 提供されている
出力形式
中間CSVファイルには以下が含まれます:
detectedAt: 検出タイムスタンプtitle: 脆弱性のタイトルseverity: 重大度レベルprimaryIdentifier: 脆弱性識別子exporter: スキャナー名projectPath: GitLabプロジェクトパスprojectUrl: プロジェクトURLdescription: 脆弱性の説明webUrl: 脆弱性の詳細URL
エラー処理
このソリューションには以下が含まれます:
- 指数関数的バックオフによるレート制限処理
- Splunkへの取り込みのためのバッチ処理
- 適切なエラーレポート
- タイムアウト処理
- UTF-8エンコードのサポート
ベストプラクティス
トークン権限:
- GRAPHQL_API_トークンに必要なもの:
- ターゲットグループ/プロジェクトへの読み取りアクセス
- セキュリティダッシュボードへのアクセス
- SPLUNK_HEC_トークンに必要なもの:
- ターゲットインデックスへのイベント送信権限
- GRAPHQL_API_トークンに必要なもの:
パイプラインスケジュール頻度:
- スケジュールを
VULN_TIME_WINDOWと一致させます - 脆弱性を見逃さないように重複を含めます
- 組織のSLAを考慮します
- スケジュールを
モニタリング:
- パイプラインの成功/失敗を監視します
- エクスポートされた脆弱性の数を追跡します
- Splunkへの取り込みの成功を監視します
トラブルシューティング
一般的な問題と解決策:
脆弱性がエクスポートされない:
- スコープの設定を確認します
- トークンの権限を確認します
- セキュリティダッシュボードへのアクセスを確認します
Splunk取り込みが失敗する:
- HEC URLとトークンを確認します
- ネットワーク接続を確認します
- インデックスの権限を確認します
