IAM JSON 策略元素:Resource - AWS Identity and Access Management

IAM JSON 策略元素:Resource

IAM 策略语句中的 Resource 元素指定了该语句适用的一个或多个对象。语句必须包含 ResourceNotResource 元素。

使用 Amazon 资源名称(ARN)指定资源。ARN 的格式取决于 AWS 服务 和所引用的特定资源。尽管 ARN 格式各不相同,但您始终使用 ARN 来标识资源。有关 ARN 格式的更多信息,请参见 IAM ARN。有关如何指定资源的信息,请参阅您编写的资源声明所对应的产品文档。

注意

有些 AWS 服务 不允许您为单个资源指定操作。在这些情况下,您在 ActionNotAction 元素中列出的任何操作都适用于该服务中的所有资源。如果是这种情况,则可以在 Resource 元素中使用通配符(*)。

下列示例适用于特定的 Amazon SQS 队列。

"Resource": "arn:aws:sqs:us-east-2:account-ID-without-hyphens:queue1"

以下示例引用了 AWS 账户 中名为 Bob 的 IAM 用户。

注意

Resource 元素中,IAM 用户名区分大小写。

"Resource": "arn:aws:iam::account-ID-without-hyphens:user/Bob"

在资源 ARN 中使用通配符

您可在 ARN(用冒号分隔的部分)的各分段中使用通配符(*?)来表示:

  • 字符的任意组合(*

  • 任何单个字符(?

您可以在每个分段中使用多个 *? 字符。如果 * 通配符是资源 ARN 分段的最后一个字符,则它可以扩展以匹配冒号边界以外的内容。我们建议您在 ARN 分段内使用通配符(*?),用冒号隔开。

注意

不得在服务分段中使用可识别 AWS 产品的通配符。有关 ARN 分段的更多信息,请参阅 使用 Amazon 资源名称(ARN)标识 AWS 资源

以下示例引用了其路径为 /accounting 的所有 IAM 用户。

"Resource": "arn:aws:iam::account-ID-without-hyphens:user/accounting/*"

下列示例适用于特定 Amazon S3 存储桶内的所有项目。

"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"

星号(*)字符可以展开以替换分段中的所有内容,包括像正斜杠(/)这样的字符,否则这些字符可能在给定服务命名空间中显示为分隔符。例如,请考虑以下 Amazon S3 ARN,因为相同的通配符扩展逻辑适用于所有服务。

"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*/test/*"

ARN 中的通配符适用于存储桶中的以下所有对象,而不仅仅是列出的第一个对象。

amzn-s3-demo-bucket/1/test/object.jpg amzn-s3-demo-bucket/1/2/test/object.jpg amzn-s3-demo-bucket/1/2/test/3/object.jpg amzn-s3-demo-bucket/1/2/3/test/4/object.jpg amzn-s3-demo-bucket/1///test///object.jpg amzn-s3-demo-bucket/1/test/.jpg amzn-s3-demo-bucket//test/object.jpg amzn-s3-demo-bucket/1/test/

考虑前一个列表中的最后两个对象。Amazon S3 对象名称可以常规分隔符正斜杠(/)字符开头或结尾。虽然 / 可作为分隔符,但在资源 ARN 中使用此字符时没有特定意义。它将被视为与任何其他有效字符相同。ARN 将不与以下对象匹配:

amzn-s3-demo-bucket/1-test/object.jpg amzn-s3-demo-bucket/test/object.jpg amzn-s3-demo-bucket/1/2/test.jpg

指定多个资源

您可以使用 ARN 数组在 Resource 元素中指定多个资源。下列示例适用于两个 DynamoDB 表。

"Resource": [ "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/books_table", "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/magazines_table" ]

在资源 ARN 中使用策略变量

Resource 元素中,您可以在标识特定资源的 ARN 部分 (即,ARN 尾部) 中使用 JSON 策略变量。例如,您可以使用键 {aws:username} 作为资源 ARN 的一部分,以表示应包含当前用户的名称作为资源名称的一部分。下列示例显示如何在 {aws:username} 元素中使用 Resource 键。该策略允许访问匹配当前用户名称的 Amazon DynamoDB 表。

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "dynamodb:*", "Resource": "arn:aws:dynamodb:us-east-2:account-id:table/${aws:username}" } }

有关 JSON 策略变量的更多信息,请参阅IAM policy 元素:变量和标签