イベントストリーミングの監査
- UI GitLab 14.9で導入されました。
- GitLab 15.2でサブグループのイベント記録が修正されました。
- GitLab 15.2でカスタムHTTPヘッダーUIが
custom_headers_streaming_audit_events_ui
というフラグで 導入されました。デフォルトでは無効。- GitLab 15.3でカスタムHTTPヘッダーUIが一般的に利用可能に。機能フラグ
custom_headers_streaming_audit_events_ui
を削除しました。- GitLab 15.3のユーザーエクスペリエンスを改善。
- GitLab 16.3でHTTP宛先名*フィールドを追加。
ユーザーは、トップレベルのグループやインスタンスにストリーミング先を設定し、グループ、サブグループ、プロジェクトに関する全ての監査イベントを、構造化されたJSONとして受け取ることができます。
トップレベルのグループオーナーとインスタンス管理者は、サードパーティのシステムで監査ログを管理できます。構造化JSONデータを受信できるサービスであれば、ストリーミング先として使用できます。
各ストリーミング先には、各ストリーミングイベントに最大20個のカスタムHTTPヘッダーを含めることができます。
GitLabは一つのイベントを同じ宛先に複数回ストリーミングすることができます。受信データを重複排除するには、ペイロードのid
キーを使用してください。
トップレベルのグループストリーミングデスティネーション
トップレベルグループのストリーミング配信先を管理します。
HTTP配信先
トップレベルグループのHTTPストリーミング先を管理します。
新しいHTTPデスティネーションの追加
新しいHTTPストリーミングデスティネーションをトップレベルグループに追加します。
前提条件:
- トップレベルグループのオーナーロール。
トップレベルグループにストリーミングデスティネーションを追加する手順
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- ストリーミング先を追加]を選択し、[HTTPエンドポイント]を選択して、先を追加するセクションを表示します。
- 名前]フィールドと[デスティネーションURL]フィールドに、デスティネーション名とURLを追加します。
- オプション。カスタムHTTPヘッダー]テーブルを探します。
- Activeチェックボックスは機能しないので無視します。Active] チェックボックスへの機能追加の進捗については、イシュー367509を参照してください。
- Add headerを選択して、新しい名前と値のペアを作成します。名前と値のペアを必要なだけ入力します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
- すべてのヘッダーを入力したら、[追加]を選択して新しいストリーミング先を追加します。
HTTPデスティネーションのリスト
前提条件:
- グループのオーナーロール。
トップレベルグループのストリーミング先を一覧表示します:
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- ストリームを選択して展開し、すべてのカスタムHTTPヘッダーを表示します。
HTTP宛先の更新
前提条件:
- グループのオーナーロール。
ストリーミング先の名前を更新するには
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- 展開するストリームを選択します。
- 名前]フィールドに、更新するデスティネーション名を追加します。
- 保存]を選択して、ストリーミング先を更新します。
ストリーミング先のカスタムHTTPヘッダーを更新するには
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- 展開するストリームを選択します。
- カスタムHTTPヘッダーテーブルを探します。
- 更新したいヘッダーを見つけます。
- Activeチェックボックスは機能しないので無視します。Active] チェックボックスへの機能追加の進捗については、イシュー367509を参照してください。
- Add headerを選択して、新しい名前と値のペアを作成します。名前と値のペアを必要なだけ入力します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
- 保存]を選択して、ストリーミング先を更新します。
HTTP送信先の削除
トップレベルグループのストリーム配信先を削除します。最後の宛先の削除に成功すると、トップレベルグループのストリーミングが無効になります。
前提条件:
- グループのオーナーロール。
ストリーミング配信先を削除するには
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- 展開するストリームを選択します。
- 削除先を選択します。
- ダイアログで削除先を選択して確定します。
ストリーミング先のカスタムHTTPヘッダのみを削除するには
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- 展開するストリームを選択します。
- カスタムHTTPヘッダーテーブルを探します。
- 削除したいヘッダーを探します。
- ヘッダーの右側で、削除({remove}) を選択します。
- 保存]を選択して、ストリーミング先を更新します。
イベントの信頼性の確認
GitLab 15.2 で導入されました。
各ストリーミングデスティネーションは、イベントの真正性を検証するために使用できる一意の検証トークン(verificationToken
)を持っています。このトークンはオーナーが指定するか、イベントデスティネーションの作成時に自動的に生成され、変更することはできません。
各ストリーミングイベントは、X-Gitlab-Event-Streaming-Token
HTTPヘッダーに検証トークンを含み、ストリーミングデスティネーションを一覧表示するときに、デスティネーションの値と照合することができます。
前提条件:
- グループのオーナーロール。
ストリーミング配信先を一覧表示し、検証トークンを確認するには:
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]を選択します。
- 展開するストリームを選択します。
- 検証トークン入力を探します。
イベントフィルターの更新
GitLab 16.1で導入された監査イベントタイプの定義リストによるUIでのイベントタイプのフィルタリング。
グループに対してこの機能を有効にすると、宛先ごとにストリームされた監査イベントをフィルターすることをユーザーに許可することができます。フィルターなしでこの機能を有効にすると、デスティネーションはすべての監査イベントを受信します。
イベントタイプのフィルタが設定されているストリーミング宛先には、フィルタ済み({filter})ラベルがあります。
ストリーミングデスティネーションのイベントフィルタを更新するには
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- 展開するストリームを選択します。
- 監査イベントタイプによるフィルタ]ドロップダウンリストを見つけます。
- ドロップダウンリストを選択し、必要なイベントタイプを選択またはクリアします。
- 保存]を選択してイベントフィルタを更新します。
デフォルトのコンテンツタイプヘッダーを上書き
デフォルトでは、ストリーミング配信先はcontent-type
ヘッダとしてapplication/x-www-form-urlencoded
を使用します。 しかし、content-type
ヘッダを他のものに設定したい場合があります。例えば、application/json
です。
トップレベルグループのストリーミング宛先のcontent-type
ヘッダーのデフォルト値をオーバーライドするには、次のいずれかを使用します:
Google Cloud ログ取得先
GitLab 16.2 で導入されました。
トップレベルグループのGoogle Cloud Logging送信先を管理します。
前提条件
Google Cloud Loggingのストリーミング監査イベントを設定する前に、次のことが必要です:
- 適切な認証情報 と 権限を持つ Google ク ラ ウ ド 用のサービ ス ア カ ウ ン ト を作成 し ます。こ のア カ ウ ン ト は、 監査 ロ グ ス ト リ ーム認証を設定す る ために使用 し ます。詳細については、Google Cloud ドキュメントの「サービス アカウントの作成と管理」を参照してください。
- Google Cloud でのロギングを有効にするには、サービス アカウントのLogs Writerロールを有効にします。詳細については、IAM によるアクセス制御を参照してください。
- サービスアカウントのJSONキーを作成します。詳細は、「サービス アカウント キーの作成」を参照してください。
新しい Google Cloud Logging の宛先を追加します。
前提条件:
- トップレベルグループのオーナーロール。
Google Cloud Loggingのストリーミング先をトップレベルグループに追加するには、以下の手順に従います:
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- ストリーミング先を追加]を選択し、[Google Cloud Logging]を選択して、先を追加するセクションを表示します。
- 追加するGoogleプロジェクトID、Googleクライアントメール、ログID、Google秘密鍵を入力します。
- 追加]を選択して、新しいストリーミング先を追加します。
Google Cloud Logging デスティネーションのリスト
前提条件:
- トップレベルグループのオーナーロール。
トップレベルグループのGoogle Cloud Loggingストリーミング先をリストアップします:
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- Google Cloud Logging ストリームを選択して展開し、すべてのフィールドを表示します。
Google Cloud Logging の宛先を更新します。
前提条件:
- トップレベルグループのオーナーロール。
Google Cloud Loggingのストリーミング先をトップレベルグループに更新するには:
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- Google Cloud Logging ストリームを選択して展開します。
- 更新するGoogleプロジェクトID、Googleクライアントメール、ログID、Google秘密鍵を入力します。
- 保存]を選択して、ストリーミング先を更新します。
Google Cloud Logging ストリーミング先の削除
前提条件:
- トップレベルグループのオーナーロール。
Google Cloud Loggingのストリーミング先をトップレベルグループに削除するには、以下の手順に従います:
- 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
- セキュリティ > 監査イベントを選択します。
- メインエリアで[ストリーム]タブを選択します。
- Google Cloud Logging ストリームを選択して展開します。
- 削除先を選択します。
- ダイアログで削除先を選択して確定します。
インスタンスのストリーミング先
- GitLab 16.1 で
ff_external_audit_events
というフラグで導入されました。デフォルトでは無効になっています。- 機能フラグ
ff_external_audit_events
GitLab 16.2ではデフォルトで有効。
フラグ: セルフマネジメントのGitLabでは、デフォルトでこの機能が有効になっています。無効にするには、管理者がff_external_audit_events
という機能フラグを無効にします。GitLab.comでは、この機能は利用可能ですが、GitLab.com管理者のみが設定できます。この機能は本番環境でも使用可能です。
インスタンス全体のHTTPストリーミング先を管理。
新しいHTTPデスティネーションの追加
インスタンスに新しいHTTPストリーミング・デスティネーションを追加します。
前提条件:
- インスタンスの管理者アクセス。
インスタンスにストリーミング・デスティネーションを追加するには、以下の手順に従います:
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
- メインエリアで[ストリーム]タブを選択します。
- ストリーミング先を追加]を選択し、[HTTPエンドポイント]を選択して、先を追加するセクションを表示します。
- 名前]フィールドと[デスティネーションURL]フィールドに、デスティネーション名とURLを追加します。
- オプション。カスタムHTTPヘッダを追加するには、[ヘッダを追加]を選択して新しい名前と値のペアを作成し、値を入力します。名前と値のペアが必要な数だけ、この手順を繰り返します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
- Activeチェックボックスは機能しないので無視します。Active] チェックボックスへの機能追加の進捗については、イシュー367509を参照してください。
- Add headerを選択して、新しい名前と値のペアを作成します。名前と値のペアが必要なだけ、この手順を繰り返します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
- すべてのヘッダーを入力したら、[追加]を選択して新しいストリーミング先を追加します。
HTTPデスティネーションのリスト
前提条件:
- インスタンスの管理者アクセス。
インスタンスのストリーミング・デスティネーションを一覧表示します:
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
- メインエリアで[ストリーム]タブを選択します。
- ストリームを選択して展開し、すべてのカスタムHTTPヘッダーを表示します。
HTTP宛先の更新
前提条件:
- インスタンスの管理者アクセス。
インスタンス・ストリーミング・デスティネーションの名前を更新するには:
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
- メインエリアで[ストリーム]タブを選択します。
- 展開するストリームを選択します。
- 名前]フィールドに、更新するデスティネーション名を追加します。
- 保存]を選択して、ストリーミング先を更新します。
インスタンス・ストリーミング・デスティネーションのカスタムHTTPヘッダーを更新するには、次の手順に従います:
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
- メインエリアで[ストリーム]タブを選択します。
- 展開するストリームを選択します。
- カスタムHTTPヘッダーテーブルを探します。
- 更新したいヘッダーを見つけます。
- Activeチェックボックスは機能しないので無視します。Active] チェックボックスへの機能追加の進捗については、イシュー367509を参照してください。
- Add headerを選択して、新しい名前と値のペアを作成します。名前と値のペアを必要なだけ入力します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
- 保存]を選択して、ストリーミング先を更新します。
HTTP送信先の削除
インスタンス全体のストリーミング・デスティネーションを削除します。最後のデスティネーションが正常に削除されると、インスタンスのストリーミングは無効になります。
前提条件:
- インスタンスの管理者アクセス。
インスタンスのストリーミング先を削除するには、以下の手順に従います:
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
- メインエリアで[ストリーム]タブを選択します。
- 展開するストリームを選択します。
- 削除先を選択します。
- ダイアログで削除先を選択して確定します。
ストリーミング先のカスタムHTTPヘッダのみを削除するには
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
- メインエリアで[ストリーム]タブを選択します。
- 項目の右にある「編集」({pencil})をクリックします。
- カスタムHTTPヘッダーテーブルを探します。
- 削除したいヘッダーを探します。
- ヘッダーの右側で、削除({remove}) を選択します。
- 保存]を選択して、ストリーミング先を更新します。
イベントの信頼性の確認
- GitLab 16.1 で
ff_external_audit_events
というフラグで導入されました。デフォルトでは無効になっています。- 機能フラグ
ff_external_audit_events
GitLab 16.2ではデフォルトで有効。
フラグ: セルフマネジメントのGitLabでは、デフォルトでこの機能は有効になっています。無効にするには、管理者がff_external_audit_events
という機能フラグを無効にします。GitLab.comでは、この機能は利用可能ですが、GitLab.com管理者のみが設定できます。この機能は本番環境でも使用可能です。
各ストリーミングデスティネーションは、イベントの真正性を検証するために使用できる一意の検証トークン(verificationToken
)を持っています。このトークンはオーナーが指定するか、イベントデスティネーションの作成時に自動的に生成され、変更することはできません。
各ストリーミングイベントは、X-Gitlab-Event-Streaming-Token
HTTPヘッダーに検証トークンを含み、ストリーミングデスティネーションを一覧表示するときに、デスティネーションの値と照合することができます。
前提条件:
- インスタンスの管理者アクセス。
インスタンスのストリーミング・デスティネーションを一覧表示し、検証トークンを確認するには、以下の手順に従います:
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
- メインエリアで[ストリーム]タブを選択します。
- 各アイテムの右側にある検証トークンを表示します。
イベントフィルターの更新
GitLab 16.3で導入された監査イベントタイプの定義リストによるUIでのイベントタイプのフィルタリング。
この機能を有効にすると、ストリームされた監査イベントを宛先ごとにフィルターすることをユーザーに許可することができます。フィルターなしでこの機能を有効にすると、デスティネーションはすべての監査イベントを受信します。
イベントタイプのフィルタが設定されているストリーミング宛先には、フィルタ済み({filter})ラベルがあります。
ストリーミングデスティネーションのイベントフィルタを更新するには
- 左のサイドバーで、Search を選択するか、次のページに進んでください。
- Admin Areaを選択します。
- 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
- メインエリアで[ストリーム]タブを選択します。
- 展開するストリームを選択します。
- 監査イベントタイプによるフィルタ]ドロップダウンリストを見つけます。
- ドロップダウンリストを選択し、必要なイベントタイプを選択またはクリアします。
- 保存]を選択してイベントフィルタを更新します。
デフォルトのコンテンツタイプヘッダーを上書き
デフォルトでは、ストリーミング配信先はcontent-type
ヘッダとしてapplication/x-www-form-urlencoded
を使用します。 しかし、content-type
ヘッダを他のものに設定したい場合があります。例えば、application/json
です。
インスタンスストリーミングデスティネーションのcontent-type
ヘッダーのデフォルト値をオーバーライドするには、次のいずれかを使用します:
ペイロードスキーマ
GitLab 15.3で監査イベントストリーミングスキーマのドキュメントが導入されました。
ストリーミングされた監査イベントは、レスポンスの本文に予測可能なスキーマを持ちます。
項目 | 説明 | 備考 |
---|---|---|
author_id | イベントをトリガーしたユーザーのユーザーID | |
author_name | イベントをトリガーした作成者の可読性名前 | 作成者が存在しない場合に有用です。 |
created_at | イベント発生時のタイムスタンプ | |
details | 追加のメタデータを含むJSONオブジェクト | 定義されたスキーマはありませんが、イベントに関する追加情報を含むことがよくあります。 |
entity_id | 監査イベントのエンティティのID。 | |
entity_path | 監査イベントの影響を受けるエンティティのフルパス | |
entity_type | エンティティのタイプを文字列で表します。 | 使用可能な値には、User 、Group 、Key があります。このリストは完全ではありません。 |
event_type | 監査イベントのタイプを文字列で表します。 | |
id | 監査イベントの一意な識別子。 | 必要に応じて重複排除に使用可能 |
ip_address | イベントのトリガーに使用されたホストのIPアドレス | |
target_details | ターゲットに関するその他の詳細 | |
target_id | 監査イベントのターゲットのID | |
target_type | 対象のタイプを表す文字列 |
JSONペイロードスキーマ
{
"properties": {
"id": {
"type": "string"
},
"author_id": {
"type": "integer"
},
"author_name": {
"type": "string"
},
"details": {},
"ip_address": {
"type": "string"
},
"entity_id": {
"type": "integer"
},
"entity_path": {
"type": "string"
},
"entity_type": {
"type": "string"
},
"event_type": {
"type": "string"
},
"target_id": {
"type": "integer"
},
"target_type": {
"type": "string"
},
"target_details": {
"type": "string"
},
},
"type": "object"
}