收集 Slack 稽核記錄

支援的國家/地區:

本文說明如何使用 Google Cloud Run 函式或 Amazon S3 (搭配 AWS Lambda),將 Slack 稽核記錄擷取至 Google Security Operations。

Slack 稽核記錄會詳細記錄 Slack Enterprise Grid 機構中與安全性相關的事件。稽核記錄 API 可讓您監控使用者動作,例如登入、下載檔案、安裝應用程式和管理變更,以符合法規遵循和安全監控需求。

事前準備

請確認您已完成下列事前準備事項:

  • Google SecOps 執行個體
  • Slack Enterprise Grid 方案,且具備機構擁有者管理員存取權
  • 下列任一項的特殊存取權:

    • Google Cloud (適用於選項 1:Cloud Run Functions 和 Cloud Scheduler),或
    • AWS (適用於選項 2:S3、IAM、Lambda、EventBridge)

收集 Slack 憑證

建立 Slack 應用程式

如要使用 Slack 稽核記錄 API,必須提供具有 auditlogs:read 範圍的使用者 OAuth 權杖。您必須在企業網格組織層級安裝應用程式,才能取得這個權杖,工作區層級則不適用。

  1. 使用 Enterprise Grid 機構擁有者或管理員帳戶登入 Slack 管理控制台。
  2. 前往 Slack API 應用程式頁面
  3. 按一下「建立新應用程式」
  4. 選取「從頭開始」
  5. 請提供下列設定詳細資料:
    • 應用程式名稱:輸入描述性名稱 (例如 Google SecOps Audit Integration)。
    • 選擇要用來開發應用程式的工作區:選取開發 Slack 工作區 (機構中的任何工作區)。
  6. 點選「建立應用程式」

設定 OAuth 範圍

  1. 在應用程式的設定頁面中,選取左側導覽列的「OAuth & Permissions」
  2. 向下捲動至「範圍」部分。
  3. 在「使用者權杖範圍」 (不是機器人權杖範圍) 下方,按一下「新增 OAuth 範圍」
  4. 新增下列範圍:
    • auditlogs:read - 這個範圍可存取 Enterprise Grid 機構的 Audit Logs API。
  5. 在「機器人權杖範圍」下方,按一下「新增 OAuth 範圍」
  6. 新增下列範圍:

    • users:read:啟用機構層級的應用程式安裝作業時,必須使用這個範圍。

設定重新導向網址

  1. 在應用程式的設定頁面中,選取左側導覽列的「OAuth & Permissions」
  2. 前往「重新導向網址」部分。
  3. 按一下「新增重新導向網址」
  4. 輸入下列網址:

    https://slack.com/oauth/v2/authorize
    
  5. 按一下「新增」。

  6. 按一下「儲存網址」

啟用公開發行

如要在 Enterprise 機構層級 (不只是工作區) 安裝應用程式,必須啟用公開發布功能。

為什麼必須公開發布?

  • Slack 規定啟用全機構權限的應用程式必須啟用公開發行。
  • 這樣一來,您就能在機構層級安裝外掛程式,不必針對個別工作區安裝。
  • 如果沒有這個權限,您只能在 Enterprise Grid 內將應用程式安裝到單一工作區。
  • 啟用公開發布功能後,系統只會移除安裝範圍的內部限制。

如要啟用公開發布功能,請按照下列步驟操作:

  1. 在應用程式的設定頁面中,選取左側導覽列的「管理發布」。
  2. 在「與其他 Workspace 分享應用程式」下方,確認所有四個部分都有綠色勾號:
    • 移除硬式編碼資訊
    • 啟用公開發布
    • 設定重新導向網址
    • 新增 OAuth 範圍
  3. 如果任何部分顯示紅色 X,請展開該部分並完成必要動作。
  4. 勾選「我已檢查並移除所有硬式編碼資訊」旁的核取方塊。
  5. 按一下「啟用公開發布」

為企業機構安裝應用程式

  1. 在應用程式的設定頁面中,選取左側導覽列的「OAuth & Permissions」
  2. 在「Share Your App with Your Workspace」下方,複製「Sharable URL」
  3. 在瀏覽器中輸入網址。
  4. 重要事項:在安裝畫面中,檢查右上角的下拉式選單。
  5. 請務必安裝至企業機構,而非個人工作區。
  6. 如果下拉式選單中顯示工作區名稱,請點選該名稱,然後選取您的 Enterprise 機構名稱。
  7. 查看要求的權限,然後按一下「允許」

擷取憑證

完成授權後,系統會將您重新導向至「OAuth 和權限」頁面。

  1. 在「OAuth Tokens for Your Workspace」(您工作區的 OAuth 權杖) 下方,找出「User OAuth Token」(使用者 OAuth 權杖)
  2. 權杖開頭為 xoxp-
  3. 按一下「複製」並妥善儲存這個權杖。

  4. 記下您的機構 ID

    1. 前往 Slack 管理控制台
    2. 依序前往「設定和權限」>「機構設定」
    3. 複製機構 ID

驗證權限

如要確認應用程式是否具備必要權限,請按照下列步驟操作:

  1. 前往 Slack API 應用程式頁面
  2. 選取應用程式。
  3. 選取左側導覽列中的「OAuth 和權限」
  4. 在「您的 Workspace 的 OAuth 權杖」下方,確認顯示「使用者 OAuth 權杖」 (開頭為 xoxp-)。
  5. 在「範圍」下方,確認「使用者權杖範圍」下方顯示 auditlogs:read

測試 API 存取權

  • 請先測試權杖,再繼續整合:

    SLACK_TOKEN="xoxp-your-token-here"
    
    curl -H "Authorization: Bearer $SLACK_TOKEN" \
      "https://api.slack.com/audit/v1/logs?limit=1"
    

    成功的回應會包含含有稽核記錄事件的 entries 陣列。如果收到 invalid_authmissing_scope 錯誤,請驗證權杖和範圍。

選項 1:使用 Google Cloud Run 函式設定匯出 Slack 稽核記錄

這個選項會使用 Google Cloud Run Functions 和 Cloud Scheduler 收集 Slack 稽核記錄,並透過 Chronicle 擷取指令碼直接將記錄擷取至 Google SecOps。

事前準備 (選項 1)

請確認您符合下列額外必要條件:

  • 已啟用下列 API 的 GCP 專案:
    • Cloud Functions API
    • Cloud Scheduler API
    • Secret Manager API
  • 在 Secret Manager 中建立 Cloud Functions、Cloud Scheduler 工作和密鑰的權限
  • Google SecOps 服務帳戶 JSON 檔案

取得 Google SecOps 服務帳戶

  1. 登入 Google SecOps 控制台。
  2. 依序前往「SIEM 設定」>「收集代理程式」
  3. 下載擷取驗證檔案
  4. 請妥善保存 JSON 檔案。您會將這個檔案上傳至 Google Secret Manager 做為密鑰。

準備函式程式碼

Chronicle 擷取指令碼 GitHub 存放區下載部署檔案:

  1. slack 資料夾下載:
    • .env.yml
    • main.py
    • requirements.txt
  2. 從存放區的根目錄,下載整個 common 目錄和所有檔案。

    部署目錄應具有下列結構:

    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 中設定密鑰

將機密憑證儲存在 Secret Manager 中,供 Cloud Run 函式安全存取。

為 Google SecOps 服務帳戶建立密碼

  1. GCP 控制台中,依序前往「Security」(安全性) >「Secret Manager」
  2. 點選「建立密鑰」
  3. 請提供下列設定詳細資料:
    • 「Name」(名稱):輸入 chronicle-service-account
    • 密鑰值:輸入 Google SecOps 服務帳戶 JSON 檔案的完整內容。
  4. 點選「建立密鑰」
  5. 複製密鑰的資源名稱。格式為:

    projects/PROJECT_ID/secrets/chronicle-service-account/versions/latest
    

建立 Slack 權杖的密鑰

  1. 在「Secret Manager」頁面中,按一下「Create Secret」
  2. 請提供下列設定詳細資料:
    • 「Name」(名稱):輸入 slack-admin-token
    • 密碼值:輸入 Slack 使用者 OAuth 權杖 (開頭為 xoxp-)。
  3. 點選「建立密鑰」
  4. 複製密鑰的資源名稱。格式為:

    projects/PROJECT_ID/secrets/slack-admin-token/versions/latest
    

設定環境變數

  1. 開啟部署目錄中的 .env.yml 檔案,並設定環境變數:

    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 工作間隔相同。
  2. 儲存 .env.yml 檔案。

部署 Cloud Run 函式

  1. 在 Google Cloud 控制台中開啟終端機或 Cloud Shell。前往部署目錄,然後執行下列指令:

    gcloud functions deploy slack-audit-to-chronicle \
      --entry-point main \
      --trigger-http \
      --runtime python312 \
      --env-vars-file .env.yml \
      --timeout 540s \
      --memory 512MB \
      --service-account <SERVICE_ACCOUNT_EMAIL>
    

    <SERVICE_ACCOUNT_EMAIL> 替換為要讓 Cloud Run 函式使用的服務帳戶電子郵件地址。

  2. 等待部署作業完成。部署完成後,請記下輸出內容中的函式網址。

設定 Cloud Scheduler

  1. GCP 主控台中,前往「Cloud Scheduler」>「建立工作」
  2. 請提供下列設定詳細資料:

    設定
    名稱 slack-audit-scheduler
    區域 選取部署 Cloud Run 函式的區域
    頻率 */5 * * * * (每 5 分鐘一次,與 POLL_INTERVAL 值相符)
    時區 選取時區 (建議使用世界標準時間)
  3. 按一下「繼續」

  4. 在「設定執行作業」部分:

    • 目標類型:選取「HTTP」
    • 網址:輸入部署輸出內容中的 Cloud Run 函式網址。
    • HTTP 方法:選取「POST」
  5. 在「Auth header」(授權標頭) 區段中:

    • 選取「新增 OIDC 權杖」
    • 服務帳戶:選取 Cloud Run 函式使用的服務帳戶。
  6. 點選「建立」

排程頻率選項

根據記錄檔量和延遲時間要求選擇頻率:

頻率 Cron 運算式 用途
每 5 分鐘 */5 * * * * 標準 (建議)
每 15 分鐘 */15 * * * * 中等
每小時 0 * * * * 音量過低

測試整合項目 (選項 1)

  1. Cloud Scheduler 控制台中,找出您的工作 (slack-audit-scheduler)。
  2. 按一下「強制執行」即可手動觸發工作。
  3. 稍等幾秒鐘。
  4. 前往 Cloud Functions
  5. 按一下函式名稱 (slack-audit-to-chronicle)。
  6. 按一下 [Logs] (記錄) 分頁標籤。
  7. 確認函式是否已順利執行。尋找:

    Retrieving the Slack Audit logs since: YYYY-MM-DDTHH:MM:SSZ
    Processing logs...
    Retrieved X audit logs from the API call
    Logs processed successfully.
    

方法 2:使用 AWS S3 設定 Slack 稽核記錄匯出功能

這個選項會使用 AWS Lambda 收集 Slack 稽核記錄並儲存在 Amazon S3 中,然後設定 Google SecOps 資訊提供,以便擷取記錄。

事前準備 (方法 2)

請確認您已完成下列額外事前準備事項:

  • 具有建立 S3 值區、IAM 使用者/角色/政策、Lambda 函式和 EventBridge 規則權限的 AWS 帳戶。

建立 Amazon S3 儲存貯體

  1. 請按照建立值區使用手冊建立 Amazon S3 值區。
  2. 請儲存 bucket 的「名稱」和「區域」,以供日後參考 (例如 slack-audit-logs)。

設定 S3 上傳的身分與存取權管理政策和角色

  1. AWS Console 中,依序前往「IAM」>「Policies」>「Create policy」>「JSON」分頁。
  2. 輸入下列政策。如果您使用其他 bucket 名稱,請替換 slack-audit-logs

    {
      "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"
        }
      ]
    }
    
  3. 點選「下一步」

  4. 輸入政策名稱 SlackAuditS3Policy

  5. 點選「建立政策」

  6. 依序前往「IAM」>「角色」>「建立角色」>「AWS 服務」>「Lambda」

  7. 附加新建立的政策 SlackAuditS3Policy

  8. 為角色命名 SlackAuditToS3Role,然後按一下「建立角色」

建立 Lambda 函式

  1. AWS 控制台中,依序前往「Lambda」>「Functions」>「Create function」
  2. 按一下「從頭開始撰寫」
  3. 請提供下列設定詳細資料:

    設定
    名稱 slack_audit_to_s3
    執行階段 Python 3.13
    架構 x86_64
    執行角色 SlackAuditToS3Role
  4. 按一下「Create function」(建立函式)

  5. 建立函式後,開啟「程式碼」分頁,刪除虛設常式並輸入下列程式碼 (slack_audit_to_s3.py):

    #!/usr/bin/env python3
    # Lambda: Pull Slack Audit Logs (Enterprise Grid) to S3 (JSONL format)
    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"]
    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"))
    MAX_PAGES = int(os.environ.get("MAX_PAGES", "20"))
    LOOKBACK_SEC = int(os.environ.get("LOOKBACK_SECONDS", "3600"))
    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)
    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
                raise
            except URLError:
                if attempt < HTTP_RETRIES:
                    time.sleep(RETRY_AFTER_DEFAULT)
                    attempt += 1
                    continue
                raise
    
    def _write_page(data: dict, page_idx: int) -> str:
        """Extract entries from Slack API response and write as JSONL."""
        entries = data.get("entries") or []
        if not entries:
            return None
        lines = [json.dumps(entry, separators=(",", ":")) for entry in entries]
        body = "\n".join(lines).encode("utf-8")
        ts = time.strftime("%Y/%m/%d/%H%M%S", time.gmtime())
        key = f"{PREFIX}{ts}-slack-audit-p{page_idx:05d}.json"
        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())
    

