Overview of managing access in Amazon SQS - Amazon Simple Queue Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Overview of managing access in Amazon SQS

每个 AWS 资源都归某个 AWS 账户所有,创建和访问资源的权限由权限策略进行管理。账户管理员可以向不同的 IAM 身份(用户、组和角色)附加权限策略。某些服务(如 Amazon SQS)也支持向资源附加权限策略。

注意

一个 account administrator (或管理员用户)是具有管理权限的用户。有关更多信息,请参阅 IAM 用户指南 中的 IAM 最佳实践

在授予权限时,由您指定哪些用户获得权限,获得对哪些资源的权限,以及您允许对这些资源执行哪些具体操作。

Amazon Simple Queue Service resource and operations

在 Amazon SQS,唯一的资源是 queue。在策略中,使用Amazon资源名称(ARN)标识策略适用的资源。以下资源具有与之关联的唯一 ARN:

资源类型 ARN 格式
Queue arn:aws-cn:sqs:region:account_id:queue_name

以下是队列的 ARN 格式的示例:

  • An ARN for a queue named my_queue in the 美国东部(俄亥俄州) region, belonging to AWS Account 123456789012:

    arn:aws-cn:sqs:us-east-2:123456789012:my_queue
  • An ARN for a queue named my_queue in each of the different regions that Amazon SQS supports:

    arn:aws-cn:sqs:*:123456789012:my_queue
  • An ARN that uses * or ? as a wildcard for the queue name. In the following examples, the ARN matches all queues prefixed with my_prefix_:

    arn:aws-cn:sqs:*:123456789012:my_prefix_*

调用 GetQueueAttributes 操作可以获取现有队列的 ARN 值。QueueArn 属性的值即为队列的 ARN。有关ARNS的更多信息,请参阅 IAM 阿尔斯IAM 用户指南.

Amazon SQS 提供用于处理队列资源的一组操作。有关更多信息,请参阅 Amazon SQS API permissions: Actions and resource reference。)

Understanding resource ownership

AWS 账户对在该账户下创建的资源具有所有权,而无论创建资源的人员是谁。具体来说,资源所有者是 AWS 账户 principal entity (即,根帐户, IAM 用户,或 IAM 角色),用于验证资源创建请求。以下示例说明了它的工作原理:

  • If you use the root account credentials of your AWS account to create an Amazon SQS queue, your AWS account is the owner of the resource (in Amazon SQS, the resource is the Amazon SQS queue).

  • If you create an IAM user in your AWS account and grant permissions to create a queue to the user, the user can create the queue. However, your AWS account (to which the user belongs) owns the queue resource.

  • If you create an IAM role in your AWS account with permissions to create an Amazon SQS queue, anyone who can assume the role can create a queue. Your AWS account (to which the role belongs) owns the queue resource.

Managing access to resources

A permissions policy 描述授予账户的权限。以下部分介绍创建权限策略的可用选项。

注意

本节介绍如何在 Amazon SQS 范围内使用 IAM。它不提供有关 IAM 服务的详细信息。完成 IAM 文档,请参阅 什么是 IAM?IAM 用户指南。有关 IAM 策略语法和描述,请参阅 AWS IAM 政策参考IAM 用户指南.

附加的政策 IAM 标识称为 identity-based 与资源相关的政策(IAM政策)和政策被称为 resource-based 政策。

Identity-based policies (IAM policies and Amazon SQS policies)

可通过两种方式向用户授予访问 Amazon SQS 队列的权限:使用 Amazon SQS 策略系统和使用 IAM 策略系统。您可以使用任一系统或这两种系统来将策略附加到用户或角色。在大多数情况下,使用任一系统都能获得相同的结果。例如,您可以执行以下操作:

  • Attach a permission policy to a user or a group in your account – To grant user permissions to create an Amazon SQS queue, attach a permissions policy to a user or group that the user belongs to.

  • Attach a permission policy to a user in another AWS account – To grant user permissions to create an Amazon SQS queue, attach an Amazon SQS permissions policy to a user in another AWS account.

    跨账户权限不适用于以下操作:

  • Attach a permission policy to a role (grant cross-account permissions) – To grant cross-account permissions, attach an identity-based permissions policy to an IAM role. For example, the AWS account A administrator can create a role to grant cross-account permissions to AWS account B (or an AWS service) as follows:

    • The account A administrator creates an IAM role and attaches a permissions policy—that grants permissions on resources in account A—to the role.

    • The account A administrator attaches a trust policy to the role that identifies account B as the principal who can assume the role.

    • The account B administrator delegates the permission to assume the role to any users in account B. This allows users in account B to create or access queues in account A.

      注意

      If you want to grant the permission to assume the role to an AWS service, the principal in the trust policy can also be an AWS service principal.

有关使用 IAM 委派权限的更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/access.htmlIAM 用户指南 中的访问权限管理。

尽管 Amazon SQS 使用 IAM 策略,但它拥有自己的策略基础架构。您可以对队列使用 Amazon SQS 策略,以指定哪些 AWS 账户拥有访问该队列的权限。您可以指定访问类型和条件 (例如,条件是如果请求早于 2010 年 12 月 31 日,即授予使用 SendMessageReceiveMessage 的权限)。您可以为其授予权限的特定操作是整个 Amazon SQS 操作列表的子集。如果编写 Amazon SQS 策略并指定 * 以“允许任何 Amazon SQS 操作”,就意味着用户可以在此子集中执行所有操作。

下图说明了这些基本 Amazon SQS 策略中涵盖操作子集的一个策略的概念。该策略用于 queue_xyz,并且向 AWS 账户 1 和 AWS 账户 2 授予对指定队列使用任何允许的操作的权限。

注意

该策略中的资源被指定为 123456789012/queue_xyz,其中 123456789012 是拥有该队列的账户的 AWS 账户 ID。

介绍 IAM 以及 UsersAmazon Resource Names (ARNs),有关SQS政策的几个方面。以下示意图和表格描述了这些变化。

有关向不同帐户中用户提供权限的信息,请参阅 教程: 授权访问权限 AWS 账户使用 IAM 角色IAM 用户指南.

包含的操作子集 * 已扩展。有关允许的操作的列表,请参阅Amazon SQS API permissions: Actions and resource reference

您可以使用Amazon资源名称(ARN)来指定资源, IAM 政策。有关 Amazon SQS 队列的 ARN 格式的信息,请参阅“Amazon Simple Queue Service resource and operations”。

例如,根据 Amazon SQS 上图中的政策,任何拥有安全凭证的人员 AWS 账户1或 AWS 帐户2可以访问 queue_xyz。此外,您自己的用户Bob和Susan AWS 账户(带ID 123456789012)可以访问队列。

在推出 IAM 之前,Amazon SQS 会自动向某个队列的创建者授予对该队列的完全控制权限(即访问该队列中所有可能的 Amazon SQS 操作)。现在,除非创建者使用 AWS 安全凭证,否则上述情况将不再出现。任何有权创建队列的用户如希望对所创建的队列执行任何操作,还必须拥有使用其他 Amazon SQS 操作的权限。

下面是一个示例策略,该策略允许用户使用所有 Amazon SQS 操作,但只能对其名称的前缀为文字字符串 bob_queue_ 的队列使用。

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

有关详细信息,请参阅 Using identity-based policies with Amazon SQS,和 身份(用户、组和角色)IAM 用户指南.

Specifying policy elements: Actions, effects, resources, and principals

对于每种 Amazon Simple Queue Service 资源,该服务都定义一组操作。为授予这些操作的权限,Amazon SQS 定义一组可以在策略中指定的操作。

注意

执行一个 操作可能需要多个操作的权限。在授予特定操作的权限时,您也可以标识允许或拒绝对其执行操作的资源。

以下是最基本的策略元素:

  • Resource – In a policy, you use an Amazon Resource Name (ARN) to identify the resource to which the policy applies.

  • Action – You use action keywords to identify resource actions that you want to allow or deny. For example, the sqs:CreateQueue permission allows the user to perform the Amazon Simple Queue Service CreateQueue action.

  • Effect – You specify the effect when the user requests the specific action—this can be either allow or deny. If you don't explicitly grant access to a resource, access is implicitly denied. You can also explicitly deny access to a resource, which you might do to make sure that a user can't access it, even if a different policy grants access.

  • Principal – In identity-based policies (IAM policies), the user that the policy is attached to is the implicit principal. For resource-based policies, you specify the user, account, service, or other entity that you want to receive permissions (applies to resource-based policies only).

要了解 Amazon SQS 策略语法和说明的更多信息,请参阅 IAM 中的 IAM 用户指南AWS 策略参考。

有关所有 Amazon Simple Queue Service 操作及其适用资源的表格,请参阅Amazon SQS API permissions: Actions and resource reference

Specifying conditions in a policy

当您授予权限时,可使用 Amazon SQS Access Policy Language来指定规定策略何时生效的条件。例如,您可能希望策略仅在特定日期后应用。有关指定策略语言条件的详细信息,请参阅 条件IAM 用户指南.

要表示条件,您可以使用预定义的条件键。没有特定于 Amazon SQS 的条件键。但是, AWS适用于 Amazon SQS. 目前, Amazon SQS 仅支持有限的条件密钥子集 IAM. 请参阅Amazon SQS API permissions: Actions and resource reference