Claude Platform Docs
管理Security posture

將 Security posture 事件傳送至您的 SIEM

從 Compliance API 的 Activity Feed 請求 Security posture 活動,逐欄位讀取其中一筆活動,並透過排程讀取讓您的 SIEM 保持最新狀態,同時擷取延遲出現的活動。

本頁將帶您從取得 Compliance Access Key 開始,到讓 Security posture 活動依排程以事件形式送達您的安全資訊與事件管理 (SIEM) 系統。概覽頁面說明了哪些組織擁有這些活動。您需要一把涵蓋該組織、且具備 read:compliance_activities 或 read:org_audit 範圍的 Compliance Access Key。

請求活動

若只要讀取這些活動,請使用 activity_types[] 篩選 Activity Feed。在此請求中,created_at.gte 設定要讀取的最早 created_at,而 order=asc 會先傳回最舊的活動:

cURL
curl --fail-with-body -sS -G \
  "https://api.anthropic.com/v1/compliance/activities" \
  -H "x-api-key: $ANTHROPIC_COMPLIANCE_ACCESS_KEY" \
  -H "anthropic-version: 2026-10-21" \
  --data-urlencode "activity_types[]=org_security_control_attestation_updated" \
  --data-urlencode "created_at.gte=2026-10-20T00:00:00Z" \
  --data-urlencode "order=asc" \
  --data-urlencode "limit=5000"

API 參考資料可檢視預覽,內含 API 參考文件連結——按 Tab 鍵直到焦點進入卡片,按 Escape 鍵返回。說明了每個參數。

讀取一筆活動

回應的 data 陣列中的每個元素都是一筆像這樣的活動。

{
  "id": "activity_01Hq7ZtYc4Vb2NmKx8RsPd3W",
  "type": "org_security_control_attestation_updated",
  "created_at": "2026-10-20T15:04:00.220114Z",
  "organization_id": "org_01JuY4bkwkH1x4PodBJaWmh2",
  "organization_uuid": "91012d09-e48b-438e-a489-1bebfd8fa6f9",
  "actor": {
    "type": "user_actor",
    "email_address": "jane.doe@example.com",
    "user_id": "user_01WxYzAbCdEfGhJkMnPqRsTu",
    "ip_address": "192.0.2.34",
    "user_agent": "Mozilla/5.0..."
  },
  "control": "directory_sync_enabled",
  "action": "attested",
  "status": "accepted_risk"
}
  • control 指出安全控制措施,也就是一項建議的設定或做法。
  • action 說明該控制措施的聲明(某人針對該控制措施所記錄的陳述)發生了什麼事。此處的 attested 表示針對原本沒有聲明的控制措施記錄了一筆聲明。
  • status 是該聲明的值。此處為「已接受風險」(accepted_risk):該控制措施未落實,而組織接受此風險。
  • 此處的 actor 以使用者 ID 和電子郵件地址識別做出聲明的人。
  • 此處的 created_at 是對方做出聲明的時間。

Security posture 事件參考資料列出了更多欄位和值。

如果回應為空

空的 data 陣列是有效的。Activity Feed 只包含自其開始為該組織記錄這些活動以來所做的變更。在有人做出或變更聲明之前,它都是空的。

請確認該組織擁有這些活動。接著請某人對一項控制措施做出聲明。一段時間後,重複該請求。

依排程執行

這些活動中的任一筆,都可能比 Activity Feed 一般 1 分鐘的索引延遲更晚才可供查詢,且其 created_at 已是過去的時間。因此,只會向前推進(依據游標或不斷推進的 created_at.gte)的整合,永遠不會看到這類活動。請在每次執行時重新讀取固定 4 小時的回溯時間範圍,並捨棄您已儲存的活動:

query = activity_types[]=org_security_control_attestation_updated
      & created_at.gte={now - 4 hours}
      & order=asc
      & limit=5000
cursor = null
loop:
  if cursor is null:
    page = GET /v1/compliance/activities?{query}
  else:
    page = GET /v1/compliance/activities?{query}&after_id={cursor}
  for activity in page.data:
    if activity.id is not in stored_ids:
      store(activity)
      add activity.id to stored_ids
  if not page.has_more: break
  cursor = page.last_id
  • 頻繁執行: 依您警示所需的頻率執行迴圈,例如每 5 分鐘一次。
  • 整個執行期間使用相同的查詢: 在每次執行開始時計算 created_at.gte,使用 UTC 並經過 URL 編碼。在每一頁都傳送相同的篩選條件與 order。使用 order=asc 時,將 last_id 作為 after_id 傳入,會傳回下一頁時間較晚的活動。分頁瀏覽結果說明了 after_id 與 last_id。
  • 依 id 去除重複資料: 此步驟為必要,因為連續的執行會互相重疊。
  • 處理執行失敗: 如果請求在經過處理 Compliance API 錯誤中的重試後仍失敗,請結束該次執行。下一次執行會重新讀取其整個時間範圍。如果執行失敗或停止超過 4 小時,下一次每日重新讀取會讀取這些執行漏掉的活動。

每天重新讀取 15 天一次

每天一次,以 15 天的回溯時間範圍取代 4 小時,執行相同的迴圈。此每日重新讀取也會讀取在其 created_at 之後最多 14 天才可供查詢的活動。

  • 記錄每次完成的每日重新讀取的開始時間。
  • 只有在您儲存某個 id 的時間比最近一次記錄的開始時間早超過 16 天時,才刪除該已儲存的 id。
  • 如果沒有記錄任何開始時間,請將 created_at.gte 往前設定到您所需的時間點;Activity Feed 會保留活動 6 年。
  • 如果距最近一次記錄的開始時間已超過一天,請在下一次每日重新讀取時,將 created_at.gte 設為該開始時間之前 15 天。

如果您已擷取完整的 Activity Feed

若整合會讀取整個 Activity Feed,且沒有使用會排除這些活動的 activity_types[] 篩選條件,就已經會收到這些活動。請檢查兩件事:

確認運作正常

某人聲明某項控制措施後,執行迴圈,直到它儲存新的活動為止。接著再執行一次:它不會再次儲存該活動。

後續步驟

若要依據您儲存活動的時間(而非其 created_at)發出警示,請參閱偵測 Security posture 的變更。關於開放網路安全結構描述框架 (OCSF),請參閱將 Security posture 事件對應至 OCSF。關於目前結果,請參閱Security posture 結果參考資料。

這個頁面有幫助嗎?