收集 Workday 稽核記錄

支援的國家/地區:

本文說明如何使用 Google Cloud Storage,將 Workday 稽核記錄檔擷取至 Google Security Operations。剖析器會先根據 JSON 資料的模式分析,從記錄中找出特定事件類型。然後,根據識別出的類型擷取並建構相關欄位,將這些欄位對應至統一資料模型 (UDM),以進行一致的安全分析。

事前準備

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

  • Google SecOps 執行個體
  • 已啟用 Cloud Storage API 的 GCP 專案
  • 建立及管理 GCS 值區的權限
  • 管理 Google Cloud Storage 值區 IAM 政策的權限
  • 建立 Cloud Run 函式、Pub/Sub 主題和 Cloud Scheduler 工作的權限
  • Workday 特殊存取權

建立 Google Cloud Storage 值區

  1. 前往 Google Cloud 控制台
  2. 選取專案或建立新專案。
  3. 在導覽選單中,依序前往「Cloud Storage」>「Bucket」
  4. 按一下「建立值區」
  5. 請提供下列設定詳細資料:

    設定
    為 bucket 命名 輸入全域不重複的名稱 (例如 workday-audit-logs)
    位置類型 根據需求選擇 (區域、雙區域、多區域)
    位置 選取位置 (例如 us-central1)
    儲存空間級別 標準 (建議用於經常存取的記錄)
    存取控管 統一 (建議)
    保護工具 選用:啟用物件版本管理或保留政策
  6. 點選「建立」

建立 Workday 整合系統使用者 (ISU)

  1. 在 Workday 中,搜尋「Create Integration System User」(建立整合系統使用者)> 按一下「OK」(確定)。
  2. 填入「User Name」(使用者名稱) (例如 audit_gcs_user)。
  3. 按一下「確定」
  4. 依序前往「相關動作」>「安全性」>「重設密碼」,即可重設密碼。
  5. 選取「維持密碼規則」,避免密碼過期。
  6. 搜尋「Create Security Group」(建立安全群組) >「Integration System Security Group (Unconstrained)」(整合系統安全群組 (無限制))
  7. 提供名稱 (例如 ISU_Audit_GCS),並將 ISU 新增至「整合系統使用者」
  8. 搜尋「Domain Security Policies for Functional Area > System」(功能領域的網域安全政策 > 系統)。
  9. 在「稽核記錄」部分,依序選取「動作」>「編輯權限」
  10. 在「僅限取得」下方,新增 ISU_Audit_GCS 群組。
  11. 依序點選「確定」>「啟用待處理的安全政策變更」

設定 Workday 自訂報表

  1. 在 Workday 中搜尋「Create Custom Report」
  2. 請提供下列設定詳細資料:
    • 名稱:輸入不重複的名稱 (例如 Audit_Trail_BP_JSON)。
    • 類型:選取「進階」
    • 資料來源:選取「稽核追蹤記錄 - 業務流程」
  3. 按一下「確定」
  4. 選用:新增「業務流程類型」或「生效日期」篩選器。
  5. 前往「輸出」分頁。
  6. 選取「Enable as Web Service」(啟用為 Web 服務)、「Optimized for Performance」(針對效能進行最佳化),然後選取「JSON Format」(JSON 格式)
  7. 依序按一下「確定」>「完成」
  8. 開啟報表,然後依序點選「共用」> 新增 ISU_Audit_GCS 並授予「檢視」權限 >「確定」
  9. 依序前往「相關動作」>「Web 服務」>「查看網址」
  10. 複製 JSON 網址。

為 Cloud Run 函式建立服務帳戶

Cloud Run 函式需要具備 GCS bucket 寫入權限的服務帳戶,並由 Pub/Sub 叫用。

