跨账户 IAM 权限 - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

跨账户 IAM 权限

您可以通过从其他账户的集群创建身份提供商或者使用链接的 AssumeRole 操作,配置跨账户 IAM 权限。在以下示例中,账户 A 拥有一个支持服务账户的 IAM 角色的 Amazon EKS 集群。在该集群上运行的 Pods 必须代入来自账户 B 的 IAM 权限。

例 从其他账户的集群创建身份提供商

在此示例中,账户 A 从其集群向账户 B 提供 OpenID Connect(OIDC)颁发者 URL。账户 B 遵循为集群创建 IAM OIDC 提供商配置 Kubernetes 服务账户以代入 IAM 角色中的说明,并使用来自账户 A 集群的 OIDC 发布者 URL。然后,集群管理员注释账户 A 的集群中的服务账户以使用来自账户 B 的角色(444455556666)。

apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::444455556666:role/account-b-role

例 使用链接 AssumeRole 操作

在此示例中,账户 B 创建一个 IAM policy,其中包括授予账户 A 集群中 pods 的权限。账户 B(444455556666)将该策略附加到具有信任关系的 IAM 角色,允许对账户 A(111122223333)的 AssumeRole 权限。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole", "Condition": {} } ] }

账户 A 创建具有信任策略的角色,该策略从使用集群的 OIDC 颁发者地址创建的身份提供商处获取凭证。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity" } ] }

账户 A 将策略附加到具有以下权限的角色,以代入账户 B 创建的角色。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::444455556666:role/account-b-role" } ] }

pods 的应用程序代码使用两个配置文件代入账户 B 的角色:account_b_roleaccount_a_roleaccount_b_role 配置文件使用 account_a_role 配置文件作为其源。对于 Amazon CLI,~/.aws/config 文件类似于以下内容。

[profile account_b_role] source_profile = account_a_role role_arn=arn:aws:iam::444455556666:role/account-b-role [profile account_a_role] web_identity_token_file = /var/run/secrets/eks.amazonaws.com/serviceaccount/token role_arn=arn:aws:iam::111122223333:role/account-a-role

要为其他 Amazon 开发工具包指定链接的配置文件,请参考所使用开发工具包的文档。有关更多信息,请参阅用于在 Amazon 上进行构建的工具