使用 IRSA 对另一个账户进行身份验证 - Amazon EKS

使用 IRSA 对另一个账户进行身份验证

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

例 从其它账户的集群创建身份提供者

在此示例中,账户 A 从其集群向账户 B 提供 OpenID Connect(OIDC)颁发者 URL。账户 B 遵循为集群创建 IAM OIDC 提供商为集群创建 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 策略,其中包括授予账户 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/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 配置文件作为其源。对于 AWS 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

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