建立服務帳戶

  1. GCP 主控台中,依序前往「IAM & Admin」(IAM 與管理) >「Service Accounts」(服務帳戶)
  2. 按一下 [Create Service Account] (建立服務帳戶)
  3. 請提供下列設定詳細資料:
    • 服務帳戶名稱:輸入 workday-audit-collector-sa
    • 服務帳戶說明:輸入 Service account for Cloud Run function to collect Workday audit logs
  4. 按一下「建立並繼續」
  5. 在「將專案存取權授予這個服務帳戶」部分,新增下列角色:
    1. 按一下「選擇角色」
    2. 搜尋並選取「Storage 物件管理員」
    3. 點選「+ 新增其他角色」
    4. 搜尋並選取「Cloud Run Invoker」
    5. 點選「+ 新增其他角色」
    6. 搜尋並選取「Cloud Functions Invoker」(Cloud Functions 叫用者)
  6. 按一下「繼續」
  7. 按一下 [完成]。

這些角色適用於:

  • Storage 物件管理員:將記錄檔寫入 GCS bucket
  • Cloud Run 叫用者:允許 Pub/Sub 叫用函式
  • Cloud Functions 叫用者:允許函式叫用

授予 GCS 值區的 IAM 權限

授予服務帳戶 GCS bucket 的寫入權限:

  1. 依序前往「Cloud Storage」>「Buckets」
  2. 按一下 bucket 名稱。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」
  5. 請提供下列設定詳細資料:
    • 新增主體:輸入服務帳戶電子郵件地址 (例如 workday-audit-collector-sa@PROJECT_ID.iam.gserviceaccount.com)。
    • 指派角色:選取「Storage 物件管理員」
  6. 按一下 [儲存]

建立 Pub/Sub 主題

建立 Pub/Sub 主題,Cloud Scheduler 會將訊息發布至該主題,而 Cloud Run 函式會訂閱該主題。

  1. GCP Console 中,前往「Pub/Sub」>「Topics」(主題)
  2. 按一下「建立主題」
  3. 請提供下列設定詳細資料:
    • 主題 ID:輸入 workday-audit-trigger
    • 其他設定保留預設值。
  4. 點選「建立」

建立 Cloud Run 函式來收集記錄

Cloud Run 函式會由 Cloud Scheduler 的 Pub/Sub 訊息觸發,從 Workday API 擷取記錄並寫入 GCS。

  1. 前往 GCP Console 的「Cloud Run」
  2. 按一下「Create service」(建立服務)
  3. 選取「函式」 (使用內嵌編輯器建立函式)。
  4. 在「設定」部分,提供下列設定詳細資料:

    設定
    服務名稱 workday-audit-collector
    區域 選取與 GCS bucket 相符的區域 (例如 us-central1)
    執行階段 選取「Python 3.12」以上版本
  5. 在「Trigger (optional)」(觸發條件 (選用)) 專區:

    1. 按一下「+ 新增觸發條件」
    2. 選取「Cloud Pub/Sub」
    3. 在「選取 Cloud Pub/Sub 主題」中,選擇主題 workday-audit-trigger
    4. 按一下 [儲存]
  6. 在「Authentication」(驗證) 部分:

    1. 選取「需要驗證」
    2. 檢查 Identity and Access Management (IAM)
  7. 向下捲動並展開「Containers, Networking, Security」

  8. 前往「安全性」分頁:

    • 服務帳戶:選取服務帳戶 workday-audit-collector-sa
  9. 前往「容器」分頁:

    1. 按一下「變數與密鑰」
    2. 針對每個環境變數,按一下「+ 新增變數」
    變數名稱 範例值
    GCS_BUCKET workday-audit-logs
    WD_USER audit_gcs_user
    WD_PASS your-workday-password
    WD_URL https://wd-servicesN.workday.com/ccx/service/customreport2/<tenant>/<user>/Audit_Trail_BP_JSON?format=json
  10. 在「變數與密鑰」分頁中向下捲動至「要求」

    • 要求逾時:輸入 600 秒 (10 分鐘)。
  11. 前往「容器」中的「設定」分頁:

    • 在「資源」部分:
      • 記憶體:選取 512 MiB 以上。
      • CPU:選取 1
    • 按一下 [完成]。
  12. 捲動至「執行環境」

    • 選取「預設」 (建議選項)。
  13. 在「修訂版本資源調度」部分:

    • 執行個體數量下限:輸入 0
    • 「Maximum number of instances」(執行個體數量上限):輸入 100 (或根據預期負載調整)。
  14. 點選「建立」

  15. 等待服務建立完成 (1 到 2 分鐘)。

  16. 服務建立完成後,系統會自動開啟內嵌程式碼編輯器

