將 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 --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[] 篩選條件,就已經會收到這些活動。請檢查兩件事:
- 無法識別的值: 您的處理程式會原樣傳遞任何無法識別的
type或欄位值。請參閱了解 Activity 物件。 - 延遲出現的活動: 只請求時間較晚的活動的整合,會漏掉延遲才可供查詢的活動。請為該整合加入4 小時重新讀取與每日 15 天重新讀取。
確認運作正常
某人聲明某項控制措施後,執行迴圈,直到它儲存新的活動為止。接著再執行一次:它不會再次儲存該活動。
後續步驟
若要依據您儲存活動的時間(而非其 created_at)發出警示,請參閱偵測 Security posture 的變更。關於開放網路安全結構描述框架 (OCSF),請參閱將 Security posture 事件對應至 OCSF。關於目前結果,請參閱Security posture 結果參考資料。
這個頁面有幫助嗎?