2.10. SRE 和服务帐户访问
红帽站点可靠性工程(SRE)访问 Red Hat OpenShift Service on AWS (ROSA)集群通过身份和访问管理进行了概述。
2.10.1. 身份和访问管理
Red Hat SRE 团队的大部分访问是通过自动化配置管理使用集群 Operator 进行的。
子处理器
有关可用子处理器列表,请查看红帽客户门户网站上的 红帽子处理器列表。
2.10.2. SRE 集群访问
SRE 对 Red Hat OpenShift Service on AWS (ROSA)集群的访问是通过多个所需身份验证层来控制的,它们都由严格的公司策略管理。所有身份验证尝试访问集群以及集群中所做的更改都会记录在审计日志中,以及负责这些操作的 SRE 的特定帐户身份。这些审计日志有助于确保 SREs 对客户集群进行的所有更改遵循组成红帽受管服务指南的严格的策略和步骤。
以下是 SRE 必须执行的进程的概述,以访问客户的集群。
- SRE 从 Red Hat SSO (云服务)请求刷新的 ID 令牌。此请求经过身份验证。令牌在十五分钟内有效。令牌过期后,您可以再次刷新令牌并接收新令牌。刷新到新令牌的功能存在冲突;但是,在 30 天不活动后,会撤销刷新到新令牌的功能。
- SRE 连接到红帽 VPN。VPN 身份验证由 Red Hat Corporate Identity and Access Management system (RH IAM)完成。使用 RH IAM 时,SRE 是多因素,可以根据组和现有载入和关闭进程在内部管理。当 SRE 进行身份验证并连接后,SRE 可以访问云服务团队管理 plane。对云服务团队管理平面的更改需要许多层的批准,并由严格的公司策略维护。
- 授权完成后,SRE 会登录到 fleet management plane,并接收由 fleet management plane 创建的服务帐户令牌。令牌有效 15 分钟。当令牌不再有效后,它会被删除。
在授予 fleet management plane 的访问权限后,SRE 会使用各种方法访问集群,具体取决于网络配置。
- 访问私有或公共集群 : 请求通过特定的 Network Load Balancer (NLB)发送,方法是使用端口 6443 上的加密 HTTP 连接。
- 访问 PrivateLink 集群 : 请求发送到红帽 Transit 网关,然后连接到每个区域的 Red Hat VPC。接收请求的 VPC 将依赖于目标私有集群的区域。在 VPC 中,有一个专用子网,其中包含到客户的 PrivateLink 集群 的 PrivateLink 端点。
SREs 通过 Web 控制台或命令行界面(CLI)工具访问 ROSA 集群。身份验证需要多因素身份验证 (MFA),对密码复杂性和帐户锁定要求具有行业标准的要求。SRE 必须作为个人进行身份验证以确保可审核。所有验证尝试都会记录到安全信息和事件管理 (SIEM) 系统。
SREs 使用加密 HTTP 连接访问私有集群。只有通过 IP 允许列表或私有云供应商链接,才能从安全的红帽网络获得连接。
图 2.1. SRE 对 ROSA 集群的访问
2.10.2.1. ROSA 中的特权访问控制
SRE 在访问 ROSA 和 AWS 组件时遵循最小特权的原则。SRE 访问有四个基本类别:
- SRE 管理通过红帽门户访问,具有正常双因素身份验证,且无特权的 elevation。
- SRE 管理通过带有正常双因素身份验证的 Red Hat Enterprise SSO 访问,且没有特权升级。
- OpenShift elevation,这是使用红帽 SSO 的手动提升。访问时间被限制为 2 小时,经过全面审核,需要进行管理批准。
- AWS 访问或提升,这是 AWS 控制台或 CLI 访问的手动传播。访问仅限于 60 分钟,并且完全审核。
每种访问类型对组件具有不同的访问权限级别:
组件 | 典型的 SRE 管理访问权限(红帽门户) | 典型的 SRE 管理员访问权限(红帽 SSO) | OpenShift elevation | 云供应商访问或提升信息 |
---|---|---|---|---|
OpenShift Cluster Manager | R/W | 无权限 | 无权限 | 无权限 |
OpenShift console | 无权限 | R/W | R/W | 无权限 |
节点操作系统 | 无权限 | 提升 OS 和网络权限的特定列表。 | 提升 OS 和网络权限的特定列表。 | 无权限 |
AWS 控制台 | 无权限 | 没有访问权限,但这是用于请求云供应商访问的帐户。 | 无权限 | 使用 SRE 身份的所有云供应商权限。 |
2.10.2.2. SRE 对 AWS 帐户的访问
在日常的 Red Hat OpenShift Service on AWS 操作中,Red Hat 人员不会访问 AWS 账户。出于紧急的故障排除目的,SRE 定义了并可审计的程序来访问云基础架构帐户。
在 isolated backplane 流中,SRE 会请求访问客户的支持角色。这个请求只是由 backplane API 处理的时间(JIT),这会动态将机构角色的权限更新为特定的 SRE 人员的帐户。此 SRE 的帐户被授予对特定红帽客户环境的访问权限。SRE 对红帽客户环境的访问是一个临时的、短期的访问,仅在访问请求时建立。
对 STS 令牌的访问会被审核,可追溯到各个用户。STS 和非STS 集群都使用 AWS STS 服务进行 SRE 访问。当 ManagedOpenShift-Technical-Support-Role
附加了 ManagedOpenShift-Support-Access
策略并且此角色用于管理时,访问控制会使用统一后端流。当 ManagedOpenShift-Support-Role
具有 ManagedOpenShift- Technical-Support-<org_id> 策略时
,访问控制会使用隔离的后端流。如需更多信息,请参阅 ROSA 集群更新信任策略 的 KCS 文章。
2.10.2.3. AWS 帐户的 SRE STS 视图
当 SREs 通过双因素身份验证进行 VPN 时,它们和红帽支持可以假定 AWS 帐户中的 ManagedOpenShift-Support-Role
。ManagedOpenShift-Support-Role
具有 SREs 所需的所有权限,直接排除故障和管理 AWS 资源。假设 ManagedOpenShift-Support-Role
,SRE 使用 AWS 安全令牌服务(STS)为其帐户生成唯一的、时间过期 URL。然后 SREs 可以执行多个故障排除操作,其中包括:
- 查看 CloudTrail 日志
- 关闭有问题的 EC2 实例
SRE 执行的所有活动都来自红帽 IP 地址,并登录到 CloudTrail 以便审核和查看所有活动。只有在需要访问 AWS 服务才能协助时,才会使用此角色。大多数权限都是只读的。但是,选择几个权限具有更多访问权限,包括重启实例或启动新实例。SRE 访问仅限于附加到 ManagedOpenShift-Support-Role
的策略权限。
有关权限的完整列表,请参阅 About IAM resources for ROSA cluster using STS 用户指南中的 sts_support_permission_policy.json。
2.10.2.4. SRE 通过 PrivateLink VPC 端点服务访问
PrivateLink VPC 端点服务作为 ROSA 集群创建的一部分创建。
当您有一个 PrivateLink ROSA 集群时,其 Kubernetes API 服务器会通过一个负载均衡器公开,该负载均衡器默认只能从 VPC 内访问。红帽站点可靠性工程(SRE)可以通过在红帽拥有的 AWS 帐户中有一个关联的 VPC 端点的 VPC 端点连接到这个负载均衡器。此端点服务包含集群名称,它也在 ARN 中。
在 Allow principals 选项卡下,会列出红帽拥有的 AWS 帐户。这个特定用户可确保其他实体无法创建到 PrivateLink 集群的 Kubernetes API 服务器的 VPC 端点连接。
当 Red Hat SREs 访问 API 时,这个 fleet management plane 可以通过 VPC 端点服务连接到内部 API。
2.10.3. 红帽支持访问
红帽客户体验与参与(CEE)团队的成员通常对集群的部分具有只读访问权限。具体来说,CEE 对核心和产品命名空间具有有限访问权限,且无法访问客户命名空间。
角色 | Core 命名空间 | 层次产品命名空间 | Customer 命名空间 | AWS 帐户* |
---|---|---|---|---|
OpenShift SRE | Read: All Write: Very 有限 [1] | Read: All Write: None | Read: None[2] Write: None | Read: All [3] Write: All [3] |
CEE | Read: All Write: None | Read: All Write: None | Read: None[2] Write: None | Read: None Write: None |
客户管理员 | Read: None Write: None | Read: None Write: None | Read: All Write: All | Read: All Write: All |
客户用户 | Read: None Write: None | Read: None Write: None | Read: Limited[4] Write: Limited[4] | Read: None Write: None |
其他人 | Read: None Write: None | Read: None Write: None | Read: None Write: None | Read: None Write: None |
- 仅限于解决常见用例,如部署失败、升级集群并替换错误的 worker 节点。
- 默认情况下,红帽人员无法访问客户数据。
- SRE 对 AWS 帐户的访问是在记录的事件期间进行出色的故障排除紧急步骤。
- 限制为通过 RBAC 授予的内容,以及用户创建的命名空间。
2.10.4. 客户访问权限
客户访问权限仅限于由客户管理员角色使用 RBAC 授予权限创建的命名空间。通常不允许访问底层基础架构或产品命名空间,而无需 cluster-admin
访问。有关客户访问和身份验证的更多信息,请参阅文档中的"了解身份验证"部分。
2.10.5. 访问批准及审核
新的 SRE 用户访问需要管理批准。通过自动过程将经过隔离或传输的 SRE 帐户作为授权用户删除。另外,SRE 会执行定期访问审核,包括授权用户列表的管理登录。
访问和身份授权表包括管理对集群、应用程序和基础架构资源的授权访问权限的职责。这包括提供访问控制机制、身份验证、授权和管理对资源的访问等任务。
资源 | 服务职责 | 客户职责 |
---|---|---|
日志记录 | Red Hat
|
|
应用程序网络 | Red Hat
|
|
集群网络 | Red Hat
|
|
虚拟网络管理 | Red Hat
|
|
虚拟存储管理 | Red Hat
|
|
虚拟计算管理 | Red Hat
|
|
AWS 软件(公共 AWS 服务) | AWS Compute: 提供 Amazon EC2 服务,用于 ROSA control plane、基础架构和 worker 节点。 Storage : 提供 Amazon EBS,允许 ROSA 为集群置备本地节点存储和持久性卷存储。 Storage: 提供 Amazon S3,用于服务的内置镜像 registry。 网络 : 提供 AWS Identity and Access Management (IAM),供客户用来控制对客户账户上运行的 ROSA 资源的访问。 |
|
硬件和 AWS 全局基础架构 | AWS
|
|
2.10.6. 服务帐户如何假定 SRE 拥有的项目中的 AWS IAM 角色
当您在使用 AWS 安全令牌服务(STS)的 Red Hat OpenShift Service 上安装 Red Hat OpenShift Service 时,会创建特定于集群的 Operator AWS Identity and Access Management (IAM)角色。这些 IAM 角色允许 Red Hat OpenShift Service on AWS 集群 Operator 运行核心 OpenShift 功能。
集群 Operator 使用服务帐户假设 IAM 角色。当服务帐户假设 IAM 角色时,会为集群 Operator 的 pod 中使用的服务帐户提供临时 STS 凭证。如果假设角色具有所需的 AWS 权限,则服务帐户可以在 pod 中运行 AWS SDK 操作。
在 SRE 拥有的项目中假设 AWS IAM 角色的工作流
下图演示了在 SRE 拥有的项目中假设 AWS IAM 角色的工作流:
图 2.2. 在 SRE 拥有的项目中假设 AWS IAM 角色的工作流
工作流有以下阶段:
在集群 Operator 运行的每个项目中,Operator 的部署 spec 具有投射服务帐户令牌的卷挂载,以及包含 pod 的 AWS 凭证配置的 secret。令牌是面向使用者和限时的。每小时,Red Hat OpenShift Service on AWS 都会生成新的令牌,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 客户端代码会调用
AssumeRoleWithWebIdentity
API 调用。 OIDC 令牌从 pod 传递给 OIDC 供应商。如果满足以下要求,供应商会验证服务帐户身份:
- 身份签名由私钥有效并签名。
sts.amazonaws.com
使用者列在 OIDC 令牌中,并与 OIDC 供应商中配置的 audience 匹配。注意在带有 STS 集群的 Red Hat OpenShift Service on AWS 中,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 进行身份验证。
其他资源
- 如需有关集群 Operator 使用的 AWS IAM 角色的更多信息,请参阅 特定于集群的 Operator IAM 角色参考。
- 有关集群 Operator 所需的策略和权限的更多信息,请参阅 集群范围的角色创建方法。