9.2. 服务帐户如何假定用户定义的项目中的 AWS IAM 角色
当使用 AWS 安全令牌服务 (STS) 在 AWS 集群上安装 Red Hat OpenShift Service 时,默认包括 Pod 身份 Webhook 资源。
您可以使用 pod 身份 Webhook 在用户定义的项目中启用服务帐户,来假定同一项目中的 pod 中的 AWS Identity and Access Management (IAM) 角色。当假定 IAM 角色时,会为 pod 中的服务帐户提供临时 STS 凭证。如果假定角色具有所需的 AWS 权限,则服务帐户可以在 pod 中运行 AWS SDK 操作。
要为 pod 启用 pod 身份 Webhook,您必须在项目中使用 eks.amazonaws.com/role-arn
注解创建一个服务帐户。该注解必须引用您要假定服务帐户的 AWS IAM 角色的 Amazon Resource Name (ARN)。您还必须在 Pod
规格中引用服务帐户,并将 pod 部署到与服务帐户相同的项目中。
用户定义的项目中的 Pod 身份 Webhook 工作流
下图演示了用户定义的项目中的 pod 身份 Webhook 工作流:
图 9.2. 用户定义的项目中的 Pod 身份 Webhook 工作流
工作流有以下阶段:
-
在用户定义的项目中,用户会创建一个包括
eks.amazonaws.com/role-arn
注解的服务帐户。该注解指向您希望服务帐户假定的 AWS IAM 角色的 ARN。 当使用引用被注解服务帐户的配置在同一项目中部署 pod 时,pod 身份 Webhook 会修改 pod。变异会将以下组件注入 pod,而无需在
Pod
或Deployment
资源配置中指定它们:-
$AWS_ARN_ROLE
环境变量,其中包含 IAM 角色的 ARN,该角色具有运行 AWS SDK 操作所需的权限。 -
$AWS_WEB_IDENTITY_TOKEN_FILE
环境变量,其中包含服务帐户的 OpenID Connect (OIDC)令牌的完整路径。完整路径为/var/run/secrets/eks.amazonaws.com/serviceaccount/token
。 -
挂载到挂载点
/var/run/secrets/eks.amazonaws.com/serviceaccount
上的aws-iam-token
卷。名为token
的 OIDC 令牌文件包含在卷中。
-
OIDC 令牌从 pod 传递给 OIDC 供应商。如果满足以下要求,供应商会验证服务帐户身份:
- 身份签名由私钥有效并签名。
sts.amazonaws.com
受众列在 OIDC 令牌中,并与 OIDC 供应商中配置的受众匹配。注意默认情况下,pod 身份 Webhook 会将
sts.amazonaws.com
受众应用到 OIDC 令牌。在带有 STS 集群的 Red Hat OpenShift Service on AWS 中,OIDC 供应商会在安装过程中创建,默认设置为服务帐户签发者。在 OIDC 供应商中默认设置
sts.amazonaws.com
受众。- OIDC 令牌尚未过期。
- 令牌中的签发者值包含 OIDC 供应商的 URL。
- 如果项目和服务帐户位于被假定的 IAM 角色的信任策略范围内,则授权会成功。
- 成功身份验证和授权后,以会话令牌的形式将临时 AWS STS 凭证传递给 pod,供服务帐户使用。通过使用凭证,服务帐户被临时授予 IAM 角色中启用的 AWS 权限。
- 当您在 pod 中运行 AWS SDK 操作时,服务帐户为 AWS API 提供临时 STS 凭证来验证其身份。