我希望每次将文件上传到 S3 存储桶时都调用某个 HTTPS 服务。
我已经创建了 S3 存储桶和一个 SNS 主题,其中包含一个经过验证的订阅,HTTPS 服务作为端点。我可以通过 AWS UI 在 SNS 主题上发布消息,并看到 HTTPS 服务按预期调用。在 S3 存储桶上,我创建了一个事件,它应该链接存储桶和主题。在我第一次尝试时出现错误,因为存储桶不允许写入主题,因此请参阅文档,我将主题访问策略更改为:
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "sns:Publish",
"Resource": "arn:aws:sns:eu-central-1:TOPIC_ID:OrderUpdates",
"Condition": {
"StringEquals": {
"AWS:SourceAccount": "ACCOUNT_ID"
},
"ArnLike": {
"AWS:SourceArn": "arn:aws:s3:*:*:*"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
其中 TOPIC_ID 是在 AWS UI 中显示主题时可以看到的主题所有者 ID,而 ACCOUNT_ID 是在 AWS UI 中的帐户设置下显示的帐户 ID。主题访问策略中的这一更改允许我在存储桶上创建事件:

当我调用 API 方法 getBucketNotificationConfiguration 时,我得到:
{
"TopicConfigurations": [
{
"Id": "OrderFulfilled",
"TopicArn": "arn:aws:sns:eu-central-1:TOPIC_ID:OrderUpdates",
"Events": [
"s3:ObjectCreated:*"
] …Run Code Online (Sandbox Code Playgroud)