新增函式程式碼

  1. 在「Function entry point」(函式進入點) 中輸入 main
  2. 在內嵌程式碼編輯器中建立兩個檔案:

    • 第一個檔案:main.py:
    import functions_framework
    from google.cloud import storage
    import json
    import os
    import urllib3
    from datetime import datetime, timezone
    import base64
    import gzip
    import io
    import uuid
    
    # Initialize HTTP client
    http = urllib3.PoolManager(
        timeout=urllib3.Timeout(connect=5.0, read=30.0),
        retries=False,
    )
    
    # Initialize Storage client
    storage_client = storage.Client()
    
    @functions_framework.cloud_event
    def main(cloud_event):
        """
        Cloud Run function triggered by Pub/Sub to fetch logs from Workday API and write to GCS.
    
        Args:
            cloud_event: CloudEvent object containing Pub/Sub message
        """
    
        # Get environment variables
        bucket_name = os.environ.get('GCS_BUCKET')
        wd_user = os.environ.get('WD_USER')
        wd_pass = os.environ.get('WD_PASS')
        wd_url = os.environ.get('WD_URL')
    
        if not all([bucket_name, wd_user, wd_pass, wd_url]):
            print('Error: Missing required environment variables')
            return
    
        try:
            # Get GCS bucket
            bucket = storage_client.bucket(bucket_name)
    
            print(f'Fetching Workday audit report from {wd_url}')
    
            # Fetch report from Workday
            data = fetch_report(wd_url, wd_user, wd_pass)
    
            # Upload to GCS
            timestamp = datetime.now(timezone.utc)
            upload(bucket, data, timestamp)
    
            print(f'Successfully uploaded Workday audit report ({len(data)} bytes raw)')
    
        except Exception as e:
            print(f'Error processing logs: {str(e)}')
            raise
    
    def fetch_report(url, username, password):
        """Fetch report from Workday using Basic Auth."""
        credentials = f"{username}:{password}"
        credentials_bytes = credentials.encode('utf-8')
        auth_header = b"Basic " + base64.b64encode(credentials_bytes)
    
        req_headers = {
            "Authorization": auth_header.decode('utf-8')
        }
    
        response = http.request('GET', url, headers=req_headers)
    
        if response.status != 200:
            raise Exception(f"Failed to fetch report: HTTP {response.status}")
    
        return response.data
    
    def upload(bucket, payload, ts):
        """Upload gzipped JSON to GCS."""
        key = f"{ts:%Y/%m/%d}/workday-audit-{uuid.uuid4()}.json.gz"
    
        buf = io.BytesIO()
        with gzip.GzipFile(fileobj=buf, mode='w') as gz:
            gz.write(payload)
        buf.seek(0)
    
        blob = bucket.blob(key)
        blob.upload_from_file(buf, content_type='application/gzip')
    
        print(f'Uploaded to gs://{bucket.name}/{key}')
    
    • 第二個檔案:requirements.txt:
    functions-framework==3.*
    google-cloud-storage==2.*
    urllib3>=2.0.0
    
  3. 點選「部署」來儲存並部署函式。

  4. 等待部署作業完成 (2 到 3 分鐘)。

建立 Cloud Scheduler 工作

Cloud Scheduler 會定期將訊息發布至 Pub/Sub 主題,觸發 Cloud Run 函式。

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

    設定
    名稱 workday-audit-collector-daily
    區域 選取與 Cloud Run 函式相同的區域
    頻率 20 2 * * * (每天世界標準時間 02:20 執行)
    時區 選取時區 (建議使用世界標準時間)
    目標類型 Pub/Sub
    主題 選取主題 workday-audit-trigger
    郵件內文 {} (空白 JSON 物件)
  4. 點選「建立」

排程頻率選項

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

    頻率 Cron 運算式 用途
    每 5 分鐘 */5 * * * * 高容量、低延遲
    每 15 分鐘檢查一次 */15 * * * * 普通量
    每小時 0 * * * * 標準
    每 6 小時 0 */6 * * * 少量、批次處理
    每日 20 2 * * * 歷來資料集合 (建議)

測試排程器工作

  1. Cloud Scheduler 控制台中找出您的工作。
  2. 按一下「強制執行」即可手動觸發。
  3. 等待幾秒鐘,然後依序前往「Cloud Run」>「Services」>「workday-audit-collector」>「Logs」
  4. 確認函式是否已順利執行。
  5. 檢查 GCS 值區,確認是否已寫入記錄。

擷取 Google SecOps 服務帳戶

Google SecOps 會使用專屬服務帳戶,從 GCS bucket 讀取資料。您必須授予這個服務帳戶值區存取權。

取得服務帳戶電子郵件地址

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 Workday Audit Logs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「Workday 稽核」做為「記錄類型」。
  7. 按一下「取得服務帳戶」。系統會顯示專屬的服務帳戶電子郵件地址,例如:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. 複製這個電子郵件地址,以便在下一步中使用。

將 IAM 權限授予 Google SecOps 服務帳戶

Google SecOps 服務帳戶需要 GCS bucket 的「Storage 物件檢視者」角色。

  1. 依序前往「Cloud Storage」>「Buckets」
  2. 按一下 bucket 名稱。
  3. 前往「權限」分頁標籤。
  4. 按一下「授予存取權」
  5. 請提供下列設定詳細資料:
    • 新增主體:貼上 Google SecOps 服務帳戶電子郵件地址。
    • 指派角色:選取「Storage 物件檢視者」
  6. 按一下 [儲存]

在 Google SecOps 中設定資訊提供,擷取 Workday 稽核記錄

  1. 依序前往「SIEM 設定」>「動態饋給」
  2. 按一下「新增動態消息」
  3. 按一下「設定單一動態饋給」
  4. 在「動態饋給名稱」欄位中輸入動態饋給名稱 (例如 Workday Audit Logs)。
  5. 選取「Google Cloud Storage V2」做為「來源類型」
  6. 選取「Workday 稽核」做為「記錄類型」。
  7. 點選 [下一步]。
  8. 指定下列輸入參數的值:

    • 儲存空間 bucket URL:輸入 GCS bucket URI,並加上前置路徑:

      gs://workday-audit-logs/
      
      • 請將 workday-audit-logs 替換成實際的 GCS 值區名稱。
    • 來源刪除選項:根據偏好設定選取刪除選項:

      • 永不:移轉後一律不刪除任何檔案 (建議用於測試)。
      • 刪除已轉移的檔案:成功轉移檔案後刪除檔案。
      • 刪除已轉移的檔案和空白目錄:成功轉移後刪除檔案和空白目錄。
    • 檔案存在時間上限:包含在過去天數內修改的檔案。預設值為 180 天。

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

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

  9. 點選 [下一步]。

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

UDM 對應表

