我已在AWS事件桥中创建了一个事件规则,其事件模式为:
{
"source": [
"aws.s3"
]
}
Target 是 CloudWatch 的日志组。 现在,当我在存储桶级别更改某些内容,例如存储桶权限时,我会在 CloudWatch 中看到捕获的事件,但是当我添加/删除 S3 存储桶中的文件时,什么也没有发生。这里出了什么问题?
我已在AWS事件桥中创建了一个事件规则,其事件模式为:
{
"source": [
"aws.s3"
]
}
Target 是 CloudWatch 的日志组。 现在,当我在存储桶级别更改某些内容,例如存储桶权限时,我会在 CloudWatch 中看到捕获的事件,但是当我添加/删除 S3 存储桶中的文件时,什么也没有发生。这里出了什么问题?
您可以通过捕获对象事件并确保在存储桶级别启用了从S3到Event Bridge的S3通知,或者通过CloudTrail API日志记录来向Event Bridge发送对象级事件。如果您想要捕获几个存储桶的事件,则第一种方法更容易。但是,如果您想要捕获所有或许多存储桶的事件,则建议使用CloudTrail方法。
要将对象级事件从S3发送到Event Bridge,请确保在存储桶属性下启用了向Event Bridge的通知:
如果您正在使用CloudFormation,则可以通过NotificationConfiguration
属性进行访问。{
"detail-type": ["Object Created"],
"source": ["aws.s3"],
"detail": {
"bucket": {
"name": ["my-bucket"]
}
}
}
如果要捕获多个存储桶的S3事件,则首选使用CloudTrail API方法。正如@Marcin的回答中所指出的,您必须创建一个捕获S3数据事件的CloudTrail trail。在创建trail时,在“选择日志事件”部分,最好切换到“基本事件选择器”,以选择单个存储桶或跨所有存储桶的事件。一旦您创建了一个trail,那么您就可以创建一个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"]
}
}