📌  相关文章
📜  Amazon Web Services – 配置 Amazon S3 事件通知

📅  最后修改于: 2022-05-13 01:57:46.356000             🧑  作者: Mango

Amazon Web Services – 配置 Amazon S3 事件通知

Amazon S3 通知功能使您能够在存储桶内发生特定事件时接收通知。要获取通知,首先,添加一个通知配置,该配置读取您希望 Amazon S3 发布的事件以及 Amazon S3 将发送通知的目的地。此配置存储在与存储桶关联的通知子资源中。

事件通知的类型:

目前,Amazon S3 可以为以下支持的事件发布通知:

  1. 新对象创建事件— Amazon S3 在创建对象时发送通知。它支持多个 API 来创建对象,例如 Put、Post、Copy 和 Multipart Upload。如果任何对象创建事件发生,我们也可以使用通配符 (s3:ObjectCreated:*)。
  2. 对象删除事件— Amazon S3 在删除对象时发送通知。它支持两个删除选项。一种是永久删除,另一种是删除已创建标记。如果任何对象删除事件发生,我们也可以使用通配符 (s3:ObjectRemoved:*)。
  3. 恢复对象事件— Amazon S3 允许恢复归档到 S3 Glacier 存储类的对象。您要求在对象恢复完成后通知您。它有两种类型。第一个是已启动还原,另一个是已完成还原。如果任何对象恢复事件发生,我们也可以使用通配符 (s3:ObjectRestore:*)。
  4. 减少冗余存储 (RRS) 对象丢失事件— 当 Amazon S3 检测到 RRS 存储类的对象丢失时,它会通过发送消息进行通知。
  5. 复制事件— Amazon S3 发送两个事件通知。一,当对象超过 15 分钟阈值时对象复制失败,对象在 15 分钟阈值后复制时,以及对象不再被复制指标跟踪时。另一个当该对象复制到目标区域时。如果发生任何对象复制事件,我们还可以使用通配符 (s3:Replication:*)。

下图显示了 AWS 中可用的事件类型。

支持的目的地:

  1. Amazon Simple Notification Service (Amazon SNS) 主题– Amazon SNS 是一种完全托管的灵活推送消息服务。使用此服务,您可以将消息推送到移动设备、电子邮件或分布式服务。 SNS 可以发布一次消息,也可以发送一次或多次。
  2. Amazon Simple Queue Service (Amazon SQS) 队列– Amazon SQS 是一项可扩展且完全托管的消息队列服务。 SQS 可用于传输任何数量的数据,而无需其他服务始终可用。它用于解耦服务。
  3. AWS Lambda AWS Lambda 是一种无服务器计算服务,可让您轻松构建快速响应新信息的应用程序。 AWS Lambda 运行书面代码以响应图像上传、应用内活动、网站点击或连接设备的输出等事件。

支持的目的地如下图所示。

授予将事件通知消息发布到目标的权限

要让 Amazon S3 将事件通知消息发布到目标,您必须授予 Amazon S3 委托人调用相关 API 以将消息发布到 SNS 主题、SQS 队列或 Lambda函数所需的权限。

  • 授予调用 AWS Lambda函数的权限– Amazon S3 调用 Lambda函数并提供事件消息作为参数以将事件消息发布到 AWS Lambda。在 Amazon S3 控制台中将 lambda 设置为接收事件通知消息的目标时,控制台会设置 Lambda函数所需的权限,以便 Amazon S3 存储桶有权调用该函数。
  • 授予将消息发布到 SNS 主题或 SQS 队列的权限 –要授予 Amazon S3 存储桶权限以将消息发布到 SNS 主题或 SQS 队列,您将 AWS Identity and Access Management (IAM) 策略附加到目标 SNS 主题或 SQS队列。该策略采用 JSON 格式。 SNS 主题策略和 SQS 策略示例如下:

SNS 策略示例:

{
 "Version": "2012-10-17",
 "Id": "SNS Topic Policy",
 "Statement": [
  {
   "Sid": "Geeksforgeeks SNS",
   "Effect": "Allow",
   "Principal": {
     "Service": "s3.amazonaws.com"  
   },
   "Action": [
    "SNS:Publish"
   ],
   "Resource": "arn:aws:sns:Region:amazon-account-id:geeksforgeeksSNS",
   "Condition": {
      "ArnLike": { "aws:SourceArn": "arn:aws:s3:::geeksforgeeks" },
      "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
   }
  }
 ]
}

SQS 策略示例:

{
 "Version": "2012-10-17",
 "Id": "SQS Policy",
 "Statement": [
  {
   "Sid": "Geeksforgeeks SQS",
   "Effect": "Allow",
   "Principal": {
     "Service": "s3.amazonaws.com"  
   },
   "Action": [
    "SQS:SendMessage"
   ],
   "Resource": "arn:aws:sqs:Region:amazon-account-id:geeksforgeeksSQS",
   "Condition": {
      "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:geeksforgeeks" },
      "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" }
   }
  }
 ]
}

启用事件通知:

启用通知是存储桶级别的操作。您将通知配置信息存储在与存储桶关联的事件通知子资源中。

事件通知可以通过两种方式设置:

  1. Amazon S3 控制台 –您可以简单地选择要接收任何类型活动消息的存储桶。直接到存储桶的属性选项卡,您可以在事件通知部分设置通知。
  2. 以编程方式使用 AWS 开发工具包 – Amazon S3 将通知配置作为 XML 存储在与存储桶关联的通知子资源中。