IAM 标识符 - AWS Identity and Access Management
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

使用 AWS CloudFormation 创建资源时,您可以为用户、组和角色指定路径,但不能为策略指定路径。

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

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 和 AWS STS ARN。由于 IAM 资源是全球资源,因此,ARN 的区域部分是空的。

语法:

arn:aws-cn:iam::account-id:root arn:aws-cn:iam::account-id:user/user-name-with-path arn:aws-cn:iam::account-id:group/group-name-with-path arn:aws-cn:iam::account-id:role/role-name-with-path arn:aws-cn:iam::account-id:policy/policy-name-with-path arn:aws-cn:iam::account-id:instance-profile/instance-profile-name-with-path arn:aws-cn:sts::account-id:federated-user/user-name arn:aws-cn:sts::account-id:assumed-role/role-name/role-session-name arn:aws-cn:iam::account-id:mfa/virtual-device-name-with-path arn:aws-cn:iam::account-id:u2f/u2f-token-id arn:aws-cn:iam::account-id:server-certificate/certificate-name-with-path arn:aws-cn:iam::account-id:saml-provider/provider-name arn:aws-cn:iam::account-id:oidc-provider/provider-name

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

示例:

arn:aws-cn:iam::123456789012:root arn:aws-cn:iam::123456789012:user/JohnDoe arn:aws-cn:iam::123456789012:user/division_abc/subdivision_xyz/JaneDoe arn:aws-cn:iam::123456789012:group/Developers arn:aws-cn:iam::123456789012:group/division_abc/subdivision_xyz/product_A/Developers arn:aws-cn:iam::123456789012:role/S3Access arn:aws-cn:iam::123456789012:role/application_abc/component_xyz/S3Access arn:aws-cn:iam::123456789012:policy/UsersManageOwnCredentials arn:aws-cn:iam::123456789012:policy/division_abc/subdivision_xyz/UsersManageOwnCredentials arn:aws-cn:iam::123456789012:instance-profile/Webserver arn:aws-cn:sts::123456789012:federated-user/JohnDoe arn:aws-cn:sts::123456789012:assumed-role/Accounting-Role/JaneDoe arn:aws-cn:iam::123456789012:mfa/JaneDoeMFA arn:aws-cn:iam::123456789012:u2f/user/JohnDoe/default (U2F security key) arn:aws-cn:iam::123456789012:server-certificate/ProdServerCert arn:aws-cn:iam::123456789012:server-certificate/division_abc/subdivision_xyz/ProdServerCert arn:aws-cn:iam::123456789012:saml-provider/ADFSProvider arn:aws-cn:iam::123456789012:oidc-provider/GoogleProvider

以下示例提供了更详细的信息,帮助您了解不同类型 IAM 和 AWS STS 资源的 ARN 格式。

  • 账户中的 IAM 用户:

    arn:aws-cn:iam::123456789012:user/JohnDoe
  • 具有反映组织结构图的路径的其他用户:

    arn:aws-cn:iam::123456789012:user/division_abc/subdivision_xyz/JaneDoe
  • 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 中识别为“Paulo”的联合身份用户:

    arn:aws-cn:sts::123456789012:federated-user/Paulo
  • 担任“Accounting-Role”且角色会话名称为“Mary”的人的活动会话:

    arn:aws-cn:sts::123456789012:assumed-role/Accounting-Role/Mary
  • 分配给名为 Jorge 的用户的多重身份验证设备:

    arn:aws-cn:iam::123456789012:mfa/Jorge
  • 服务器证书:

    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

另一个重要的 ARN 是 根用户 ARN。虽然这不是一个 IAM 资源,但您应熟悉此 ARN 的格式。它通常用于策略的 Principal 元素

  • AWS 账户 - 账户本身:

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

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageRichardAccessKeys", "Effect": "Allow", "Action": [ "iam:*AccessKey*", "iam:GetUser" ], "Resource": "arn:aws:iam::*:user/division_abc/subdivision_xyz/Richard" }, { "Sid": "ListForConsole", "Effect": "Allow", "Action": "iam:ListUsers", "Resource": "*" } ] }
注意

使用 ARN 在 IAM 策略中标识资源时,您可以包含策略变量。策略变量可以包含表示运行时信息(如用户名称)的占位符,作为 ARN 的一部分。有关更多信息,请参阅 IAM 策略元素:变量和标签

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

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

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

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

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

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 并将公司内不同部门的用户分配至该组。此示例说明,用户的路径与用户所在的组并无关系。

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

{ "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/ 路径中的 Alice 和 Jim。

唯一标识符

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

AIDAJQABLZS4A3QDU576Q

大多数情况下,在使用 IAM 实体时,您使用易于识别的名称和 ARN。这样,您就不需要知道特定实体的唯一 ID。不过有时,当实际情况不允许使用好友名称时,唯一 ID 可能非常有用。

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

但是,每位 IAM 用户都具有一个唯一 ID,即使您创建的新 IAM 用户重复使用之前已删除的友好名称,也是如此。在此示例中,旧 IAM 用户 David 和新 IAM 用户 David 具有不同的唯一 ID。您可以为 Amazon S3 存储桶创建资源策略,这些策略按唯一 ID 而不仅仅是用户名授予访问权限。这样做可以减少您无意中向员工授予了不应具备的信息访问权限的机会。

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

了解唯一 ID 前缀

IAM 使用以下前缀来指示每个唯一 ID 适用于的实体的类型。

前缀 实体类型
ABIA AWS STS 服务持有者令牌
ACCA 上下文特定凭证

AGPA

AIDA

IAM 用户

AIPA Amazon EC2 实例配置文件
AKIA 访问密钥
ANPA

托管策略

ANVA

托管策略中的版本

APKA Public key
AROA 角色
ASCA 证书

ASIA

临时 (AWS STS) 密钥

获取唯一标识符

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

AWS CLI:

IAM API: