

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将策略用于 Amazon SQS
<a name="sqs-using-identity-based-policies"></a>

本主题提供基于身份的策略示例，在这些示例中，账户管理员可以向 IAM 身份（用户、组和角色）附加权限策略。

**重要**  
我们建议您首先阅读以下介绍性主题，这些主题讲解了管理 Amazon Simple Queue Service 资源访问权限的基本概念和选项。有关更多信息，请参阅 [管理 Amazon SQS 中的访问权限概述](sqs-overview-of-managing-access.md)。  
除 `ListQueues` 外，所有 Amazon SQS 操作均支持资源级权限。有关更多信息，请参阅 [Amazon SQS API 权限：操作和资源参考](sqs-api-permissions-reference.md)。

## 使用 Amazon SQS 和 IAM 策略
<a name="sqs-using-sqs-and-iam-policies"></a>

您可以通过两种方式向用户授予访问 Amazon SQS 资源的权限：使用 Amazon SQS 策略系统（基于资源的策略）和使用 IAM 策略系统（基于身份的策略）。您可以使用一种或两种方法，但 `ListQueues` 操作除外，这是一种区域性权限，只能在 IAM 策略中设置。

例如，下图显示了等效的 IAM 策略和 Amazon SQS 策略。IAM 策略授予对 Amazon SQS 的权限`ReceiveMessage`和对您 Amazon 账户`queue_xyz`中调用的队列的`SendMessage`操作，该策略将附加到名为 Bob 和 Susan 的用户（Bob 和 Susan 拥有策略中规定的权限）。此 Amazon SQS 策略还向 Bob 和 Susan 授予对同一队列进行 `ReceiveMessage` 和 `SendMessage` 操作的权限。

**注意**  
以下示例显示了不带条件的简单策略。您可以在上述任一策略中指定特定条件，并获得同样的结果。

![\[IAM 策略与等效的 Amazon SQS 策略的对比图。IAM 策略授予对 Amazon SQS 的权限ReceiveMessage和对您 Amazon 账户queue_xyz中调用的队列的SendMessage操作，该策略将附加到名为 Bob 和 Susan 的用户（Bob 和 Susan 拥有策略中规定的权限）。此 Amazon SQS 策略还向 Bob 和 Susan 授予对同一队列进行 ReceiveMessage 和 SendMessage 操作的权限。\]](http://docs.amazonaws.cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-iam-policies-equivalent.png)


IAM 和 Amazon SQS 政策之间有一个主要区别：Amazon SQS 策略系统允许您向 Amazon 其他账户授予权限，而 IAM 不允许。

您可以自行决定如何综合使用上述两种系统来管理您的权限。以下示例展示这两种策略系统是如何共同运行的。
+ 在第一个示例中，Bob 同时拥有 IAM 策略和适用于其账户的 Amazon SQS 策略。IAM 策略向其账户授予对 `queue_xyz` 执行 `ReceiveMessage` 操作的权限，而 Amazon SQS 策略向其账户授予对同一队列执行 `SendMessage` 操作的权限。下图阐明了这一概念。  
![\[Amazon SQS 策略与 IAM 策略的各个组成部分的对比图。在第一个示例中，Bob 同时拥有 IAM 策略和适用于其账户的 Amazon SQS 策略。IAM 策略向其账户授予对 queue_xyz 执行 ReceiveMessage 操作的权限，而 Amazon SQS 策略向其账户授予对同一队列执行 SendMessage 操作的权限。\]](http://docs.amazonaws.cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-iam-policies-union.png)

  如果 Bob 向 `queue_xyz` 发送 `ReceiveMessage` 请求，则 IAM 策略将允许执行该操作。如果 Bob 向 `queue_xyz` 发送 `SendMessage` 请求，则 Amazon SQS 策略将允许执行该操作。
+ 在第二个示例中，Bob 滥用他对 `queue_xyz` 的访问权限，因此有必要删除他对该队列的所有访问权限。最简单的方法是添加一个策略，拒绝他访问该队列的所有操作。此策略会覆盖另外两个策略，因为显式 `deny` 始终覆盖 `allow`。有关策略评估逻辑的更多信息，请参阅[将自定义策略与 Amazon SQS 访问策略语言配合使用](sqs-creating-custom-policies.md)。下图阐明了这一概念。  
![\[展示使用 Amazon SQS 策略替换 IAM 策略的图。Bob 滥用他对 queue_xyz 的访问权限，因此有必要删除他对该队列的所有访问权限。最简单的方法是添加一个策略，拒绝他访问该队列的所有操作。此策略会覆盖另外两个策略，因为显式 deny 始终覆盖 allow。\]](http://docs.amazonaws.cn/AWSSimpleQueueService/latest/SQSDeveloperGuide/images/sqs-iam-policies-deny-override.png)

  您还可以向 Amazon SQS 策略中添加一条额外语句，拒绝 Bob 以任何方式访问该队列。添加一条 IAM 策略拒绝 Bob 访问该队列也具有同样的效果。有关涉及 Amazon SQS 操作和资源的策略示例，请参阅 [Amazon SQS 策略的基本示例](sqs-basic-examples-of-sqs-policies.md)。有关编写 Amazon SQS 策略的更多信息，请参阅[将自定义策略与 Amazon SQS 访问策略语言配合使用](sqs-creating-custom-policies.md)。

## 使用 Amazon SQS 控制台所需的权限
<a name="sqs-console-permissions"></a>

希望使用 Amazon SQS 控制台的用户必须具有在用户的 Amazon Web Services 账户中使用 Amazon SQS 队列的最小权限集。例如，用户必须具有调用 `ListQueues` 操作的权限才能列出队列，或者必须具有调用 `CreateQueue` 操作的权限才能创建队列。要将 Amazon SQS 队列订阅到 Amazon SNS 主题，则除了 Amazon SQS 权限之外，控制台还需要针对 Amazon SNS 操作的权限。

如果创建比必需的最低权限更为严格的 IAM 策略，对于附加了该 IAM 策略的用户，控制台可能无法按预期方式运行。

对于仅调用 Amazon CLI 或 Amazon SQS 操作的用户，您无需为其设置最低控制台权限。