IAM JSON 策略元素:Resource
Resource
元素可指定声明涵盖的一个或多个对象。语句必须包含 Resource
或 NotResource
元素。您可使用 ARN 来指定资源。有关 ARN 格式的更多信息,请参见 IAM ARN。
每款产品均拥有其各自的资源。尽管您经常使用 ARN 来指定资源,但资源的 ARN 详情要取决于产品和资源。有关如何指定资源的信息,请参阅您编写的资源声明所对应的产品文档。
注意
某些服务不让您指定用于单个资源的操作,而是在 Action
或 NotAction
元素中列出的所有操作都适用于该服务中的所有资源。在这些情况下,您可以在 *
元素中使用通配符 Resource
。
下列示例适用于特定的 Amazon SQS 队列。
"Resource": "arn:aws:sqs:us-east-2:
account-ID-without-hyphens
:queue1"
以下示例引用了 Amazon Web Services 账户 中名为 Bob 的 IAM 用户。
注意
每个 IAM 用户名都是唯一的,不区分大小写。
"Resource": "arn:aws:iam::
account-ID-without-hyphens
:user/Bob"
在资源 ARN 中使用通配符
您可将通配符作为资源 ARN 的一部分。您可在任何 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.jpgDOC-EXAMPLE-BUCKET
/1/2/test/object.jpgDOC-EXAMPLE-BUCKET
/1/2/test/3/object.jpgDOC-EXAMPLE-BUCKET
/1/2/3/test/4/object.jpgDOC-EXAMPLE-BUCKET
/1///test///object.jpgDOC-EXAMPLE-BUCKET
/1/test/.jpgDOC-EXAMPLE-BUCKET
//test/object.jpgDOC-EXAMPLE-BUCKET
/1/test/
考虑前一个列表中的最后两个对象。Amazon S3 对象名称可以有效地以常规分隔符正斜杠 (/) 字符开头或结尾。虽然“/”可作为分隔符,但在资源 ARN 中使用此字符时没有特定意义。它将被视为与任何其他有效字符相同。ARN 将不与以下对象匹配:
DOC-EXAMPLE-BUCKET
/1-test/object.jpgDOC-EXAMPLE-BUCKET
/test/object.jpgDOC-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 元素:变量和标签。