Я создал правило события в мосте событий aws с шаблоном события:
{
"source": [
"aws.s3"
]
}
Цель — это группа журналов CloudWatch. Теперь, когда я что-то меняю на уровне ведра, например. права доступа к корзине, то я вижу событие, захваченное в облачных часах, но когда я добавляю/удаляю файл в корзину s3, ничего не происходит. Что здесь не так?
Чтобы регистрировать события на уровне объектов, необходимо включить регистрацию событий данных для S3 в следе CloudTrail. Если у вас еще нет следа, вам нужно создать его, убедившись, что вы включили регистрацию событий данных для s3.
Вы можете отправлять события уровня объекта в Event Bridge из S3, перехватив эти события объекта и убедившись, что у вас включены уведомления S3 от S3 до Event Bridge на уровне корзины, или вы можете зафиксировать эти события с помощью ведения журнала CloudTrail API. Если вы хотите зафиксировать события для нескольких сегментов, то первый способ проще. Однако если вы хотите фиксировать события во всех или во многих корзинах, я предлагаю использовать метод CloudTrail.
Чтобы отправлять события уровня объекта в Event Bridge из S3, убедитесь, что вы включили уведомления в Event Bridge в свойствах корзины:
Если вы используете CloudFormation, это доступно через свойство NotificationConfiguration
.
Затем вы можете создать правило Event Bridge, которое будет фиксировать действия для этого сегмента. Это пример захвата создания объекта:
{
"detail-type": ["Object Created"],
"source": ["aws.s3"],
"detail": {
"bucket": {
"name": ["my-bucket"]
}
}
}
Для захвата событий S3 для нескольких сегментов предпочтительнее использовать метод CloudTrail API. Как отмечено в ответе @Marcin, вы должны создать след CloudTrail, который фиксирует события данных S3. При создании следа в разделе «Выбор событий журнала» проще всего переключиться на «Основные селекторы событий», чтобы выбрать отдельные сегменты или события во всех сегментах. Создав отслеживание, вы можете создать правило Event Bridge для захвата событий Cloudtrail API. Вот пример захвата создания объекта:
{
"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"]
}
}
Сообщение в блоге , анонсирующее эту функцию, вводит в заблуждение, требование активировать события данных нигде не упоминается :-\