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 工作流

Pod 身份 Webhook 工作流

工作流有以下阶段:

  1. 在用户定义的项目中,用户会创建一个包括 eks.amazonaws.com/role-arn 注解的服务帐户。该注解指向您希望服务帐户假定的 AWS IAM 角色的 ARN。
  2. 当使用引用被注解服务帐户的配置在同一项目中部署 pod 时,pod 身份 Webhook 会修改 pod。变异会将以下组件注入 pod,而无需在 PodDeployment 资源配置中指定它们:

    • $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 令牌文件包含在卷中。
  3. 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。
  4. 如果项目和服务帐户位于被假定的 IAM 角色的信任策略范围内,则授权会成功。
  5. 成功身份验证和授权后,以会话令牌的形式将临时 AWS STS 凭证传递给 pod,供服务帐户使用。通过使用凭证,服务帐户被临时授予 IAM 角色中启用的 AWS 权限。
  6. 当您在 pod 中运行 AWS SDK 操作时,服务帐户为 AWS API 提供临时 STS 凭证来验证其身份。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.