9.2. 服务帐户如何在用户定义的项目中假设 AWS IAM 角色


当您在 AWS 集群上安装 Red Hat OpenShift Service 时,默认包含 Pod 身份 Webhook 资源。

您可以使用 pod 身份 Webhook 在用户定义的项目中启用服务帐户,来假定同一项目中的 pod 中的 AWS Identity and Access Management (IAM) 角色。当假定 IAM 角色时,pod 中的服务帐户会提供临时 STS 凭证供 pod 中的服务帐户使用。如果假设角色具有所需的 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 工作流

工作流有以下阶段:

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

    • 一个 $AWS_ARN_ROLE 环境变量,其中包含运行 AWS SDK 操作所需的权限的 IAM 角色的 ARN。
    • 一个 $AWS_WEB_IDENTITY_TOKEN_FILE 环境变量,其中包含 pod 中到服务帐户的 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 供应商中配置的 audience 匹配。

      注意

      pod 身份 Webhook 默认将 sts.amazonaws.com audience 应用到 OIDC 令牌。

    • OIDC 令牌没有过期。
    • 令牌中的 issuer 值包含 OIDC 供应商的 URL。
  4. 如果项目和服务帐户位于被假定的 IAM 角色的信任策略范围内,则授权会成功。
  5. 成功身份验证和授权后,会话令牌形式的临时 AWS STS 凭证会被服务帐户传递给 pod,供服务帐户使用。通过使用凭证,服务帐户会临时授予 IAM 角色中启用的 AWS 权限。
  6. 当您在 pod 中运行 AWS SDK 操作时,服务帐户为 AWS API 提供临时 STS 凭证以验证其身份。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat