Slack 監査ログを収集する

以下でサポートされています。

このドキュメントでは、Google Cloud Run 関数または AWS Lambda を使用した Amazon S3 のいずれかを使用して、Slack 監査ログを Google Security Operations に取り込む方法について説明します。

始める前に

次の前提条件を満たしていることを確認してください。

  • Google SecOps インスタンス
  • 組織オーナーまたは管理者権限を持つ Slack Enterprise Grid プラン
  • 次のいずれかに対する特権アクセス権:
    • Google Cloud(オプション 1: Cloud Run functions と Cloud Scheduler)
    • AWS(オプション 2: S3、IAM、Lambda、EventBridge)

Slack 監査ログの収集の前提条件(アプリ ID、OAuth トークン、組織 ID)

Slack Audit Logs API には、auditlogs:read スコープのユーザー OAuth トークンが必要です。このトークンは、ワークスペース レベルではなく、Enterprise Grid 組織レベルでアプリをインストールして取得する必要があります。

監査ログ用の Slack アプリを作成する

  1. Enterprise Grid 組織のオーナーまたは管理者アカウントで Slack 管理コンソールにログインします。
  2. https://api.slack.com/apps にアクセスし、[Create New App > From scratch] をクリックします。
  3. 次の構成の詳細を入力します。
    • アプリ名: わかりやすい名前を入力します(例: Google SecOps Audit Integration)。
    • アプリを開発するワークスペースを選択する: 開発用 Slack ワークスペース(組織内の任意のワークスペース)を選択します。
  4. [アプリを作成] をクリックします。

OAuth スコープを構成する

  1. 左側のサイドバーで [OAuth & Permissions] に移動します。
  2. [スコープ] セクションに移動します。
  3. [User Token Scopes]([Bot Token Scopes] ではない)で、[Add an OAuth Scope] をクリックします。
  4. スコープ auditlogs:read を追加します。

一般公開を有効にする

  1. 左側のサイドバーで [Manage Distribution] に移動します。
  2. [Share Your App with Other Workspaces] で、4 つのセクションすべてに緑色のチェックマークが付いていることを確認します。
    • ハードコードされた情報を削除する
    • 一般公開を有効にする
    • リダイレクト URL を設定する
    • OAuth スコープを追加する
  3. [一般公開の配信を有効にする] をクリックします。

Enterprise Grid 組織にアプリをインストールする

  1. 左側のサイドバーで [OAuth & Permissions] に移動します。
  2. [Install to Organization]([Install to Workspace] ではない)をクリックします。

重要: インストール画面の右上にあるプルダウンで、個々のワークスペースではなく、Enterprise 組織にインストールしていることを確認します。

  1. リクエストされた権限を確認し、[許可] をクリックします。
  2. 承認が完了すると、[OAuth & Permissions] ページにリダイレクトされます。

認証情報を取得する

  1. [OAuth Tokens for Your Workspace] で、[User OAuth Token] を見つけます。
  2. xoxp- で始まるトークン(例: xoxp-1234567890-0987654321-1234567890-abc123def456)をコピーして安全に保存します。

  3. 組織 ID をメモします。

    • Slack 管理コンソールに移動します。
    • [設定と権限]> [組織の設定] に移動します。
    • 組織 ID をコピーします。

オプション 1: Google Cloud Run functions を使用して Slack 監査ログのエクスポートを構成する

このオプションでは、Google Cloud Run functions と Cloud Scheduler を使用して Slack Audit Logs を収集し、Google SecOps に直接取り込みます。

ディレクトリの設定

  1. Cloud Run 関数のデプロイ用にローカルマシンに新しいディレクトリを作成します。
  2. Chronicle ingestion-scripts GitHub リポジトリから次のファイルをダウンロードします。
    • slack フォルダから、以下をダウンロードします。
      • .env.yml
      • main.py
      • requirements.txt
    • リポジトリのルートから、common ディレクトリ全体とそのすべてのファイルをダウンロードします。
      • common/__init__.py
      • common/auth.py
      • common/env_constants.py
      • common/ingest.py
      • common/status.py
      • common/utils.py
  3. ダウンロードしたすべてのファイルをデプロイ ディレクトリに配置します。
  • ディレクトリ構造は次のようになります。

    deployment_directory/
    ├─common/
    │ ├─__init__.py
    │ ├─auth.py
    │ ├─env_constants.py
    │ ├─ingest.py
    │ ├─status.py
    │ └─utils.py
    ├─.env.yml
    ├─main.py
    └─requirements.txt
    

Google Secret Manager でシークレットを作成する

  1. Google Cloud コンソールで、[セキュリティ> Secret Manager] に移動します。
  2. [シークレットの作成] をクリックします。
  3. Chronicle サービス アカウントについて、次の構成の詳細を指定します。
    • 名前: 「chronicle-service-account」と入力します。
    • シークレット値: Google SecOps の取り込み認証 JSON ファイルの内容を貼り付けます。
  4. [シークレットの作成] をクリックします。
  5. シークレット リソース名projects/<PROJECT_ID>/secrets/chronicle-service-account/versions/latest の形式でコピーします。
  6. [シークレットを作成] をもう一度クリックして、2 つ目のシークレットを作成します。
  7. Slack トークンの構成の詳細を次のとおりに入力します。
    • 名前: 「slack-admin-token」と入力します。
    • シークレット値: Slack ユーザー OAuth トークン(xoxp- で始まる)を貼り付けます。
  8. [シークレットの作成] をクリックします。
  9. シークレット リソース名projects/<PROJECT_ID>/secrets/slack-admin-token/versions/latest の形式でコピーします。

必要なランタイム環境変数を設定する

  1. デプロイ ディレクトリの .env.yml ファイルを開きます。
  2. 環境変数を実際の値で構成します。

    CHRONICLE_CUSTOMER_ID: "<your-chronicle-customer-id>"
    CHRONICLE_REGION: us
    CHRONICLE_SERVICE_ACCOUNT: "projects/<PROJECT_ID>/secrets/chronicle-service-account/versions/latest"
    CHRONICLE_NAMESPACE: ""
    POLL_INTERVAL: "5"
    SLACK_ADMIN_TOKEN: "projects/<PROJECT_ID>/secrets/slack-admin-token/versions/latest"
    
    • 次のように置き換えます。
      • <your-chronicle-customer-id>: Google SecOps のお客様 ID。
      • <PROJECT_ID>: 実際の Google Cloud プロジェクト ID。
      • CHRONICLE_REGION: Google SecOps リージョンに設定します。有効な値: usasia-northeast1asia-south1asia-southeast1australia-southeast1europeeurope-west2europe-west3europe-west6europe-west9europe-west12me-central1me-central2me-west1northamerica-northeast2southamerica-east1
      • POLL_INTERVAL: 関数が実行される頻度(分単位)。この期間は、Cloud Scheduler ジョブの間隔と同じにする必要があります。
  3. .env.yml ファイルを保存します。

Cloud Run 関数のデプロイ

  1. Google Cloud コンソールでターミナルまたは Cloud Shell を開きます。
  2. デプロイ ディレクトリに移動します。

    cd /path/to/deployment_directory
    
  3. 次のコマンドを実行して、Cloud Run 関数をデプロイします。

    gcloud functions deploy slack-audit-to-chronicle \
      --entry-point main \
      --trigger-http \
      --runtime python39 \
      --env-vars-file .env.yml \
      --timeout 300s \
      --memory 512MB \
      --service-account <SERVICE_ACCOUNT_EMAIL>
    
    • <SERVICE_ACCOUNT_EMAIL> は、Cloud Run 関数で使用するサービス アカウントのメールアドレスに置き換えます。

  4. デプロイが完了するまで待ちます。

  5. デプロイが完了したら、出力から関数 URL をメモします。

