如何使用 python 中的 aws-cdk 设置 Amazon S3 通知以在您的存储桶中发生某些事件时接收通知?

How do I set up Amazon S3 notification to receive notifications when certain events happen in your bucket using aws-cdk in python?

如何使用 python 中的 AWS-CDK 设置 Amazon S3 通知以在您的存储桶中发生某些事件时接收通知?当我使用下面的代码时,我可以设置订阅。但是当文件上传到 S3 时,它不会给我发送电子邮件。当我在 SNS 控制台中手动更新访问策略时,它起作用了,但我不知道如何在我的 CDK 中实现它。我还附上了我试图实现的 SNS 访问策略,但我没有得到它。这是我的 CDK 片段:

        #SNS

        sf_topic = aws_sns.Topic(
            self, "MyTopic",
            display_name="My Topic"
        )

        email=aws_sns_subscriptions.EmailSubscription("example@email.com")
        sf_topic.add_subscription(subscription=email)

        notification = aws_s3_notifications.SnsDestination(sf_topic)

        sf_bucket.add_event_notification(aws_s3.EventType.OBJECT_CREATED, notification)
{
 "Version": "2008-10-17",
 "Id": "example-ID",
 "Statement": [
  {
   "Sid": "s3-event-notifier",
   "Effect": "Allow",
   "Principal": {
     "Service": "s3.amazonaws.com"
   },
   "Action": [
    "SNS:Publish"
   ],
   "Resource": "<UPDATE-YOUR-SNS-ARN-HERE>",
   "Condition": {
      "ArnLike": {          
      "aws:SourceArn": "arn:aws:s3:*:*:<UPDATE-YOUR-BUCKET-NAME-HERE>"
    }
   }
  }
 ]
}

您应该创建一个 iam.PolicyStatement 并将其附加到您的 SNS 主题。

policyStatement = _iam.PolicyStatement(
    resources=[sf_topic.topic_arn],
    actions=[
        "sns:Publish"
    ],
    effect=_iam.Effect.ALLOW,
    conditions={"ArnLike": {"aws:SourceArn": sf_bucket.bucket_arn}}
)

sf_topic.add_to_resource_policy(policyStatement)