第 9 章 假设服务帐户的 AWS IAM 角色
在使用 AWS Security Token Service (STS)的 Red Hat OpenShift Service on AWS 集群中,OpenShift API 服务器可以启用为项目签名的服务帐户令牌,该令牌可用于假定 pod 中的 AWS Identity and Access Management (IAM)角色。如果假定的 IAM 角色具有所需的 AWS 权限,pod 可以使用临时 STS 凭证执行 AWS 操作来针对 AWS API 进行身份验证。
您可以使用 pod 身份 Webhook 项目服务帐户令牌来假设您自己的工作负载的 AWS Identity and Access Management (IAM)角色。如果假定的 IAM 角色具有所需的 AWS 权限,pod 可以使用临时 STS 凭证运行 AWS SDK 操作。
9.1. 服务帐户如何假定 SRE 拥有的项目中的 AWS IAM 角色 复制链接链接已复制到粘贴板!
当您在 AWS 集群上安装 Red Hat OpenShift Service 时,会创建特定于集群的 Operator AWS Identity and Access Management (IAM)角色。这些 IAM 角色允许 ROSA 集群 Operator 运行核心 OpenShift 功能。
集群 Operator 使用服务帐户假设 IAM 角色。当服务帐户假定 IAM 角色时,会为集群 Operator pod 中使用的服务帐户提供临时 AWS STS 凭证。如果假设角色具有所需的 AWS 权限,则服务帐户可以在 pod 中运行 AWS SDK 操作。
9.1.1. 假设 Red Hat SRE owned 项目中的 AWS IAM 角色的工作流 复制链接链接已复制到粘贴板!
下图演示了在 SRE 拥有的项目中假设 AWS IAM 角色的工作流:
图 9.1. 在 SRE 拥有的项目中假设 AWS IAM 角色的工作流
工作流有以下阶段:
在集群 Operator 运行的每个项目中,Operator 的部署 spec 具有投射服务帐户令牌的卷挂载,以及包含 pod 的 AWS 凭证配置的 secret。令牌是面向使用者和限时的。每小时,ROSA 都会生成新的令牌,AWS SDK 会读取包含 AWS 凭证配置的挂载的 secret。此配置具有到挂载令牌的路径和 AWS IAM 角色 ARN。secret 的凭证配置包括:
-
一个
$AWS_ARN_ROLE变量,其中包含具有运行 AWS SDK 操作所需的权限的 IAM 角色的 ARN。 -
$AWS_WEB_IDENTITY_TOKEN_FILE变量,在 pod 中具有到服务帐户的 OpenID Connect (OIDC)令牌的完整路径。完整路径为/var/run/secrets/openshift/serviceaccount/token。
-
一个
-
当集群 Operator 需要假设 AWS IAM 角色访问 AWS 服务(如 EC2)时,Operator 上运行的 AWS SDK 客户端代码会调用
AssumeRoleWithWebIdentityAPI 调用。 OIDC 令牌从 pod 传递给 OIDC 供应商。如果满足以下要求,供应商会验证服务帐户身份:
- 身份签名由私钥有效并签名。
sts.amazonaws.com使用者列在 OIDC 令牌中,并与 OIDC 供应商中配置的 audience 匹配。注意在带有 STS 集群的 ROSA 集群中,OIDC 供应商会在安装过程中创建,并将其设置为服务帐户签发者。
sts.amazonaws.com使用者默认在 OIDC 供应商中设置。- OIDC 令牌没有过期。
- 令牌中的签发者值具有 OIDC 供应商的 URL。
- 如果项目和服务帐户位于被假定的 IAM 角色的信任策略范围内,则授权会成功。
- 成功身份验证和授权后,临时 AWS STS 凭证以 AWS 访问令牌、secret 密钥和会话令牌的形式传递给 pod,供服务帐户使用。通过使用凭证,服务帐户会临时授予 IAM 角色中启用的 AWS 权限。
- 当集群 Operator 运行时,使用 pod 中的 AWS SDK 的 Operator 会消耗具有投射服务帐户和 AWS IAM 角色 ARN 的 secret,以针对 OIDC 供应商进行身份验证。OIDC 供应商返回临时 STS 凭证,用于针对 AWS API 进行身份验证。