記錄欄位 UDM 對應 邏輯
帳戶 metadata.event_type 如果「帳戶」欄位不為空白,「metadata.event_type」欄位會設為「USER_RESOURCE_UPDATE_CONTENT」。
帳戶 principal.user.primaryId 系統會使用 grok 模式從「帳戶」欄位擷取使用者 ID,並對應至 principal.user.primaryId。
帳戶 principal.user.primaryName 系統會使用 grok 模式從「帳戶」欄位擷取使用者顯示名稱,並對應至「principal.user.primaryName」。
ActivityCategory metadata.event_type 如果「ActivityCategory」欄位為「READ」,「metadata.event_type」欄位會設為「RESOURCE_READ」。如果是「WRITE」,則會設為「RESOURCE_WRITTEN」。
ActivityCategory metadata.product_event_type 直接從「ActivityCategory」欄位對應。
AffectedGroups target.user.group_identifiers 直接從「AffectedGroups」欄位對應。
target.resource.attribute.labels.area.value 直接從「區域」欄位對應。
AuthType extensions.auth.auth_details 直接從「AuthType」欄位對應。
AuthType extensions.auth.type 根據特定值,從「AuthType」欄位對應至 UDM 中定義的不同驗證類型。
CFIPdeConexion src.domain.name 如果「CFIPdeConexion」欄位不是有效的 IP 位址,系統會將其對應至「src.domain.name」。
CFIPdeConexion target.ip 如果「CFIPdeConexion」欄位是有效的 IP 位址,則會對應至「target.ip」。
ChangedRelationship metadata.description 直接從「ChangedRelationship」欄位對應。
ClassOfInstance target.resource.attribute.labels.class_instance.value 直接從「ClassOfInstance」欄位對應。
column18 about.labels.utub.value 直接從「column18」欄位對應。
CreatedBy principal.user.userid 系統會使用 grok 模式從「CreatedBy」欄位擷取使用者 ID,並對應至「principal.user.userid」。
CreatedBy principal.user.user_display_name 系統會使用 grok 模式從「CreatedBy」欄位擷取使用者顯示名稱,並對應至「principal.user.user_display_name」。
網域 about.domain.name 直接從「網域」欄位對應。
EffectiveDate @timestamp 轉換為「yyyy-MM-dd HH:mm:ss.SSSZ」格式後,會剖析為「@timestamp」。
EntryMoment @timestamp 轉換為「ISO8601」格式後,剖析為「@timestamp」。
EventType security_result.description 直接從「EventType」欄位對應。
表單 target.resource.name 直接從「表單」欄位對應。
InstancesAdded about.resource.attribute.labels.instances_added.value 直接從「InstancesAdded」欄位對應。
InstancesAdded target.user.attribute.roles.instances_added.name 直接從「InstancesAdded」欄位對應。
InstancesRemoved about.resource.attribute.labels.instances_removed.value 直接從「InstancesRemoved」欄位對應。
InstancesRemoved target.user.attribute.roles.instances_removed.name 直接從「InstancesRemoved」欄位對應。
IntegrationEvent target.resource.attribute.labels.integration_event.value 直接從「IntegrationEvent」欄位對應。
IntegrationStatus security_result.action_details 直接從「IntegrationStatus」欄位對應。
IntegrationSystem target.resource.name 直接從「IntegrationSystem」欄位對應。
IP src.domain.name 如果「IP」欄位不是有效的 IP 位址,系統會將其對應至「src.domain.name」。
IP src.ip 如果「IP」欄位是有效的 IP 位址,則會對應至「src.ip」。
IsDeviceManaged additional.fields.additional1.value.string_value 如果「IsDeviceManaged」欄位為「N」,則值會設為「Successful」。否則會設為「發生登入失敗」。
IsDeviceManaged additional.fields.additional2.value.string_value 如果「IsDeviceManaged」欄位為「N」,則值會設為「Successful」。否則會設為「憑證無效」。
IsDeviceManaged additional.fields.additional3.value.string_value 如果「IsDeviceManaged」欄位為「N」,則值會設為「Successful」。否則會設為「帳戶已鎖定」。
IsDeviceManaged security_result.action_details 直接對應至「IsDeviceManaged」欄位。
OutputFiles about.file.full_path 直接從「OutputFiles」欄位對應。
人物 principal.user.primaryId 如果「Person」欄位開頭為「INT」,系統會使用 grok 模式擷取使用者 ID,並對應至「principal.user.primaryId」。
人物 principal.user.primaryName 如果「Person」欄位開頭為「INT」,系統會使用 grok 模式擷取使用者顯示名稱,並對應至「principal.user.primaryName」。
人物 principal.user.user_display_name 如果「Person」欄位開頭不是「INT」,則會直接對應至「principal.user.user_display_name」。
人物 metadata.event_type 如果「Person」欄位不為空白,「metadata.event_type」欄位會設為「USER_RESOURCE_UPDATE_CONTENT」。
ProcessedTransaction target.resource.attribute.creation_time 轉換為「dd/MM/yyyy HH:mm:ss,SSS (ZZZ)」、「dd/MM/yyyy, HH:mm:ss,SSS (ZZZ)」或「MM/dd/yyyy, HH:mm:ss.SSS A ZZZ」格式後,會剖析為「target.resource.attribute.creation_time」。
ProgramBy principal.user.userid 直接從「ProgramBy」欄位對應。
RecurrenceEndDate principal.resource.attribute.last_update_time 轉換為「yyyy-MM-dd」格式後,剖析為「principal.resource.attribute.last_update_time」。
RecurrenceStartDate principal.resource.attribute.creation_time 轉換為「yyyy-MM-dd」格式後,剖析為「principal.resource.attribute.creation_time」。
RequestName metadata.description 直接從「RequestName」欄位對應。
ResponseMessage security_result.summary 直接從「ResponseMessage」欄位對應。
RestrictedToEnvironment security_result.about.hostname 直接從「RestrictedToEnvironment」欄位對應。
RevokedSecurity security_result.outcomes.outcomes.value 直接從「RevokedSecurity」欄位對應。
RunFrequency principal.resource.attribute.labels.run_frequency.value 直接從「RunFrequency」欄位對應。
ScheduledProcess principal.resource.name 直接從「ScheduledProcess」欄位對應。
SecuredTaskExecuted target.resource.name 直接從「SecuredTaskExecuted」欄位對應。
SecureTaskExecuted metadata.event_type 如果「SecureTaskExecuted」欄位包含「Create」,「metadata.event_type」欄位會設為「USER_RESOURCE_CREATION」。
SecureTaskExecuted target.resource.name 直接對應至「SecureTaskExecuted」欄位。
SentTime @timestamp 轉換為「ISO8601」格式後,剖析為「@timestamp」。
SessionId network.session_id 直接從「SessionId」欄位對應。
ShareBy target.user.userid 直接從「ShareBy」欄位對應。
SignOffTime additional.fields.additional4.value.string_value 「AuthFailMessage」欄位值會放在「additional.fields」陣列中,並以「Enterprise Interface Builder」做為鍵。
SignOffTime metadata.description 直接從「AuthFailMessage」欄位對應。
SignOffTime metadata.event_type 如果「SignOffTime」欄位空白,「metadata.event_type」欄位會設為「USER_LOGIN」。否則會設為「USER_LOGOUT」。
SignOffTime principal.user.attribute.last_update_time 轉換為「ISO8601」格式後,剖析為「principal.user.attribute.last_update_time」。
SignOnIp src.domain.name 如果「SignOnIp」欄位不是有效的 IP 位址,系統會將其對應至「src.domain.name」。
SignOnIp src.ip 如果「SignOnIp」欄位是有效的 IP 位址,則會對應至「src.ip」。
狀態 metadata.product_event_type 直接對應「狀態」欄位。
SystemAccount principal.user.email_addresses 系統會使用 grok 模式從「SystemAccount」欄位擷取電子郵件地址,並對應至「principal.user.email_addresses」。
SystemAccount principal.user.primaryId 系統會使用 grok 模式從「SystemAccount」欄位擷取使用者 ID,並對應至「principal.user.primaryId」。
SystemAccount principal.user.primaryName 系統會使用 grok 模式從「SystemAccount」欄位擷取使用者顯示名稱,並對應至「principal.user.primaryName」。
SystemAccount src.user.userid 系統會使用 grok 模式從「SystemAccount」欄位擷取次要使用者 ID,並對應至「src.user.userid」。
SystemAccount src.user.user_display_name 系統會使用 grok 模式從「SystemAccount」欄位擷取次要使用者顯示名稱,並對應至「src.user.user_display_name」。
SystemAccount target.user.userid 系統會使用 grok 模式從「SystemAccount」欄位擷取目標使用者 ID,並對應至「target.user.userid」。
目標 target.user.user_display_name 直接從「目標」欄位對應。
範本 about.resource.name 直接從「範本」欄位對應。
用戶群 target.asset.hostname 直接從「租戶」欄位對應。
TlsVersion network.tls.version 直接從「TlsVersion」欄位對應。
交易 security_result.action_details 直接從「交易」欄位對應。
TransactionType security_result.summary 直接從「TransactionType」欄位對應。
TypeForm target.resource.resource_subtype 直接從「TypeForm」欄位對應。
UserAgent network.http.parsed_user_agent 使用「useragent」篩選器從「UserAgent」欄位剖析。
UserAgent network.http.user_agent 直接從「UserAgent」欄位對應。
WorkdayAccount target.user.user_display_name 系統會使用 grok 模式從「WorkdayAccount」欄位擷取使用者顯示名稱,並對應至「target.user.user_display_name」。
WorkdayAccount target.user.userid 系統會使用 grok 模式從「WorkdayAccount」欄位擷取使用者 ID,並對應至「target.user.userid」。
additional.fields.additional1.key 設為「FailedSignOn」。
additional.fields.additional2.key 設為「InvalidCredentials」。
additional.fields.additional3.key 設為「AccountLocked」。
additional.fields.additional4.key 設為「Enterprise Interface Builder」。
metadata.event_type 一開始設為「GENERIC_EVENT」,然後根據涉及其他欄位的邏輯更新。
metadata.event_type 針對特定事件類型設為「USER_CHANGE_PERMISSIONS」。
metadata.event_type 針對特定事件類型,請設為「RESOURCE_WRITTEN」。
metadata.log_type 硬式編碼為「WORKDAY_AUDIT」。
metadata.product_name 硬式編碼為「Enterprise Interface Builder」。
metadata.vendor_name 已硬式編碼為「Workday」。
principal.asset.category 如果「DeviceType」欄位為「Phone」,請設為「Phone」。
principal.resource.resource_type 如果「ScheduledProcess」欄位不為空白,則會硬式編碼為「TASK」。
security_result.action 根據「FailedSignOn」、「IsDeviceManaged」、「InvalidCredentials」和「AccountLocked」欄位的值,設為「ALLOW」或「FAIL」。
security_result.summary 根據「FailedSignOn」、「IsDeviceManaged」、「InvalidCredentials」和「AccountLocked」欄位的值,設為「Successful」或特定錯誤訊息。
target.resource.resource_type 針對特定事件類型硬式編碼為「TASK」。
target.resource.resource_type 如果「TypeForm」欄位不為空白,則會硬式編碼為「DATASET」。
訊息 principal.user.email_addresses 使用 grok 模式從「message」欄位擷取電子郵件地址,並在符合特定模式時,將其合併至「principal.user.email_addresses」。
訊息 src.user.userid 如果「event.idm.read_only_udm.principal.user.userid」欄位與從「message」欄位擷取的「user_target」相符,則清除該欄位。
訊息 src.user.user_display_name 如果「event.idm.read_only_udm.principal.user.userid」欄位與從「message」欄位擷取的「user_target」相符,則清除該欄位。
訊息 target.user.userid 使用 grok 模式從「message」欄位擷取 userid,並在符合特定模式時將其對應至「target.user.userid」。

需要其他協助嗎?向社群成員和 Google SecOps 專業人員尋求答案。