AWS Identity and Access Management
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

IAM 标识符

IAM 针对用户、组、策略、角色及服务器证书使用几个不同的标识符。本部分主要介绍标识符及您何时使用每个标识符。

易记名称和路径

在您创建用户、角色、组或策略时,或在您上传服务器证书时,您可为其取一个友好名称,例如 Bob、TestApp1、Developers、ManageCredentialsPermissions 或 ProdServerCert。

如果您使用 IAM API 或 AWS Command Line Interface (AWS CLI) 创建 IAM 实体,则还可为实体提供可选路径。您可以使用单个路径,或嵌套多个路径,就像它们是文件夹结构一样。例如,可使用嵌套路径 /division_abc/subdivision_xyz/product_1234/engineering/ 以匹配贵公司的组织结构。您可以随后创建策略以允许该路径的所有用户访问策略模拟器 API。要查看此策略,请参阅 IAM:基于用户路径访问策略模拟器 API。有关如何使用路径的其他示例,请参阅 IAM ARN

因为您为用户和群组指定了相同的路径,因此无法自动将该用户归入该群组中。例如,您可创建一个 Developers 群组,并指定其路径为 /division_abc/subdivision_xyz/product_1234/engineering/。因为您创建了一个名为 Bob 的用户,并为其指定了相同的路径,因此无法自动将 Bob 归入 Developers 群组。IAM 不会基于路径而强行在用户或群组之间划分边界。具有不同路径的用户可以使用相同的资源 (假设他们已获权使用这些资源)。有关名称限制的信息,请参阅 IAM 实体和对象的限制

IAM ARN

大多数资源都有易记名称 (例如,名为 Bob 的用户或名为 Developers 的群组)。但是,访问策略语言要求您使用以下 Amazon 资源名称 (ARN) 格式指定资源。

arn:partition:service:region:account:resource

其中:

  • partition 用于标识资源所在的分区。对于标准 AWS 区域,分区是 aws。如果您有资源位于其他分区,则分区为 aws-partitionname。例如,位于 中国(北京) 区域的资源的分区为 aws-cn

  • service 标识 AWS 产品。对于 IAM 资源,它始终是 iam

  • region 是资源所在的区域。对于 IAM 资源,它始终留为空白。

  • account 是不带连字符的 AWS 账户 ID (例如,123456789012)。

  • resource 是按名称标识特定资源的部分。

您可以在 IAM 中对用户 (IAM 和联合身份用户)、组、角色、策略、实例配置文件、和服务器证书使用 ARN。下表提供了用于每个类型的 ARN 格式并列举了示例。由于 IAM 资源为全球资源,因此 ARN 的区域部分为空。

注意

以下示例中有很多在 ARN 的资源部分中包含路径。不能在 AWS 管理控制台中创建或操作路径。要使用路径,必须通过 AWS API、AWS CLI 或 Windows PowerShell 工具 来使用资源。

下列示例显示用于不同 IAM 资源类型的 ARN。

  • AWS 账户 - 账户本身:

    arn:aws-cn:iam::123456789012:root

  • 账户中的 IAM 用户:

    arn:aws-cn:iam::123456789012:user/Bob

  • 具有反映组织结构图的路径的其他用户:

    arn:aws-cn:iam::123456789012:user/division_abc/subdivision_xyz/Bob

  • IAM 组:

    arn:aws-cn:iam::123456789012:group/Developers

  • 具有路径的 IAM 组:

    arn:aws-cn:iam::123456789012:group/division_abc/subdivision_xyz/product_A/Developers

  • IAM 角色:

    arn:aws-cn:iam::123456789012:role/S3Access

  • 托管策略:

    arn:aws-cn:iam::123456789012:policy/ManageCredentialsPermissions

  • 可与 EC2 实例关联的实例配置文件:

    arn:aws-cn:iam::123456789012:instance-profile/Webserver

  • 在 IAM 中识别为“Bob”的联合身份用户:

    arn:aws-cn:sts::123456789012:federated-user/Bob

  • 担任“Accounting-Role”且角色会话名称为“Mary”的人的活动会话:

    arn:aws-cn:sts::123456789012:assumed-role/Accounting-Role/Mary

  • 服务器证书

    arn:aws-cn:iam::123456789012:server-certificate/ProdServerCert

  • 具有反映组织结构图的路径的服务器证书:

    arn:aws-cn:iam::123456789012:server-certificate/division_abc/subdivision_xyz/ProdServerCert

  • 身份提供商 (SAML 和 OIDC):

    arn:aws-cn:iam::123456789012:saml-provider/ADFSProvider

    arn:aws-cn:iam::123456789012:oidc-provider/GoogleProvider

下列示例列举了您可向 Bob 分配的策略,该策略允许其管理自己的访问密钥。请注意,这里的资源即是 IAM 用户 Bob。

Copy
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": ["iam:*AccessKey*"], "Resource": "arn:aws-cn:iam::ACCOUNT-ID-WITHOUT-HYPHENS:user/division_abc/subdivision_xyz/Bob" }] }

注意

当您使用 ARN 在 IAM 策略中标识资源时,可以包括策略变量,以便包含运行时信息的占位符 (例如用户名) 作为 ARN 的一部分。有关更多信息,请参阅 IAM 策略变量概述

您可以在 ARN 的 resource 部分中使用通配符,以指定多个用户、组或策略。例如,如要指定使用 product_1234 的所有用户,您应使用:

Copy
arn:aws-cn:iam::123456789012:user/division_abc/subdivision_xyz/product_1234/*

假设在您的用户中有以字符串 app_ 开头的用户名。您可将该字符串应用于具有下列 ARN 的所有用户。

Copy
arn:aws-cn:iam::123456789012:user/division_abc/subdivision_xyz/product_1234/app_*

要指定您 AWS 账户中的所有用户、组或策略,请分别在 ARN 的 user/group/policy 部分之后使用通配符。

Copy
arn:aws-cn:iam::123456789012:user/* arn:aws-cn:iam::123456789012:group/* arn:aws-cn:iam::123456789012:policy/*

请勿在 ARN 的 user/group/policy 部分中使用通配符。换言之,禁止执行下列操作:

arn:aws-cn:iam::123456789012:u*

例 针对基于项目的群组使用路径和 ARN

不能在 AWS 管理控制台中创建或操作路径。要使用路径,必须通过 AWS API、AWS CLI 或 Windows PowerShell 工具 来使用资源。

在此示例中,Marketing_Admin 组中的 Jules 在 /marketing/ 路径内创建一个基于项目的组,并将公司内不同部门的用户分配至该组。此示例说明,用户的路径与用户所在的群组并无关系。

市场部组负责一款即将上市的新产品,因此 Jules 在 /marketing/ 路径内创建了一个新的组,并命名为 Widget_Launch。随后,Jules 将下列策略分配至该群组,而该策略将允许该群组访问 example_bucket (专用于此款新产品) 部分的对象。

Copy
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws-cn:s3:::example_bucket/marketing/newproductlaunch/widget/*" }, { "Effect": "Allow", "Action": "s3:ListBucket*", "Resource": "arn:aws-cn:s3:::example_bucket", "Condition": {"StringLike": {"s3:prefix": "marketing/newproductlaunch/widget/*"}} } ] }

最后,Jules 将负责此款新产品的用户分配至该群组。其中包括 /marketing/ 路径中的 Patricia 和 Eli。另外,还包括 /sales/ 路径中的 Chris 和 Chloe,及 /legal/ 路径中的 Aline 和 Jim。

唯一 ID

当 IAM 创建用户、组、角色、策略、实例配置文件或服务器证书时,它会为每个实体分配一个如下例所示的唯一 ID:

AIDAJQABLZS4A3QDU576Q

大多数情况下,在处理 IAM 实体时都使用友好名称和 ARN,因此,您不需要知道特定实体的唯一 ID。不过有时,当实际情况不允许使用好友名称时,唯一 ID 可能非常有用。

有一个示例涉及到对您的 AWS 账户中的友好名称的重复使用。在您的账户中,用户、组或策略的友好名称必须是唯一的。例如,您可以创建一个名为 David 的 IAM 用户。您的公司使用 Amazon S3 并有一个存储桶,其中包含每位员工的文件夹;该存储桶具有一个基于资源的策略 (存储桶策略),该策略仅允许用户访问存储桶中他们自己的文件夹。假设名为 David 的员工离开公司,并且您删除了相应的 IAM 用户。但后来另一位名为 David 的员工进入公司,您创建一个名为 David 的新 IAM 用户。如果存储桶策略指定名为 David 的 IAM 用户,则结果是该策略授予新来的 David 访问 Amazon S3 存储桶中前一位 David 所留信息的权限。

但是,每位 IAM 用户都具有一个唯一 ID,即使您创建的新 IAM 用户重复使用之前已删除的友好名称,也是如此。在此示例中,旧 IAM 用户 David 和新 IAM 用户 David 具有不同的唯一 ID。如果您为 Amazon S3 存储桶创建的资源策略通过唯一 ID 而不只是通过用户名授予访问权限,那么您无意中授权员工访问他们本不应访问的信息的机会就会减少。

用户 ID 发挥作用的另一种示例情况是您维护自己的 IAM 用户信息数据库 (或其他存储)。唯一 ID 可为您创建的每个 IAM 用户提供唯一标识符,即使一段时间后有 IAM 用户重复使用某个名称 (如前例所示),也没有影响。

获取唯一 ID

无法通过 IAM 控制台获得 IAM 实体的唯一 ID。要获得唯一 ID,您可以使用下面的 AWS CLI 命令或 IAM API 调用。

AWS CLI:

IAM API: