IAM JSON 策略元素:Resource
IAM 策略语句中的 Resource
元素指定了该语句适用的一个或多个对象。语句必须包含 Resource
或 NotResource
元素。
使用 Amazon 资源名称(ARN)指定资源。ARN 的格式取决于 AWS 服务 和所引用的特定资源。尽管 ARN 格式各不相同,但您始终使用 ARN 来标识资源。有关 ARN 格式的更多信息,请参见 IAM ARN。有关如何指定资源的信息,请参阅您编写的资源声明所对应的产品文档。
注意
有些 AWS 服务 不允许您为单个资源指定操作。在这些情况下,您在 Action
或 NotAction
元素中列出的任何操作都适用于该服务中的所有资源。如果是这种情况,则可以在 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 元素:变量和标签。