イベントストリーミングの監査

ユーザーは、トップレベルのグループやインスタンスにストリーミング先を設定し、グループ、サブグループ、プロジェクトに関する全ての監査イベントを、構造化されたJSONとして受け取ることができます。

トップレベルのグループオーナーとインスタンス管理者は、サードパーティのシステムで監査ログを管理できます。構造化JSONデータを受信できるサービスであれば、ストリーミング先として使用できます。

各ストリーミング先には、各ストリーミングイベントに最大20個のカスタムHTTPヘッダーを含めることができます。

GitLabは一つのイベントを同じ宛先に複数回ストリーミングすることができます。受信データを重複排除するには、ペイロードのid キーを使用してください。

caution
ストリーミング先は、機密情報を含む可能性のあるすべての監査イベントデータを受け取ります。ストリーミング先が信頼できることを確認してください。

トップレベルのグループストリーミングデスティネーション

トップレベルグループのストリーミング配信先を管理します。

HTTP配信先

トップレベルグループのHTTPストリーミング先を管理します。

新しいHTTPデスティネーションの追加

新しいHTTPストリーミングデスティネーションをトップレベルグループに追加します。

前提条件:

  • トップレベルグループのオーナーロール。

トップレベルグループにストリーミングデスティネーションを追加する手順

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. ストリーミング先を追加]を選択し、[HTTPエンドポイント]を選択して、先を追加するセクションを表示します。
  5. 名前]フィールドと[デスティネーションURL]フィールドに、デスティネーション名とURLを追加します。
  6. オプション。カスタムHTTPヘッダー]テーブルを探します。
  7. Activeチェックボックスは機能しないので無視します。Active] チェックボックスへの機能追加の進捗については、イシュー367509を参照してください。
  8. Add headerを選択して、新しい名前と値のペアを作成します。名前と値のペアを必要なだけ入力します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
  9. すべてのヘッダーを入力したら、[追加]を選択して新しいストリーミング先を追加します。

HTTPデスティネーションのリスト

前提条件:

  • グループのオーナーロール。

トップレベルグループのストリーミング先を一覧表示します:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. ストリームを選択して展開し、すべてのカスタムHTTPヘッダーを表示します。

HTTP宛先の更新

前提条件:

  • グループのオーナーロール。

ストリーミング先の名前を更新するには

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. 展開するストリームを選択します。
  5. 名前]フィールドに、更新するデスティネーション名を追加します。
  6. 保存]を選択して、ストリーミング先を更新します。

ストリーミング先のカスタムHTTPヘッダーを更新するには

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. 展開するストリームを選択します。
  5. カスタムHTTPヘッダーテーブルを探します。
  6. 更新したいヘッダーを見つけます。
  7. Activeチェックボックスは機能しないので無視します。Active] チェックボックスへの機能追加の進捗については、イシュー367509を参照してください。
  8. Add headerを選択して、新しい名前と値のペアを作成します。名前と値のペアを必要なだけ入力します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
  9. 保存]を選択して、ストリーミング先を更新します。

HTTP送信先の削除

トップレベルグループのストリーム配信先を削除します。最後の宛先の削除に成功すると、トップレベルグループのストリーミングが無効になります。

前提条件:

  • グループのオーナーロール。

ストリーミング配信先を削除するには

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. 展開するストリームを選択します。
  5. 削除先を選択します。
  6. ダイアログで削除先を選択して確定します。

ストリーミング先のカスタムHTTPヘッダのみを削除するには

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. 展開するストリームを選択します。
  5. カスタムHTTPヘッダーテーブルを探します。
  6. 削除したいヘッダーを探します。
  7. ヘッダーの右側で、削除({remove}) を選択します。
  8. 保存]を選択して、ストリーミング先を更新します。

イベントの信頼性の確認

GitLab 15.2 で導入されました

各ストリーミングデスティネーションは、イベントの真正性を検証するために使用できる一意の検証トークン(verificationToken)を持っています。このトークンはオーナーが指定するか、イベントデスティネーションの作成時に自動的に生成され、変更することはできません。

各ストリーミングイベントは、X-Gitlab-Event-Streaming-Token HTTPヘッダーに検証トークンを含み、ストリーミングデスティネーションを一覧表示するときに、デスティネーションの値と照合することができます。

前提条件:

  • グループのオーナーロール。

ストリーミング配信先を一覧表示し、検証トークンを確認するには:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]を選択します。
  4. 展開するストリームを選択します。
  5. 検証トークン入力を探します。

イベントフィルターの更新

GitLab 16.1で導入された監査イベントタイプの定義リストによるUIでのイベントタイプのフィルタリング。

グループに対してこの機能を有効にすると、宛先ごとにストリームされた監査イベントをフィルターすることをユーザーに許可することができます。フィルターなしでこの機能を有効にすると、デスティネーションはすべての監査イベントを受信します。

イベントタイプのフィルタが設定されているストリーミング宛先には、フィルタ済み({filter})ラベルがあります。

ストリーミングデスティネーションのイベントフィルタを更新するには

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. 展開するストリームを選択します。
  5. 監査イベントタイプによるフィルタ]ドロップダウンリストを見つけます。
  6. ドロップダウンリストを選択し、必要なイベントタイプを選択またはクリアします。
  7. 保存]を選択してイベントフィルタを更新します。

デフォルトのコンテンツタイプヘッダーを上書き

デフォルトでは、ストリーミング配信先はcontent-type ヘッダとしてapplication/x-www-form-urlencodedを使用します。 しかし、content-type ヘッダを他のものに設定したい場合があります。例えば、application/jsonです。

トップレベルグループのストリーミング宛先のcontent-type ヘッダーのデフォルト値をオーバーライドするには、次のいずれかを使用します:

Google Cloud ログ取得先

GitLab 16.2 で導入されました

トップレベルグループのGoogle Cloud Logging送信先を管理します。

前提条件

Google Cloud Loggingのストリーミング監査イベントを設定する前に、次のことが必要です:

  1. 適切な認証情報 と 権限を持つ Google ク ラ ウ ド 用のサービ ス ア カ ウ ン ト を作成 し ます。こ のア カ ウ ン ト は、 監査 ロ グ ス ト リ ーム認証を設定す る ために使用 し ます。詳細については、Google Cloud ドキュメントの「サービス アカウントの作成と管理」を参照してください。
  2. Google Cloud でのロギングを有効にするには、サービス アカウントのLogs Writerロールを有効にします。詳細については、IAM によるアクセス制御を参照してください。
  3. サービスアカウントのJSONキーを作成します。詳細は、「サービス アカウント キーの作成」を参照してください。

新しい Google Cloud Logging の宛先を追加します。

前提条件:

  • トップレベルグループのオーナーロール。

Google Cloud Loggingのストリーミング先をトップレベルグループに追加するには、以下の手順に従います:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. ストリーミング先を追加]を選択し、[Google Cloud Logging]を選択して、先を追加するセクションを表示します。
  5. 追加するGoogleプロジェクトID、Googleクライアントメール、ログID、Google秘密鍵を入力します。
  6. 追加]を選択して、新しいストリーミング先を追加します。

Google Cloud Logging デスティネーションのリスト

前提条件:

  • トップレベルグループのオーナーロール。

トップレベルグループのGoogle Cloud Loggingストリーミング先をリストアップします:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. Google Cloud Logging ストリームを選択して展開し、すべてのフィールドを表示します。

Google Cloud Logging の宛先を更新します。

前提条件:

  • トップレベルグループのオーナーロール。

Google Cloud Loggingのストリーミング先をトップレベルグループに更新するには:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. Google Cloud Logging ストリームを選択して展開します。
  5. 更新するGoogleプロジェクトID、Googleクライアントメール、ログID、Google秘密鍵を入力します。
  6. 保存]を選択して、ストリーミング先を更新します。

Google Cloud Logging ストリーミング先の削除

前提条件:

  • トップレベルグループのオーナーロール。

Google Cloud Loggingのストリーミング先をトップレベルグループに削除するには、以下の手順に従います:

  1. 左のサイドバーで、Search(検索)を選択するか、Go to(移動)を選択してグループを探します。
  2. セキュリティ > 監査イベントを選択します。
  3. メインエリアで[ストリーム]タブを選択します。
  4. Google Cloud Logging ストリームを選択して展開します。
  5. 削除先を選択します。
  6. ダイアログで削除先を選択して確定します。

インスタンスのストリーミング先

フラグ: セルフマネジメントのGitLabでは、デフォルトでこの機能が有効になっています。無効にするには、管理者がff_external_audit_eventsという機能フラグを無効にします。GitLab.comでは、この機能は利用可能ですが、GitLab.com管理者のみが設定できます。この機能は本番環境でも使用可能です。

インスタンス全体のHTTPストリーミング先を管理。

新しいHTTPデスティネーションの追加

インスタンスに新しいHTTPストリーミング・デスティネーションを追加します。

前提条件:

  • インスタンスの管理者アクセス。

インスタンスにストリーミング・デスティネーションを追加するには、以下の手順に従います:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
  4. メインエリアで[ストリーム]タブを選択します。
  5. ストリーミング先を追加]を選択し、[HTTPエンドポイント]を選択して、先を追加するセクションを表示します。
  6. 名前]フィールドと[デスティネーションURL]フィールドに、デスティネーション名とURLを追加します。
  7. オプション。カスタムHTTPヘッダを追加するには、[ヘッダを追加]を選択して新しい名前と値のペアを作成し、値を入力します。名前と値のペアが必要な数だけ、この手順を繰り返します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
  8. Activeチェックボックスは機能しないので無視します。Active] チェックボックスへの機能追加の進捗については、イシュー367509を参照してください。
  9. Add headerを選択して、新しい名前と値のペアを作成します。名前と値のペアが必要なだけ、この手順を繰り返します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
  10. すべてのヘッダーを入力したら、[追加]を選択して新しいストリーミング先を追加します。

HTTPデスティネーションのリスト

前提条件:

  • インスタンスの管理者アクセス。

インスタンスのストリーミング・デスティネーションを一覧表示します:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
  4. メインエリアで[ストリーム]タブを選択します。
  5. ストリームを選択して展開し、すべてのカスタムHTTPヘッダーを表示します。

HTTP宛先の更新

前提条件:

  • インスタンスの管理者アクセス。

インスタンス・ストリーミング・デスティネーションの名前を更新するには:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
  4. メインエリアで[ストリーム]タブを選択します。
  5. 展開するストリームを選択します。
  6. 名前]フィールドに、更新するデスティネーション名を追加します。
  7. 保存]を選択して、ストリーミング先を更新します。

インスタンス・ストリーミング・デスティネーションのカスタムHTTPヘッダーを更新するには、次の手順に従います:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
  4. メインエリアで[ストリーム]タブを選択します。
  5. 展開するストリームを選択します。
  6. カスタムHTTPヘッダーテーブルを探します。
  7. 更新したいヘッダーを見つけます。
  8. Activeチェックボックスは機能しないので無視します。Active] チェックボックスへの機能追加の進捗については、イシュー367509を参照してください。
  9. Add headerを選択して、新しい名前と値のペアを作成します。名前と値のペアを必要なだけ入力します。ストリーミング配信先ごとに、最大20個のヘッダーを追加できます。
  10. 保存]を選択して、ストリーミング先を更新します。

HTTP送信先の削除

インスタンス全体のストリーミング・デスティネーションを削除します。最後のデスティネーションが正常に削除されると、インスタンスのストリーミングは無効になります。

前提条件:

  • インスタンスの管理者アクセス。

インスタンスのストリーミング先を削除するには、以下の手順に従います:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
  4. メインエリアで[ストリーム]タブを選択します。
  5. 展開するストリームを選択します。
  6. 削除先を選択します。
  7. ダイアログで削除先を選択して確定します。

ストリーミング先のカスタムHTTPヘッダのみを削除するには

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
  4. メインエリアで[ストリーム]タブを選択します。
  5. 項目の右にある「編集({pencil})をクリックします。
  6. カスタムHTTPヘッダーテーブルを探します。
  7. 削除したいヘッダーを探します。
  8. ヘッダーの右側で、削除({remove}) を選択します。
  9. 保存]を選択して、ストリーミング先を更新します。

イベントの信頼性の確認

フラグ: セルフマネジメントのGitLabでは、デフォルトでこの機能は有効になっています。無効にするには、管理者がff_external_audit_eventsという機能フラグを無効にします。GitLab.comでは、この機能は利用可能ですが、GitLab.com管理者のみが設定できます。この機能は本番環境でも使用可能です。

各ストリーミングデスティネーションは、イベントの真正性を検証するために使用できる一意の検証トークン(verificationToken)を持っています。このトークンはオーナーが指定するか、イベントデスティネーションの作成時に自動的に生成され、変更することはできません。

各ストリーミングイベントは、X-Gitlab-Event-Streaming-Token HTTPヘッダーに検証トークンを含み、ストリーミングデスティネーションを一覧表示するときに、デスティネーションの値と照合することができます。

前提条件:

  • インスタンスの管理者アクセス。

インスタンスのストリーミング・デスティネーションを一覧表示し、検証トークンを確認するには、以下の手順に従います:

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
  4. メインエリアで[ストリーム]タブを選択します。
  5. 各アイテムの右側にある検証トークンを表示します。

イベントフィルターの更新

GitLab 16.3で導入された監査イベントタイプの定義リストによるUIでのイベントタイプのフィルタリング。

この機能を有効にすると、ストリームされた監査イベントを宛先ごとにフィルターすることをユーザーに許可することができます。フィルターなしでこの機能を有効にすると、デスティネーションはすべての監査イベントを受信します。

イベントタイプのフィルタが設定されているストリーミング宛先には、フィルタ済み({filter})ラベルがあります。

ストリーミングデスティネーションのイベントフィルタを更新するには

  1. 左のサイドバーで、Search を選択するか、次のページに進んでください。
  2. Admin Areaを選択します。
  3. 左サイドバーで、[モニタリング] > [監査イベント]を選択します。
  4. メインエリアで[ストリーム]タブを選択します。
  5. 展開するストリームを選択します。
  6. 監査イベントタイプによるフィルタ]ドロップダウンリストを見つけます。
  7. ドロップダウンリストを選択し、必要なイベントタイプを選択またはクリアします。
  8. 保存]を選択してイベントフィルタを更新します。

デフォルトのコンテンツタイプヘッダーを上書き

デフォルトでは、ストリーミング配信先は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エンティティのタイプを文字列で表します。使用可能な値には、UserGroupKey があります。このリストは完全ではありません。
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"
}