Cloud Scheduler を設定する

  1. Google Cloud コンソールで、[Cloud Scheduler] > [ジョブを作成] に移動します。
  2. 次の構成の詳細を入力します。
    • 名前: 「slack-audit-scheduler」と入力します。
    • リージョン: Cloud Run functions の関数をデプロイしたリージョンと同じリージョンを選択します。
    • 頻度: */5 * * * * と入力します(5 分ごとに実行され、POLL_INTERVAL 値と一致します)。
    • タイムゾーン: [UTC] を選択します。
    • ターゲット タイプ: [HTTP] を選択します。
    • URL: デプロイ出力から Cloud Run 関数の URL を入力します。
    • HTTP メソッド: [POST] を選択します。
    • Auth ヘッダー: [OIDC トークンを追加] を選択します。
    • サービス アカウント: Cloud Run 関数で使用したサービス アカウントと同じものを選択します。
  3. [作成] をクリックします。

オプション 2: AWS S3 を使用して Slack 監査ログのエクスポートを構成する

このオプションでは、AWS Lambda を使用して Slack 監査ログを収集し、S3 に保存してから、ログを取り込むように Google SecOps フィードを構成します。

Google SecOps 用に AWS S3 バケットと IAM を構成する

  1. バケットの作成のユーザーガイドに沿って、Amazon S3 バケットを作成します。
  2. 後で参照できるように、バケットの名前リージョンを保存します(例: slack-audit-logs)。
  3. [セキュリティ認証情報] タブを選択します。
  4. [アクセスキー] セクションで [アクセスキーを作成] をクリックします。
  5. [ユースケース] として [サードパーティ サービス] を選択します。
  6. [次へ] をクリックします。
  7. 省略可: 説明タグを追加します。
  8. [アクセスキーを作成] をクリックします。
  9. [CSV ファイルをダウンロード] をクリックして、[アクセスキー] と [シークレット アクセスキー] を保存し、後で使用できるようにします。
  10. [完了] をクリックします。
  11. [権限] タブを選択します。
  12. [権限ポリシー] セクションで、[権限を追加] をクリックします。
  13. [権限を追加] を選択します。
  14. [ポリシーを直接アタッチする] を選択します。
  15. AmazonS3FullAccess ポリシーを検索して選択します。
  16. [次へ] をクリックします。
  17. [権限を追加] をクリックします。

S3 アップロードの IAM ポリシーとロールを構成する

  1. AWS コンソールで、[IAM] > [ポリシー] > [ポリシーの作成] > [JSON] タブに移動します。
  2. 次のポリシーをコピーして貼り付けます。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Sid": "AllowPutObjects",
          "Effect": "Allow",
          "Action": "s3:PutObject",
          "Resource": "arn:aws:s3:::slack-audit-logs/*"
        },
        {
          "Sid": "AllowGetStateObject",
          "Effect": "Allow",
          "Action": "s3:GetObject",
          "Resource": "arn:aws:s3:::slack-audit-logs/slack/audit/state.json"
        }
      ]
    }
    
    • 別のバケット名を入力した場合は、slack-audit-logs を置き換えます。
  3. [次へ] をクリックします。

  4. ポリシー名「SlackAuditS3Policy」を入力します。

  5. [ポリシーを作成] をクリックします。

  6. [IAM] > [ロール] > [ロールの作成] > [AWS サービス] > [Lambda] に移動します。

  7. 新しく作成したポリシー SlackAuditS3Policy を関連付けます。

  8. ロールに「SlackAuditToS3Role」という名前を付けて、[ロールを作成] をクリックします。

Lambda 関数を作成する

  1. AWS コンソールで、[Lambda] > [Functions] > [Create function] に移動します。
  2. [Author from scratch] をクリックします。
  3. 次の構成情報を提供してください。

    設定
    名前 slack_audit_to_s3
    ランタイム Python 3.13
    アーキテクチャ x86_64
    実行ロール SlackAuditToS3Role
  4. [関数を作成] をクリックします。

  5. 関数を作成したら、[コード] タブを開き、スタブを削除して次のコード(slack_audit_to_s3.py)を入力します。

    #!/usr/bin/env python3
    # Lambda: Pull Slack Audit Logs (Enterprise Grid) to S3 (no transform)
    
    import os, json, time, urllib.parse
    from urllib.request import Request, urlopen
    from urllib.error import HTTPError, URLError
    import boto3
    
    BASE_URL = "https://api.slack.com/audit/v1/logs"
    
    TOKEN        = os.environ["SLACK_AUDIT_TOKEN"]  # org-level user token with auditlogs:read
    BUCKET       = os.environ["S3_BUCKET"]
    PREFIX       = os.environ.get("S3_PREFIX", "slack/audit/")
    STATE_KEY    = os.environ.get("STATE_KEY", "slack/audit/state.json")
    LIMIT        = int(os.environ.get("LIMIT", "200"))             # Slack recommends <= 200
    MAX_PAGES    = int(os.environ.get("MAX_PAGES", "20"))
    LOOKBACK_SEC = int(os.environ.get("LOOKBACK_SECONDS", "3600")) # First-run window
    HTTP_TIMEOUT = int(os.environ.get("HTTP_TIMEOUT", "60"))
    HTTP_RETRIES = int(os.environ.get("HTTP_RETRIES", "3"))
    RETRY_AFTER_DEFAULT = int(os.environ.get("RETRY_AFTER_DEFAULT", "2"))
    # Optional server-side filters (comma-separated "action" values), empty means no filter
    ACTIONS      = os.environ.get("ACTIONS", "").strip()
    
    s3 = boto3.client("s3")
    
    def _get_state() -> dict:
        try:
            obj = s3.get_object(Bucket=BUCKET, Key=STATE_KEY)
            st = json.loads(obj["Body"].read() or b"{}")
            return {"cursor": st.get("cursor")}
        except Exception:
            return {"cursor": None}
    
    def _put_state(state: dict) -> None:
        body = json.dumps(state, separators=(",", ":")).encode("utf-8")
        s3.put_object(Bucket=BUCKET, Key=STATE_KEY, Body=body, ContentType="application/json")
    
    def _http_get(params: dict) -> dict:
        qs  = urllib.parse.urlencode(params, doseq=True)
        url = f"{BASE_URL}?{qs}" if qs else BASE_URL
        req = Request(url, method="GET")
        req.add_header("Authorization", f"Bearer {TOKEN}")
        req.add_header("Accept", "application/json")
    
        attempt = 0
        while True:
            try:
                with urlopen(req, timeout=HTTP_TIMEOUT) as r:
                    return json.loads(r.read().decode("utf-8"))
            except HTTPError as e:
                # Respect Retry-After on 429/5xx
                if e.code in (429, 500, 502, 503, 504) and attempt < HTTP_RETRIES:
                    retry_after = 0
                    try:
                        retry_after = int(e.headers.get("Retry-After", RETRY_AFTER_DEFAULT))
                    except Exception:
                        retry_after = RETRY_AFTER_DEFAULT
                    time.sleep(max(1, retry_after))
                    attempt += 1
                    continue
                # Re-raise other HTTP errors
                raise
            except URLError:
                if attempt < HTTP_RETRIES:
                    time.sleep(RETRY_AFTER_DEFAULT)
                    attempt += 1
                    continue
                raise
    
    def _write_page(payload: dict, page_idx: int) -> str:
        ts  = time.strftime("%Y/%m/%d/%H%M%S", time.gmtime())
        key = f"{PREFIX}{ts}-slack-audit-p{page_idx:05d}.json"
        body = json.dumps(payload, separators=(",", ":")).encode("utf-8")
        s3.put_object(Bucket=BUCKET, Key=key, Body=body, ContentType="application/json")
        return key
    
    def lambda_handler(event=None, context=None):
        state  = _get_state()
        cursor = state.get("cursor")
    
        params = {"limit": LIMIT}
        if ACTIONS:
            params["action"] = [a.strip() for a in ACTIONS.split(",") if a.strip()]
        if cursor:
            params["cursor"] = cursor
        else:
            # First run (or reset): fetch a recent window by time
            params["oldest"] = int(time.time()) - LOOKBACK_SEC
    
        pages = 0
        total = 0
        last_cursor = None
    
        while pages < MAX_PAGES:
            data = _http_get(params)
            _write_page(data, pages)
    
            entries = data.get("entries") or []
            total += len(entries)
    
            # Cursor for next page
            meta = data.get("response_metadata") or {}
            next_cursor = meta.get("next_cursor") or data.get("next_cursor")
            if next_cursor:
                params = {"limit": LIMIT, "cursor": next_cursor}
                if ACTIONS:
                    params["action"] = [a.strip() for a in ACTIONS.split(",") if a.strip()]
                last_cursor = next_cursor
                pages += 1
                continue
            break
    
        if last_cursor:
            _put_state({"cursor": last_cursor})
    
        return {"ok": True, "pages": pages + (1 if total or last_cursor else 0), "entries": total, "cursor": last_cursor}
    
    if __name__ == "__main__":
        print(lambda_handler())
    
  6. [構成> 環境変数 > 編集 > 環境変数を追加] に移動します。

  7. 次の環境変数を入力し、実際の値に置き換えます。

    キー 値の例
    S3_BUCKET slack-audit-logs
    S3_PREFIX slack/audit/
    STATE_KEY slack/audit/state.json
    SLACK_AUDIT_TOKEN xoxp-***auditlogs:read を含む組織レベルのユーザー トークン)
    LIMIT 200
    MAX_PAGES 20
    LOOKBACK_SECONDS 3600
    HTTP_TIMEOUT 60
    HTTP_RETRIES 3
    RETRY_AFTER_DEFAULT 2
    ACTIONS (省略可、CSV) user_login,app_installed
  8. [保存] をクリックします。

  9. [CONFIGURATION] タブを選択します。

  10. [全般設定] パネルで、[編集] をクリックします。

  11. [Timeout] を [5 minutes (300 seconds)] に変更し、[Save] をクリックします。

EventBridge スケジュールを作成する

  1. [Amazon EventBridge] > [Scheduler] > [スケジュールの作成] に移動します。
  2. 次の構成の詳細を入力します。
    • 名前: 「slack-audit-1h」と入力します。
    • 定期的なスケジュール: [レートベースのスケジュール] を選択します。
    • レート式: 「1 時間」と入力します。
    • 柔軟な時間枠: [オフ] を選択します。
  3. [次へ] をクリックします。
  4. [ターゲット] を選択します。
    • ターゲット API: [AWS Lambda 呼び出し] を選択します。
    • Lambda 関数: slack_audit_to_s3 を選択します。
  5. [次へ] をクリックします。
  6. [次へ] をクリックします(オプションの設定はスキップします)。
  7. 確認して [スケジュールを作成] をクリックします。

省略可: Google SecOps 用の読み取り専用の IAM ユーザーと鍵を作成する

  1. AWS コンソール > IAM > ユーザー > ユーザーを追加 に移動します。
  2. [ユーザーを追加] をクリックします。
  3. 次の構成の詳細を入力します。
    • ユーザー: 「secops-reader」と入力します。
    • アクセスの種類: [アクセスキー - プログラムによるアクセス] を選択します。
  4. [Create user] をクリックします。
  5. 最小限の読み取りポリシー(カスタム)を適用する: [ユーザー] > [secops-reader] > [権限] > [権限を追加] > [ポリシーを直接適用] > [ポリシーを作成]
  6. JSON エディタで、次のポリシーを入力します。

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": ["s3:GetObject"],
          "Resource": "arn:aws:s3:::slack-audit-logs/*"
        },
        {
          "Effect": "Allow",
          "Action": ["s3:ListBucket"],
          "Resource": "arn:aws:s3:::slack-audit-logs"
        }
      ]
    }
    
  7. [次へ] をクリックします。

  8. ポリシー名「secops-reader-policy」を入力します。

  9. [ポリシーを作成] をクリックします。

  10. ユーザー作成ページに戻り、ポリシー リストを更新して secops-reader-policy を選択します。

  11. [次へ] をクリックします。

  12. [Create user] をクリックします。

  13. 作成したユーザー secops-reader を選択します。

  14. [セキュリティ認証情報] > [アクセスキー] > [アクセスキーを作成] に移動します。

  15. [サードパーティ サービス] を選択します。

  16. [次へ] をクリックします。

  17. [アクセスキーを作成] をクリックします。

  18. [Download .csv file] をクリックして、認証情報を保存します。

