Отправка событий Security posture в вашу SIEM
Запросите активности Security posture из ленты активности Compliance API, разберите одну из них поле за полем и поддерживайте актуальность вашей SIEM с помощью чтения по расписанию, которое улавливает запоздалые активности.
Эта страница проведёт вас от Compliance Access Key до активностей Security posture, которые по расписанию поступают в виде событий в вашу систему SIEM (security information and event management). В обзоре указано, у каких организаций есть эти активности. Вам понадобится Compliance Access Key, охватывающий организацию, с областью действия read:compliance_activities или read:org_audit.
Запрос активностей
Чтобы читать только эти активности, отфильтруйте ленту с помощью activity_types[]. В этом запросе 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здесь указывает человека, который дал подтверждение, по идентификатору пользователя и адресу электронной почты.created_atздесь — момент, когда было дано подтверждение.
В разделе Справочник по событиям Security posture перечислены и другие поля и значения.
Если ответ пуст
Пустой массив data допустим. Лента содержит только изменения, внесённые с тех пор, как она начала записывать эти активности для организации. Она остаётся пустой, пока подтверждение не будет дано или изменено.
Убедитесь, что у организации есть эти активности. Затем попросите кого-нибудь подтвердить меру. Через некоторое время повторите запрос.
Запуск по расписанию
Любая из этих активностей может стать доступной для запросов позже обычной для ленты активности 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 часов. Это ежедневное повторное чтение также читает активность, которая становится доступной для запросов в течение 14 дней после её created_at.
- Записывайте время начала каждого завершившегося ежедневного повторного чтения.
- Удаляйте сохранённый
id, только если вы сохранили его более чем за 16 дней до последнего записанного начала. - Если начало не записано, установите
created_at.gteнастолько далеко в прошлое, насколько вам нужно; лента хранит активности в течение 6 лет. - Если с последнего записанного начала прошло более суток, запустите следующее ежедневное повторное чтение с
created_at.gte, установленным на 15 дней раньше этого начала.
Если вы уже принимаете всю ленту
Интеграция, которая читает всю ленту активности без фильтра activity_types[], исключающего эти активности, уже их получает. Проверьте две вещи:
- Нераспознанные значения: ваш обработчик передаёт дальше без изменений любой
typeили значение поля, которые он не распознаёт. См. Структура объекта Activity. - Запоздалые активности: интеграция, которая запрашивает только более поздние активности, пропускает активность, ставшую доступной для запросов с опозданием. Добавьте в интеграцию 4-часовое повторное чтение и ежедневное 15-дневное повторное чтение.
Проверка работы
После того как кто-либо подтвердит меру, запускайте цикл, пока он не сохранит новую активность. Затем запустите его снова: он не сохраняет эту активность второй раз.
Следующие шаги
Чтобы создавать оповещения по времени сохранения активности, а не по её created_at, см. Обнаружение изменений в Security posture. Для Open Cybersecurity Schema Framework (OCSF) см. Сопоставление событий Security posture с OCSF. Для текущих результатов см. Справочник по результатам Security posture.
Эта страница была полезной?