設定 Lambda 環境變數

  1. 依序前往「Configuration」>「環境變數」>「Edit」>「Add environment variable」
  2. 輸入下列環境變數,並將 換成您的值:

    範例值
    SLACK_AUDIT_TOKEN xoxp-... (機構層級使用者權杖,附有 auditlogs:read)
    S3_BUCKET slack-audit-logs
    S3_PREFIX slack/audit/
    STATE_KEY slack/audit/state.json
    LIMIT 200
    MAX_PAGES 20
    LOOKBACK_SECONDS 3600
    HTTP_TIMEOUT 60
    HTTP_RETRIES 3
    RETRY_AFTER_DEFAULT 2
    ACTIONS (選用,以半形逗號分隔的動作篩選器)
  3. 按一下 [儲存]

  4. 選取「設定」分頁標籤。在「一般設定」面板中,按一下「編輯」

  5. 將「Timeout」(逾時間隔) 變更為 5 minutes (300 秒),然後按一下「Save」(儲存)

建立 EventBridge 排程

  1. 依序前往「Amazon EventBridge」>「Scheduler」>「Create schedule」
  2. 請提供下列設定詳細資料:
    • 「Name」(名稱):輸入 slack-audit-1h
    • 週期性時間表:選取「以費率為準的時間表」
    • 費率運算式:輸入 1 hours
    • 彈性時間範圍:選取「關閉」
  3. 點選「下一步」
  4. 選取目標:
    • 目標 API:選取「AWS Lambda Invoke」
    • Lambda 函式:選取 slack_audit_to_s3
  5. 點選「下一步」
  6. 按一下「下一步」 (略過選用設定)。
  7. 檢查並按一下「建立時間表」

選用:為 Google SecOps 建立唯讀 IAM 使用者

  1. 前往 AWS 控制台 > IAM > 使用者 > 建立使用者
  2. 請提供下列設定詳細資料:
    • 使用者名稱:輸入 secops-reader
    • 存取類型:選取「程式輔助存取」
  3. 點選「下一步」
  4. 選取「直接附加政策」
  5. 點選「建立政策」。在「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"
        }
      ]
    }
    
  6. 點選「下一步」

  7. 輸入政策名稱 secops-reader-policy

  8. 點選「建立政策」

  9. 返回使用者建立頁面,重新整理政策清單,然後選取 secops-reader-policy

  10. 點選「下一步」

  11. 按一下「建立使用者」

  12. 選取建立的使用者 secops-reader

  13. 依序前往「安全憑證」>「存取金鑰」>「建立存取金鑰」

  14. 選取「第三方服務」

  15. 點選「下一步」

  16. 按一下「建立存取金鑰」

  17. 按一下「下載 .csv 檔案」即可儲存憑證。

在 Google SecOps 中設定動態饋給,擷取 Slack 稽核記錄

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 Slack Audit Logs)。
  5. 選取「Amazon S3 V2」做為「來源類型」
  6. 選取「Slack Audit」做為「記錄類型」
  7. 點選「下一步」

    指定下列輸入參數的值:

    • S3 URI:輸入 S3 bucket URI,並加上前置路徑:

      s3://slack-audit-logs/slack/audit/
      

      請將 slack-audit-logs 替換成實際的 S3 bucket 名稱。

    • 來源刪除選項:根據偏好設定選取刪除選項。

    • 檔案存在時間上限:納入在過去天數內修改的檔案。預設值為 180 天。

    • 存取金鑰 ID:具有 S3 儲存空間存取權的使用者存取金鑰 (來自 secops-reader IAM 使用者)。

    • 存取密鑰:具有 S3 bucket 存取權的使用者私密金鑰 (來自 secops-reader IAM 使用者)。

    • 資產命名空間資產命名空間

    • 擷取標籤:要套用至這個動態饋給事件的標籤。

  8. 點選「下一步」

  9. 在「Finalize」(完成) 畫面中檢查新的動態饋給設定,然後按一下「Submit」(提交)

UDM 對應表

