Amazon Simple Queue Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

基本 Amazon SQS 策略示例

以下示例介绍 Amazon SQS 权限策略。

示例 1:允许用户创建队列

在以下示例中,我们为 Bob 创建了一条策略,允许他访问所有 Amazon SQS 操作,但是仅限于名称前缀为文本字符串 bob_queue_ 的队列。

Amazon SQS 不会自动向队列创建者授予使用该队列的权限。因此,除了 IAM 策略中的 CreateQueue 操作,我们还必须向 Bob 显式授予使用所有 Amazon SQS 操作的权限。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:*", "Resource": "arn:aws-cn:sqs:*:123456789012:bob_queue_*" }] }

示例 2:允许开发人员向共享队列写入消息

在以下示例中,我们为开发人员创建了一个组,并附加了一条策略,允许该组使用 Amazon SQS SendMessage 操作,但是仅限于属于特定 AWS 账户且名为 MyCompanyQueue 的队列。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws-cn:sqs:*:123456789012:MyCompanyQueue" }] }

您可以使用 * (而不是 SendMessage) 向委托人授予对共享队列执行以下操作的权限:ChangeMessageVisibilityDeleteMessageGetQueueAttributesGetQueueUrlReceiveMessageSendMessage

注意

虽然 * 包含其他权限类型提供的访问权限,但 Amazon SQS 会单独考虑这些权限。例如,可以向用户同时授予 *SendMessage 权限,即使 * 包含 SendMessage 提供的访问权限,也是如此。

此概念在您删除权限时也适用。如果委托人只有 * 权限,则请求删除 SendMessage 权限不会 为委托人留下除此以外的一切 权限。相反,该请求不起作用,因为委托人不具有显式 SendMessage 权限。要只为委托人留下 ReceiveMessage 权限,请先添加 ReceiveMessage 权限,然后删除 * 权限。

示例 3:允许管理人员获取队列的一般大小

在以下示例中,我们为管理人员创建了一个组,并附加了一条策略,允许该组对属于指定 AWS 账户的所有队列使用 Amazon SQS GetQueueAttributes 操作。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:GetQueueAttributes", "Resource": "*" }] }

示例 4:允许合作伙伴向指定队列发送消息

您可以使用 Amazon SQS 策略或 IAM 策略完成此任务。如果合作伙伴拥有 AWS 账户,这样会比使用 Amazon SQS 策略简单。但是,合作伙伴公司中拥有 AWS 安全凭证的任何用户都可以向该队列发送消息。如果需要仅向特定用户或应用程序授予访问权限,则必须像对待公司内部的用户那样对待合作伙伴,使用 IAM 策略而不是 Amazon SQS 策略。

本示例将执行以下操作:

  1. 创建名为 WidgetCo 的组,代表合作伙伴公司。

  2. 为合作伙伴公司中需要访问权限的特定用户或应用程序创建用户。

  3. 将用户添加到组。

  4. 挂载一条策略,仅允许该组对名为 WidgetPartnerQueue 的队列执行 SendMessage 操作。

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "sqs:SendMessage", "Resource": "arn:aws-cn:sqs:*:123456789012:WidgetPartnerQueue" }] }