IAM JSON 策略元素:Resource - Amazon Identity and Access Management
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

IAM JSON 策略元素:Resource

Resource 元素可指定声明涵盖的一个或多个对象。语句必须包含 ResourceNotResource 元素。您可使用 ARN 来指定资源。有关 ARN 格式的更多信息,请参见 IAM ARN

每款产品均拥有其各自的资源。尽管您经常使用 ARN 来指定资源,但资源的 ARN 详情要取决于产品和资源。有关如何指定资源的信息,请参阅您编写的资源声明所对应的产品文档。

注意

某些服务不让您指定用于单个资源的操作,而是在 ActionNotAction 元素中列出的所有操作都适用于该服务中的所有资源。在这些情况下,您可以在 * 元素中使用通配符 Resource

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

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

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

注意

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

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

在资源 ARN 中使用通配符

您可将通配符作为资源 ARN 的一部分。您可以在 ARN 分段(以冒号分隔的部分)中使用通配符(* 和 ?),表示任意带有星号(*)的字符组合以及任意带有问号(?)的单个字符。您可以在每个分段中使用多个 * 或 ? 字符。如果通配符(*)是资源 ARN 分段的最后一个字符,则它可以扩展以匹配冒号边界以外的内容。我们建议您在 ARN 分段内使用通配符(* 和 ?),用冒号隔开。

注意

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

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

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

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

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"

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

"Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*/test/*"

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

DOC-EXAMPLE-BUCKET/1/test/object.jpg DOC-EXAMPLE-BUCKET/1/2/test/object.jpg DOC-EXAMPLE-BUCKET/1/2/test/3/object.jpg DOC-EXAMPLE-BUCKET/1/2/3/test/4/object.jpg DOC-EXAMPLE-BUCKET/1///test///object.jpg DOC-EXAMPLE-BUCKET/1/test/.jpg DOC-EXAMPLE-BUCKET//test/object.jpg DOC-EXAMPLE-BUCKET/1/test/

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

DOC-EXAMPLE-BUCKET/1-test/object.jpg DOC-EXAMPLE-BUCKET/test/object.jpg DOC-EXAMPLE-BUCKET/1/2/test.jpg

指定多个资源

您可指定多个资源。下列示例适用于两个 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 元素:变量和标签