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

IAM JSON 策略元素: Principal

使用 Principal 元素指定用户 (IAM 用户、联合身份用户或担任了角色的用户)、AWS 账户、AWS 服务或被允许或拒绝访问资源的其他委托人实体。您在 IAM 角色的信任策略中以及基于资源的策略 (即您直接嵌入到资源中的策略) 中使用 Principal 元素。例如,您可以在 Amazon S3 存储桶、Amazon Glacier 文件库、Amazon SNS 主题、Amazon SQS 队列或 AWS KMS 客户主键 (CMK) 中嵌入此类策略。

请通过以下方式使用 Principal 元素:

  • 在 IAM 角色中,在角色的信任策略中使用 Principal 元素来指定可担任该角色的对象。对于跨账户访问,您必须指定受信任账户的 12 位标识符。

    注意

    创建角色后,您可以将账户更改为 "*",允许所有人担任该角色。如果执行此操作,我们强烈建议您通过其他方法 (如将访问只限定为特定 IP 地址的 Condition 元素) 限制能够访问此角色的用户。不要将角色的访问权限开放给所有人!

  • 在基于资源的策略中,使用 Principal 元素来指定有权访问资源的账户或用户。

不要在附加到 IAM 用户和组的策略中使用 Principal 元素。同样,不要在 IAM 角色的权限策略中指定委托人。在这些情况下,委托人是隐含的,即策略附加到的用户 (对于 IAM 用户) 或担任角色的用户 (对于角色访问策略)。将策略附加到 IAM 组时,委托人是提出请求的组中的 IAM 用户。

指定委托人

可使用 AWS 账户、IAM 用户、IAM 角色、联合身份用户或担当角色的用户的 Amazon 资源名称 (ARN) 来指定委托人。不能将 IAM 组和实例配置文件指定为委托人。

以下示例显示了用于指定委托人的各种方式。

特定 AWS 账户

当在策略中使用 AWS 账户标识符作为委托人时,可将策略语句中的权限授给该账户中包含的所有身份。这包括该账户中的 IAM 用户和角色。在指定 AWS 账户时,您可以使用账户 ARN (arn:aws-cn:iam::AWS-account-ID:root) 或 AWS: 前缀后加账户 ID 构成的简略格式。

例如,给定账户 ID 为 123456789012 的情况下,您可以使用以下任一方法来在 Principal 元素中指定账户:

"Principal": { "AWS": "arn:aws-cn:iam::123456789012:root" }
"Principal": { "AWS": "123456789012" }

您还可以使用之前所提及的方法的任意组合,通过数组将多个 AWS 账户指定为委托人。

"Principal": { "AWS": [ "arn:aws-cn:iam::123456789012:root", "999999999999" ] }

单个 IAM 用户或多个用户

您可以将单个 IAM 用户 (或用户组) 指定为委托人,如以下示例所示。

注意

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

"Principal": { "AWS": "arn:aws-cn:iam::AWS-account-ID:user/user-name" }
"Principal": { "AWS": [ "arn:aws-cn:iam::AWS-account-ID:user/user-name-1", "arn:aws-cn:iam::AWS-account-ID:user/UserName2" ] }

当在 Principal 元素中指定用户时,不能使用通配符 (*) 表示“所有用户”。委托人必须始终指明特定用户。

重要

如果角色信任策略的 Principal 元素中包含指向特定 IAM 用户的 ARN,在保存策略时该 ARN 将转换为该用户的唯一委托人 ID。如果有人希望通过删除并重新创建用户来提升特权,这样有助于减轻此类风险。您通常不会在控制台中看到这个 ID,因为显示信任策略时它还会反向转换为用户的 ARN。但是,如果您删除用户,这种关系即被打破。即使您重新创建用户,策略也不再适用。这是因为:新用户拥有新的委托人 ID,该 ID 与信任策略中存储的 ID 不匹配。在这种情况下,委托人 ID 会显示在控制台中,因为 AWS 无法将其映射回有效的 ARN。结果是,如果您删除并重新创建了信任策略的 Principal 元素所引用的用户,您必须编辑角色,用正确的 ARN 替换目前不正确的委托人 ID。当您保存策略时,ARN 会再次转换为该用户新的委托人 ID。