Slack Audit Logs を取り込むように Google SecOps でフィードを構成する

  1. [SIEM 設定] > [フィード] に移動します。
  2. [新しく追加] をクリックします。
  3. [フィード名] フィールドに、フィードの名前を入力します(例: Slack Audit Logs)。
  4. [ソースタイプ] として [Amazon S3 V2] を選択します。
  5. [ログタイプ] として [Slack Audit] を選択します。
  6. [次へ] をクリックします。
  7. 次の入力パラメータの値を指定します。
    • S3 URI: s3://slack-audit-logs/slack/audit/
    • Source deletion options: 必要に応じて削除オプションを選択します。
    • ファイルの最大経過日数: 指定した日数以内に変更されたファイルを含めます。デフォルトは 180 日です。
    • アクセスキー ID: S3 バケットにアクセスできるユーザー アクセスキー(secops-reader から)。
    • シークレット アクセスキー: S3 バケットにアクセスできるユーザーのシークレット キー(secops-reader から)。
    • アセットの名前空間: アセットの名前空間
    • Ingestion labels: このフィードのイベントに適用されるラベル。
  8. [次へ] をクリックします。
  9. [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。

UDM マッピング テーブル

ログフィールド UDM マッピング ロジック
action metadata.product_event_type 未加工ログの action フィールドから直接マッピングされます。
actor.type principal.labels.value actor.type フィールドから直接マッピングされ、キー actor.type が追加されます。
actor.user.email principal.user.email_addresses actor.user.email フィールドから直接マッピングされます。
actor.user.id principal.user.product_object_id actor.user.id フィールドから直接マッピングされます。
actor.user.id principal.user.userid actor.user.id フィールドから直接マッピングされます。
actor.user.name principal.user.user_display_name actor.user.name フィールドから直接マッピングされます。
actor.user.team principal.user.group_identifiers actor.user.team フィールドから直接マッピングされます。
context.ip_address principal.ip context.ip_address フィールドから直接マッピングされます。
context.location.domain about.resource.attribute.labels.value context.location.domain フィールドから直接マッピングされ、キー context.location.domain が追加されます。
context.location.id about.resource.id context.location.id フィールドから直接マッピングされます。
context.location.name about.resource.name context.location.name フィールドから直接マッピングされます。
context.location.name about.resource.attribute.labels.value context.location.name フィールドから直接マッピングされ、キー context.location.name が追加されます。
context.location.type about.resource.resource_subtype context.location.type フィールドから直接マッピングされます。
context.session_id network.session_id context.session_id フィールドから直接マッピングされます。
context.ua network.http.user_agent context.ua フィールドから直接マッピングされます。
context.ua network.http.parsed_user_agent parseduseragent フィルタを使用して context.ua フィールドから取得した、解析済みのユーザー エージェント情報。
country principal.location.country_or_region country フィールドから直接マッピングされます。
date_create metadata.event_timestamp.seconds date_create フィールドのエポック タイムスタンプがタイムスタンプ オブジェクトに変換されます。
details.inviter.email target.user.email_addresses details.inviter.email フィールドから直接マッピングされます。
details.inviter.id target.user.product_object_id details.inviter.id フィールドから直接マッピングされます。
details.inviter.name target.user.user_display_name details.inviter.name フィールドから直接マッピングされます。
details.inviter.team target.user.group_identifiers details.inviter.team フィールドから直接マッピングされます。
details.reason security_result.description details.reason フィールドから直接マッピングされます。配列の場合は、カンマで連結されます。
details.type about.resource.attribute.labels.value details.type フィールドから直接マッピングされ、キー details.type が追加されます。
details.type security_result.summary details.type フィールドから直接マッピングされます。
entity.app.id target.resource.id entity.app.id フィールドから直接マッピングされます。
entity.app.name target.resource.name entity.app.name フィールドから直接マッピングされます。
entity.channel.id target.resource.id entity.channel.id フィールドから直接マッピングされます。
entity.channel.name target.resource.name entity.channel.name フィールドから直接マッピングされます。
entity.channel.privacy target.resource.attribute.labels.value entity.channel.privacy フィールドから直接マッピングされ、キー entity.channel.privacy が追加されます。
entity.file.filetype target.resource.attribute.labels.value entity.file.filetype フィールドから直接マッピングされ、キー entity.file.filetype が追加されます。
entity.file.id target.resource.id entity.file.id フィールドから直接マッピングされます。
entity.file.name target.resource.name entity.file.name フィールドから直接マッピングされます。
entity.file.title target.resource.attribute.labels.value entity.file.title フィールドから直接マッピングされ、キー entity.file.title が追加されます。
entity.huddle.date_end about.resource.attribute.labels.value entity.huddle.date_end フィールドから直接マッピングされ、キー entity.huddle.date_end が追加されます。
entity.huddle.date_start about.resource.attribute.labels.value entity.huddle.date_start フィールドから直接マッピングされ、キー entity.huddle.date_start が追加されます。
entity.huddle.id about.resource.attribute.labels.value entity.huddle.id フィールドから直接マッピングされ、キー entity.huddle.id が追加されます。
entity.huddle.participants.0 about.resource.attribute.labels.value entity.huddle.participants.0 フィールドから直接マッピングされ、キー entity.huddle.participants.0 が追加されます。
entity.huddle.participants.1 about.resource.attribute.labels.value entity.huddle.participants.1 フィールドから直接マッピングされ、キー entity.huddle.participants.1 が追加されます。
entity.type target.resource.resource_subtype entity.type フィールドから直接マッピングされます。
entity.user.email target.user.email_addresses entity.user.email フィールドから直接マッピングされます。
entity.user.id target.user.product_object_id entity.user.id フィールドから直接マッピングされます。
entity.user.name target.user.user_display_name entity.user.name フィールドから直接マッピングされます。
entity.user.team target.user.group_identifiers entity.user.team フィールドから直接マッピングされます。
entity.workflow.id target.resource.id entity.workflow.id フィールドから直接マッピングされます。
entity.workflow.name target.resource.name entity.workflow.name フィールドから直接マッピングされます。
id metadata.product_log_id id フィールドから直接マッピングされます。
ip principal.ip ip フィールドから直接マッピングされます。action フィールドに基づくロジックによって決定されます。デフォルトは USER_COMMUNICATION ですが、action の値に基づいて USER_CREATIONUSER_LOGINUSER_LOGOUTUSER_RESOURCE_ACCESSUSER_RESOURCE_UPDATE_PERMISSIONSUSER_CHANGE_PERMISSIONS などの他の値に変更されます。「SLACK_AUDIT」にハードコードされています。date_create が存在する場合は「Enterprise Grid」に設定し、存在しない場合は user_id が存在すれば「監査ログ」に設定します。「Slack」にハードコードされます。「REMOTE」にハードコードされます。action に「user_login」または「user_logout」が含まれている場合は、「SSO」に設定されます。それ以外の場合は、「MACHINE」に設定されます。記載の例ではマッピングされていません。デフォルトは「ALLOW」ですが、action が「user_login_failed」の場合は「BLOCK」に設定されます。date_create が存在する場合は「Slack」に設定し、それ以外の場合は user_id が存在すれば「SLACK」に設定します。
user_agent network.http.user_agent user_agent フィールドから直接マッピングされます。
user_id principal.user.product_object_id user_id フィールドから直接マッピングされます。
username principal.user.product_object_id username フィールドから直接マッピングされます。

さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。