授予将事件通知消息发布到目标的权限
您必须向 Amazon S3 主体授予调用相关 API 的必要权限,以将消息发布到 SNS 主题、SQS 队列或 Lambda 函数。这是为了让 Amazon S3 能够将事件通知消息发布到目标。
要解决向目标发布事件通知消息的问题,请参阅将 Amazon S3 事件通知发布到 Amazon Simple Notification Service 主题的疑难解答
授予调用 AWS Lambda 函数的权限
Amazon S3 通过调用 Lambda 函数并提供事件消息作为参数来将事件消息发布到 AWS Lambda。
使用 Amazon S3 控制台在 Amazon S3 存储桶上为 Lambda 函数配置事件通知时,控制台将在 Lambda 函数上设置必要的权限。这是为了让 Amazon S3 有权从存储桶调用函数。有关更多信息,请参阅 使用 Amazon S3 控制台启用和配置事件通知。
您还可以从 AWS Lambda 向 Amazon S3 授予调用 Lambda 函数的权限。有关更多信息,请参阅 AWS Lambda 开发人员指南中的教程:将 AWS Lambda 与 Amazon S3 结合使用。
授予将消息发布到 SNS 主题或 SQS 队列的权限
要授予 Amazon S3 权限以将消息发布到 SNS 主题或 SQS 队列,请将 AWS Identity and Access Management(IAM)策略附加到目标 SNS 主题或 SQS 队列。
有关如何将策略附加到 SNS 主题或 SQS 队列的示例,请参阅 演练:为存储桶配置通知(SNS 主题或 SQS 队列)。有关权限的更多信息,请参阅以下主题:
-
Amazon Simple Notification Service 开发人员指南中的 Amazon SNS 访问控制示例案例
-
Amazon Simple Queue Service 开发人员指南中的 Amazon SQS 中的 Identity and Access Management
目标 SNS 主题的 IAM 策略
以下是您附加到目标 SNS 主题的 AWS 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:*:*:" }, "StringEquals": { "aws:SourceAccount": "
amzn-s3-demo-bucket
bucket-owner-account-id
" } } } ] }
目标 SQS 队列的 IAM 策略
以下是您附加到目标 SQS 队列的 IAM 策略示例。有关如何使用此策略为事件通知设置目标 Amazon SQS 队列的说明,请参阅 演练:为存储桶配置通知(SNS 主题或 SQS 队列)。
要使用此策略,您必须更新 Amazon SQS 队列 ARN、存储桶名称和存储桶拥有者的 AWS 账户 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:*:*:
" } }
amzn-s3-demo-bucket
AWS KMS 密钥政策
如果 SQS 队列或 SNS 主题使用 AWS Key Management Service(AWS 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": "*" } ] }
有关 AWS KMS 密钥策略的更多信息,请参阅 AWS Key Management Service 开发人员指南中的使用 AWS KMS 中的密钥策略。
有关将服务器端加密与适用于 Amazon SQS 和 Amazon SNS 的 AWS KMS 结合使用的更多信息,请参阅以下内容:
-
mazon Simple Notification Service 开发人员指南中的密钥管理。
-
Amazon Simple Queue Service 开发人员指南中的密钥管理。
-
AWS 计算博客中的利用 AWS KMS 加密发布到 Amazon SNS 的消息
。