联合身份用户 (使用 Web 联合身份验证)

"Principal": { "Federated": "cognito-identity.amazonaws.com.cn" }
"Principal": { "Federated": "www.amazon.com" }
"Principal": { "Federated": "graph.facebook.com" }
"Principal": { "Federated": "accounts.google.com" }

联合身份用户 (使用 SAML 身份提供商)

"Principal": { "Federated": "arn:aws-cn:iam::AWS-account-ID:saml-provider/provider-name" }

IAM 角色

"Principal": { "AWS": "arn:aws-cn:iam::AWS-account-ID:role/role-name" }

重要

如果角色信任策略的 Principal 元素中包含指向特定 IAM 角色的 ARN,在保存策略时该 ARN 将转换为该角色的唯一委托人 ID。如果有人希望通过删除并重新创建角色来提升特权,这样有助于减轻此类风险。您通常不会在控制台中看到这个 ID,因为显示信任策略时它还会反向转换为角色的 ARN。但是,如果您删除角色,这种关系即被打破。即使您重新创建角色,策略也不再适用。因为新角色拥有新的委托人 ID,与信任策略中存储的 ID 不匹配。在这种情况下,委托人 ID 会显示在控制台中,因为 AWS 无法将其映射回有效的 ARN。最终结果是,如果您删除并重新创建了信任策略的 Principal 元素所引用的角色,您必须编辑角色,用正确的 ARN 替换目前不正确的委托人 ID。当您保存策略时,ARN 会再次转换为该角色新的委托人 ID。

特定的担任了角色的用户

"Principal": { "AWS": "arn:aws-cn:sts::AWS-account-ID:assumed-role/role-name/role-session-name" }

AWS 服务

可以由 AWS 服务担任的 IAM 角色称为服务角色。服务角色必须包括信任策略。信任策略 是附加到角色的基于资源的策略,这些策略定义了可担任该角色的委托人。有些服务角色具有预定义的信任策略。但有些情况下,您必须在信任策略中指定服务委托人。服务委托人是一个标识符,用于向服务授予权限。该标识符包含长版本的服务名称,并且通常采用以下格式:

long_service-name.amazonaws.com.cn

服务委托人由服务定义。要了解某项服务的服务委托人,请参阅该服务的文档。

以下示例显示了一个可以附加到服务角色的策略。该策略可使两个服务 Amazon EMR 和 AWS Data Pipeline 担任此角色。然后,这些服务可执行由分配给该角色 (未显示) 的权限策略授权执行的任何任务。要指定多个服务委托人,不用指定两个 Service 元素;您可以只使用一个该元素。实际上,您可以将一组多个服务委托人作为单个 Service 元素的值。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "elasticmapreduce.amazonaws.com.cn", "datapipeline.amazonaws.com.cn" ] }, "Action": "sts:AssumeRole" } ] }

某些 AWS 服务支持其他用于指定委托人的选项。例如,Amazon S3 允许您使用以下格式指定规范用户 ID

"Principal": { "CanonicalUser": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be" }

每个人 (匿名用户)

以下项目具有相同的效果:

"Principal": "*"
"Principal" : { "AWS" : "*" }

注意

在这些示例中,使用星号 (*) 作为 Everyone/Anonymous 的占位符。您不能将它用作通配符以匹配一部分名称或 ARN。此外,我们还强烈建议您不要在角色的信任策略中的 Principal 元素里使用通配符,除非您在该策略中通过 Condition 元素对访问进行了限制。否则,任何账户中的任意 IAM 用户都能访问此角色。

更多信息

有关更多信息,请参阅下列内容:

本页内容: