Amazon Simple Queue Service
开发人员指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

共享的队列

Amazon SQS 包含共享您队列的方法,共享之后,其他人便可以使用访问控制策略中设置的权限来使用这些队列。通过权限可以使其他用户能够以某种特定的方式来使用您的队列。策略 是包含您授予的权限的实际文档。

Amazon SQS 提供两种设置策略的方法:简单 API 和高级 API。在简单 API 中,Amazon SQS 会为您生成访问控制策略。在高级 API 中,您可以创建访问控制策略。

共享队列的简单 API

用于共享队列的简单 API 有两个操作:

通过简单 API,Amazon SQS 会基于您在 AddPermission 操作中包含的信息,使用所需语言编写策略。但是,Amazon SQS 生成的策略范围有限。您可以向委托人授予权限,但是无法指定限制。

共享队列的高级 API

通过高级 API,您可以自己使用 IAM 策略语言直接编写策略,然后通过 SetQueueAttributes 操作上传策略。高级 API 允许您拒绝访问或应用更精细的访问限制 (例如,基于时间或基于 IP 地址)。

如果您选择编写自己的策略,则需要了解策略的构造方式。有关策略的完整参考信息,请参阅“使用 Amazon SQS Access Policy Language创建自定义策略”。有关策略示例,请参阅“Amazon SQS 访问策略示例”。

了解资源级权限

权限是您向委托人 (接收权限的用户) 授予的访问类型。您可以为每个权限提供一个用于识别该权限的标签。如果您将来要删除该权限,则可以使用该标签来识别该权限。如果您要查看队列中有哪些权限,请使用 GetQueueAttributes 操作。Amazon SQS 会返回整个策略 (包含所有权限)。Amazon SQS 支持下表所示的权限类型。

注意

要允许匿名访问,您必须编写自己的策略。

许可 描述
* 此权限类型可以向委托人授予对共享队列执行以下操作的权限:更改消息的可见性、删除消息、获取队列的属性、获取队列的 URL、接收消息和发送消息。
ChangeMessageVisibility 此权限类型可以授予延长或终止指定消息读取锁定超时的权限。ChangeMessageVisibilityBatch 继承了与 ChangeMessageVisibility 关联的权限。有关可见性超时的更多信息,请参阅“可见性超时”。有关更多信息,请参阅 ChangeMessageVisibility 操作。
DeleteMessage 此权限类型可以授予从队列中删除消息的权限。DeleteMessageBatch 继承了与 DeleteMessage 关联的权限。有关更多信息,请参阅 DeleteMessage 操作。
GetQueueAttributes 此权限类型可以授予获取所有队列属性 (只能由队列拥有者访问的策略除外) 的权限。有关更多信息,请参阅 GetQueueAttributes 操作。
GetQueueUrl 此权限类型可以授予获取队列的 URL 的权限。有关更多信息,请参阅 GetQueueUrl 操作。
ReceiveMessage 此权限类型可以授予接收队列中消息的权限。有关更多信息,请参阅 ReceiveMessage 操作。
SendMessage 此权限类型可以授予向队列发送消息的权限。SendMessageBatch 继承了与 SendMessage 关联的权限。有关更多信息,请参阅 SendMessage 操作。

注意

如果为 SendMessageDeleteMessageChangeMessageVisibility 设置权限,则系统也会为这些操作的相应批处理版本 (SendMessageBatchDeleteMessageBatchChangeMessageVisibilityBatch) 设置权限。不允许显式对 SendMessageBatchDeleteMessageBatchChangeMessageVisibilityBatch 设置权限。

Amazon SQS 将各种不同权限类型的权限视为单独的权限,即使 * 包含其他权限类型提供的访问权限也是如此。例如,可以向用户同时授予 *SendMessage 权限,即使 * 包含 SendMessage 提供的访问权限也是如此。

此概念在您删除权限时适用。如果委托人只有 * 权限,则请求删除 SendMessage 权限不会为委托人留下“除此以外的一切”权限。相反,该请求不会执行任何操作,因为委托人之前不具有显式 SendMessage 权限。

如果您要删除 * 并且只为委托人留下 ReceiveMessage 权限,请先添加 ReceiveMessage 权限,然后删除 * 权限。

注意

您可以为每个权限提供一个用于识别该权限的标签。如果您将来要删除该权限,则可以使用该标签来识别该权限。

注意

如果您要查看队列中有哪些权限,请使用 GetQueueAttributes 操作。将返回整个策略 (包含所有权限)。

授予对队列的匿名访问权限

您可以向匿名用户授予共享队列访问权限。此类访问权限无需任何签名或访问密钥 ID。

要允许匿名访问,您必须编写自己的策略,并将 Principal 设置为 *。有关编写您自己的策略的信息,请参阅“使用 Amazon SQS Access Policy Language创建自定义策略”。

重要

队列所有者负责与队列关联的所有成本。因此,最好是通过其他某种方式 (例如,按时间或按 IP 地址) 限制匿名访问。