授予将事件通知消息发布到目标的权限 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

您必须向 Amazon S3 主体授予调用相关 API 的必要权限,以将消息发布到 SNS 主题、SQS 队列或 Lambda 函数。这是为了让 Amazon S3 能够将事件通知消息发布到目标。

要解决向目标发布事件通知消息的问题,请参阅将 Amazon S3 事件通知发布到 Amazon Simple Notification Service 主题的疑难解答

授予调用 Amazon Lambda 函数的权限

Amazon S3 通过调用 Lambda 函数并提供事件消息作为参数来将事件消息发布到 Amazon Lambda。

使用 Amazon S3 控制台在 Amazon S3 存储桶上为 Lambda 函数配置事件通知时,控制台将在 Lambda 函数上设置必要的权限。这是为了让 Amazon S3 有权从存储桶调用函数。有关更多信息,请参阅使用 Amazon S3 控制台启用和配置事件通知

您还可以从 Amazon Lambda 向 Amazon S3 授予调用 Lambda 函数的权限。有关更多信息,请参阅 Amazon Lambda 开发人员指南中的教程:将 Amazon Lambda 与 Amazon S3 结合使用

授予将消息发布到 SNS 主题或 SQS 队列的权限

要授予 Amazon S3 权限以将消息发布到 SNS 主题或 SQS 队列,请将 Amazon Identity and Access Management(IAM)策略附加到目标 SNS 主题或 SQS 队列。

有关如何将策略附加到 SNS 主题或 SQS 队列的示例,请参阅 演练:为存储桶配置通知(SNS 主题或 SQS 队列)。有关权限的更多信息,请参阅以下主题:

目标 SNS 主题的 IAM 策略

以下是您附加到目标 SNS 主题的 Amazon Identity and Access Management(IAM)策略示例。有关如何使用此策略为事件通知设置目标 Amazon SNS 主题的说明,请参阅 演练:为存储桶配置通知(SNS 主题或 SQS 队列)

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "Example SNS topic policy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SNS:Publish" ], "Resource": "SNS-topic-ARN", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }

目标 SQS 队列的 IAM 策略

以下是您附加到目标 SQS 队列的 IAM 策略示例。有关如何使用此策略为事件通知设置目标 Amazon SQS 队列的说明,请参阅 演练:为存储桶配置通知(SNS 主题或 SQS 队列)

要使用此策略,您必须更新 Amazon SQS 队列 ARN、存储桶名称和存储桶拥有者的 Amazon Web Services 账户 ID。

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "SQS:SendMessage" ], "Resource": "arn:aws:sqs:Region:account-id:queue-name", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:awsexamplebucket1" }, "StringEquals": { "aws:SourceAccount": "bucket-owner-account-id" } } } ] }

对于 Amazon SNS 和 Amazon SQS IAM 策略,您可以在策略中指定 StringLike 条件而不是 ArnLike 条件。

使用 ArnLike 时,ARN 的分区、服务、账户 ID、资源类型和部分资源 ID 等部分必须与请求上下文中的 ARN 完全匹配。只有区域和资源路径允许部分匹配。

当使用 StringLike 而不是 ArnLike 时,无论哪个部分使用通配符,匹配都会忽略 ARN 结构并允许部分匹配。有关更多信息,请参阅《IAM 用户指南》中的 IAM JSON 策略元素

"Condition": {        "StringLike": { "aws:SourceArn": "arn:aws:s3:*:*:bucket-name" } }

Amazon KMS 密钥政策

如果 SQS 队列或 SNS 主题使用 Amazon Key Management Service(Amazon KMS)客户托管密钥进行加密,则必须向 Amazon S3 服务主体授予处理加密主题和/或队列的权限。要向 Amazon S3 服务主体授予权限,请将以下语句添加到客户托管密钥策略中。

{ "Version": "2012-10-17", "Id": "example-ID", "Statement": [ { "Sid": "example-statement-ID", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "*" } ] }

有关 Amazon KMS 密钥策略的更多信息,请参阅 Amazon Key Management Service 开发人员指南中的使用 Amazon KMS 中的密钥策略

有关将服务器端加密与适用于 Amazon SQS 和 Amazon SNS 的 Amazon KMS 结合使用的更多信息,请参阅以下内容: