События уровня объекта S3 не запускаются

#amazon-web-services #amazon-s3 #aws-event-bridge

#amazon-web-services #amazon-s3 #aws-event-мост

Вопрос:

Я создал правило событий в aws events bridge с шаблоном событий:

 {
  "source": [
    "aws.s3"
  ]
}
 

Цель — это группа журналов CloudWatch.
Теперь, когда я что-то меняю на уровне корзины, например, разрешения корзины, я вижу событие, зафиксированное в cloud watch, но когда я добавляю добавление / удаление файла в корзину s3, ничего не происходит. Что здесь не так?

Ответ №1:

Чтобы регистрировать события уровня объекта, необходимо включить регистрацию событий данных для S3 в отслеживании CloudTrail. Если у вас еще нет трассировки, вы должны создать ее, убедившись, что вы включили ведение журнала событий данных для s3.

Комментарии:

1. Сообщение в блоге , объявляющее об этой функции, вводит в заблуждение, требование активировать события данных нигде не упоминается :-

Ответ №2:

Вы можете отправлять события уровня объекта в Event Bridge из S3, записывая эти события объектов и убедившись, что у вас включены уведомления S3 от S3 до Event Bridge на уровне корзины, или вы можете записывать эти события с помощью ведения журнала CloudTrail API. Если вы хотите захватить события для нескольких сегментов, то первый метод проще. Однако, если вы хотите фиксировать события во всех или многих сегментах, я предлагаю использовать метод CloudTrail .

Отправляйте события объекта непосредственно в Event Bridge

Чтобы отправлять события уровня объекта в Event Bridge из S3, убедитесь, что вы включили уведомления для Event Bridge в свойствах корзины:

свойства корзины для включения уведомлений о соединении событий

Если вы используете CloudFormation, то это доступно через NotificationConfiguration свойство.

Затем вы можете создать правило объединения событий, которое будет фиксировать действия для этого сегмента. Это пример для захвата создания объекта:

 {
  "detail-type": ["Object Created"],
  "source": ["aws.s3"],
  "detail": {
    "bucket": {
      "name": ["my-bucket"]
    }
  }
}
 

Отправка событий объекта в Event Bridge через CloudTrail

Для захвата событий S3 для нескольких сегментов предпочтительным является метод CloudTrail API. Как указано в ответе @Marcin, необходимо создать маршрут CloudTrail, который фиксирует события данных S3. При создании трассировки в разделе «Выбор событий журнала» проще всего переключиться на «Основные селекторы событий», чтобы выбрать отдельные сегменты или события во всех сегментах. После создания трассировки можно создать правило моста событий для захвата событий API Cloudtrail. Вот пример для захвата создания объекта:

 {
  "detail-type": ["AWS API Call via CloudTrail"],
  "source": ["aws.s3"],
  "detail": {
    "eventSource": ["s3.amazonaws.com"],
    "eventName": ["PutObject"]
  }
}
 

Если вы хотите ограничить этот вызов определенными сегментами, вы можете дополнительно настроить правило:

 {
  "detail-type": ["AWS API Call via CloudTrail"],
  "source": ["aws.s3"],
  "detail": {
    "eventSource": ["s3.amazonaws.com"],
    "requestParameters": {
      "bucketName": ["my-bucket"]
    },
    "eventName": ["PutObject"]
  }
}