使用 Chaos Mesh 的限制授权功能保护租户命名空间
概述
Chaos Mesh 是一个强大的云原生混沌工程平台,用于在 Kubernetes 环境中编排故障注入实验,以测试系统的弹性和韧性。在生产环境中,特别是多租户 Kubernetes 集群里,确保每个租户(用户或团队)的混沌实验活动严格限制在自己的资源范围内至关重要。一个安全漏洞是,即使租户对其自身命名空间拥有 RBAC 权限,他们仍可能通过配置混沌实验来影响其他命名空间的资源。Chaos Mesh 在 1.1.3 版本中引入的限制授权功能,正是为了解决这一安全问题而设计的,它通过准入控制机制强制执行命名空间隔离,是构建安全混沌工程实践的关键组件。
核心概念
多租户与命名空间隔离:在 Kubernetes 中,多租户集群被多个用户或工作负载共享。最佳实践是将每个租户及其资源隔离到独立的 命名空间 中。这提供了逻辑上的边界,是实现资源隔离的基础层。
RBAC 与潜在安全缺口:基于角色的访问控制(RBAC)可以为租户授予仅在其命名空间内操作的权限。然而,一个潜在的风险在于,虽然 RBAC 可能限制了用户创建资源的命名空间,但资源定义本身(如混沌实验的 YAML 文件)可能引用其他命名空间。例如,一个用户在 team-a-ns 命名空间中创建一个 PodChaos 实验,但该实验的 selector 字段却指向了 team-b-ns。在没有额外约束的情况下,这可能导致非授权的跨命名空间影响。
Chaos Mesh 限制授权功能:这是 Chaos Mesh 内置的安全特性。它通过一个 准入控制器 Webhook 运作,当用户(通过 Chaos Mesh Controller)创建、更新或删除混沌实验资源(如 PodChaos、NetworkChaos 等)时,该控制器会检查资源定义。如果它发现实验的目标(例如,通过 selector 选定的 Pod)所在的命名空间与实验资源本身创建的命名空间不一致,并且用户在该目标命名空间中没有足够的权限,准入请求将被拒绝,从而防止跨命名空间的非授权操作。
实践
在一个部署了 Chaos Mesh 的多租户 Kubernetes 集群中,假设租户 user-A 被授予了在命名空间 chaos-mesh 中管理混沌实验的权限,但其对业务命名空间 tidb-cluster-demo 没有任何权限。一个不安全的实践是,user-A 创建如下 YAML 文件,意图对 tidb-cluster-demo 命名空间中的 Pod 执行杀除操作:
apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata:
name: pod-kill
namespace: chaos-mesh # 资源创建在用户有权的命名空间
spec:
action: pod-kill
mode: one
selector:
namespaces:
- tidb-cluster-demo # 目标指向无权访问的命名空间
labelSelectors:
'app.kubernetes.io/component': 'tikv'
scheduler:
cron: '@every 1m'
在启用限制授权功能(Chaos Mesh 1.1.3+ 版本默认开启)的情况下,当应用此 YAML 文件时,系统会拦截并返回如下错误:
Error when creating "pod/pod-kill.yaml": admission webhook "vauth.kb.io" denied the request: ... is forbidden on namespace tidb-cluster-demo
这有效阻止了 user-A 对 tidb-cluster-demo 命名空间的未授权影响。正确的工作流是,user-A 应在其拥有完整权限的业务命名空间(如 my-service-ns)中定义并创建混沌实验。
为了实施更严格的策略,确保混沌实验完全无法跨越命名空间边界,可以结合使用 Open Policy Agent(OPA) 等外部策略引擎。OPA 可以提供比 Chaos Mesh 内置功能更灵活、更细粒度的策略控制,例如验证实验定义中所有 selector 字段都限于当前命名空间。
SRE 要点
- 与可靠性的关联:在多租户 SRE 环境中,混沌工程的安全性是系统可靠性的基石。如果混沌实验意外影响了非目标租户或服务,可能引发级联故障和非计划停机,直接侵蚀 SLO 的 Error Budget。限制授权功能通过确保故障注入的精确性,保护了整体集群的稳定性和租户间的服务等级协议。
- 最佳实践与反模式:
- 最佳实践:遵循最小权限原则,为每个租户服务配置仅在其业务命名空间内操作的 RBAC 权限。启用并信任 Chaos Mesh 的限制授权功能作为基础安全网。对于极高安全性要求的场景,叠加 OPA 策略进行二次校验。
- 常见反模式:错误地授予用户集群级别的混沌实验权限,或在租户的命名空间中创建指向核心基础设施命名空间的实验,这可能导致大范围的服务中断。
- 相关指标:
- SLI:混沌实验的执行成功率(实验按预期在目标范围内生效)、安全策略的拦截率(非授权实验被阻止的次数)。
- SLO:可将“多租户环境下的混沌实验安全性与隔离性”定义为内部 SLO,确保隔离功能持续有效,避免非计划的跨租户影响。
- 相关页面:chaos-mesh、kubernetes-multi-tenancy。