記錄欄位 UDM 對應 邏輯
action metadata.product_event_type 直接對應「action」欄位
actor.type principal.labels 直接對應至鍵 actor.type
actor.user.email principal.user.email_addresses 直接對應
actor.user.id principal.user.product_object_id 直接對應
actor.user.id principal.user.userid 直接對應
actor.user.name principal.user.user_display_name 直接對應
actor.user.team principal.user.group_identifiers 直接對應
context.ip_address principal.ip 直接對應
context.location.domain about.resource.attribute.labels 直接對應至鍵 context.location.domain
context.location.id about.resource.id 直接對應
context.location.name about.resource.name 直接對應
context.location.name about.resource.attribute.labels 直接對應至鍵 context.location.name
context.location.type about.resource.resource_subtype 直接對應
context.session_id network.session_id 直接對應
context.ua network.http.user_agent 直接對應
context.ua network.http.parsed_user_agent context.ua 欄位衍生而來的已剖析使用者代理程式
country principal.location.country_or_region 直接對應
date_create metadata.event_timestamp.seconds 轉換為時間戳記物件的 Epoch 時間戳記
details.inviter.email target.user.email_addresses 直接對應
details.inviter.id target.user.product_object_id 直接對應
details.inviter.name target.user.user_display_name 直接對應
details.inviter.team target.user.group_identifiers 直接對應
details.reason security_result.description 直接對應;如果是陣列,則以半形逗號串連
details.type about.resource.attribute.labels 直接對應至鍵 details.type
details.type security_result.summary 直接對應
entity.app.id target.resource.id 直接對應
entity.app.name target.resource.name 直接對應
entity.channel.id target.resource.id 直接對應
entity.channel.name target.resource.name 直接對應
entity.channel.privacy target.resource.attribute.labels 直接對應至鍵盤按鍵 entity.channel.privacy
entity.file.filetype target.resource.attribute.labels 直接對應至鍵 entity.file.filetype
entity.file.id target.resource.id 直接對應
entity.file.name target.resource.name 直接對應
entity.file.title target.resource.attribute.labels 直接對應至鍵 entity.file.title
entity.huddle.date_end about.resource.attribute.labels 直接對應至鍵盤按鍵 entity.huddle.date_end
entity.huddle.date_start about.resource.attribute.labels 直接對應至鍵 entity.huddle.date_start
entity.huddle.id about.resource.attribute.labels 直接對應至鍵 entity.huddle.id
entity.huddle.participants.0 about.resource.attribute.labels 直接對應至鍵盤按鍵 entity.huddle.participants.0
entity.huddle.participants.1 about.resource.attribute.labels 直接對應至鍵 entity.huddle.participants.1
entity.type target.resource.resource_subtype 直接對應
entity.user.email target.user.email_addresses 直接對應
entity.user.id target.user.product_object_id 直接對應
entity.user.name target.user.user_display_name 直接對應
entity.user.team target.user.group_identifiers 直接對應
entity.workflow.id target.resource.id 直接對應
entity.workflow.name target.resource.name 直接對應
id metadata.product_log_id 直接對應
ip principal.ip 直接對應
user_agent network.http.user_agent 直接對應
user_id principal.user.product_object_id 直接對應
username principal.user.product_object_id 直接對應
metadata.event_type 預設為 USER_COMMUNICATION;如果動作為 user_created,則設為 USER_CREATION;如果動作為 user_loginuser_login_failed,則設為 USER_LOGIN;如果動作為 user_logout,則設為 USER_LOGOUT;如果動作符合 file_,則設為 USER_RESOURCE_ACCESS;如果動作符合 app_private_public_auth_policy_,則設為 USER_RESOURCE_UPDATE_PERMISSIONS;如果動作符合 preflegal_hold_workflow_channel_user_deactivateduser_reactivatedrole_change_user_channel_,則設為 USER_CHANGE_PERMISSIONS
metadata.log_type 硬式編碼為 SLACK_AUDIT
metadata.product_name 如果 date_create 存在,請設為 Enterprise Grid;否則,如果 user_id 存在,請設為 Audit Logs
metadata.vendor_name 硬式編碼為 Slack
extensions.auth.mechanism 硬式編碼為 REMOTE
extensions.auth.type 如果動作包含 user_loginuser_logout,請設為 SSO,否則請設為 MACHINE
security_result.action 預設值為 ALLOW;如果動作為 user_login_failed,則設為 BLOCK
target.application 如果 date_create 存在,請設為 Slack;否則,如果 user_id 存在,請設為 SLACK
details.url_private target.url 從變更記錄對應
details.previous_ip_address principal.labels 從變更記錄對應
details.previous_ua principal.labels 從變更記錄對應

變更記錄

查看這個剖析器的變更記錄

還有其他問題嗎?向社群成員和 Google SecOps 專業人員尋求答案。