第 5 章 使用策略提供安全性
5.1. 关于 RHACS 中的策略 复制链接链接已复制到粘贴板!
Red Hat Advanced Cluster Security for Kubernetes (RHACS)可帮助您使用强大的策略引擎和准入控制器来保护容器基础架构。使用 RHACS,您可以建立适当的安全保护,通知策略违反情况,并选择性地强制执行策略以防止不安全的情况。
具体来说,RHACS 可帮助您在构建阶段失败 CI 管道,拒绝部署在部署阶段的部署,并关闭违反运行时策略的部署。RHACS 还提供策略管理和违反管理工具,如以下部分所述。
5.1.1. 了解 RHACS 策略评估引擎 复制链接链接已复制到粘贴板!
RHACS 策略引擎会根据策略标准评估您创建的策略。它在每个构建、部署和运行时阶段都有所不同。
- 构建阶段
RHACS 可以使用 roxctl CLI 根据请求评估策略规则。在构建阶段违反策略时,违反了文本和错误代码,开发人员可以了解失败以及如何修复它。您可以将错误代码配置为使管道失败。在这个阶段,RHACS 可以针对适用的策略评估独立镜像和部署。构建阶段的违反情况不会使用通知程序存储或路由。
- 部署阶段
在部署尝试过程中检查工作负载时,RHACS 使用 deploy 阶段策略。这些策略由工作负载标准组成,如以下条件:
- 容器配置,包括环境变量和特权
- 部署元数据,如 required 或 disallowed 注解和标签
- 存储卷信息,如卷名称和挂载配置
- 网络配置,如端口公开和入口或出口策略
- Kubernetes 访问配置,由服务帐户配置和基于角色的访问控制(RBAC)权限等条件组成
在构建部署阶段策略时,您还可以包括镜像 registry、镜像内容和 CVE 数据等镜像标准。如果要在管道构建和部署尝试中评估相同的要求,这非常有用。这消除了重复策略的需求,因为您可以创建包含镜像和工作负载标准的策略,并将其用于构建和部署阶段。
RHACS 可防止 Kubernetes 或 OpenShift Container Platform 创建或更新工作负载,如部署、守护进程集或作业(与策略条件匹配)。这可用于关闭具有严重问题的部署,即使构建成功也是如此。
- 运行时阶段
RHACS 在部署运行后持续评估适用于适用策略的部署。运行时策略用于监控 Kubernetes 集群中运行的 pod,并报告或防止未经授权的工作负载活动、基准偏差或禁止 Kubernetes 资源操作。RHACS 可以监控不安全的 Kubernetes 请求,并有选择地使用 API 阻止它们。例如,RHACS 可以阻止尝试访问配置映射或 secret。
运行时策略可以检查以下两个事件源:
- 部署事件:实时事件,如运行 pod、处理 pod 中的活动、网络或进程基准或用户 pod 交互,如端口转发或端口 exec 操作
- 审计日志事件:可用于检查敏感 Kubernetes 资源等操作的日志
运行时策略还可以包括构建和部署阶段标准,理由如下:
- 这些条件可用于识别组合运行时和工作负载/镜像标准的高风险情况。
- 这些条件可以确保在运行时满足构建和部署阶段要求,例如发现新漏洞或引入新的要求时。
审计日志策略用于检查 Kubernetes 审计日志中的与敏感 Kubernetes 资源相关的操作,如 secret 和 ClusterRoleBinding。它们有以下特征:
- 审计日志策略仅由审计日志标准组成。
- 它们不与镜像或部署关联。因此,审计日志策略只能与运行时生命周期阶段关联。
- 这些策略不可强制执行,因为已经发生审计操作。
5.1.2. 关于策略强制 复制链接链接已复制到粘贴板!
当您在 RHACS 中配置策略时,您可以配置 RHACS 在检测到违反安全策略的条件时如何响应。
RHACS 允许您在开发生命周期的所有阶段强制实施安全策略:构建、部署和运行时。
RHACS 提供两种类型的策略强制:
- Sensor 强制: 另外,如果检查工作负载并违反了策略,Sensor 也会使用 Kubernetes API 缩减 pod。
- 准入控制器强制 :也称为 硬 强制,准入控制器可用于验证 webhook 和 Kubernetes API 服务器来阻止工作负载准入或更新违反强制策略的尝试。当请求部署或更新时,验证 Webhook 与准入控制器通信,准入控制器会根据是否强制策略响应 allow 或 block 操作。API 服务器根据是否违反策略以及是否强制执行策略,接受或拒绝请求。
有关准入控制器强制的更多信息,请参阅"了解准入控制器强制"。
5.1.2.1. 构建阶段强制 复制链接链接已复制到粘贴板!
RHACS 使用构建阶段策略来发现和响应安全违反情况,然后再部署代码。构建阶段策略完全由镜像标准组成,如镜像 registry、镜像内容和 CVE 数据,包括扫描结果和状态。
RHACS 使用 roxctl image check 和 roxctl deployment check 命令检查构建。当镜像与策略标准匹配时,您可以将 RHACS 配置为使持续集成(CI)构建失败。这意味着,当构建中有一个违反了策略的条件时,例如,如果严重性级别有可修复的 CVE,并且您为该条件配置了策略,则构建会失败。
例如,您可以配置 RHACS 来检查镜像或部署,并将检查整合到持续集成/持续开发(CI/CD)管道中。然后,如果 RHACS 检测到表示策略应失败的条件,RHACS API 会返回非零退出代码。这些违反情况不会被 RHACS 收集或操作,而是与 CI/CD 工具一起使用。您可以将 CI/CD 工具配置为处理这些结果,例如,在报告违反情况时使构建过程失败。
5.1.2.2. 部署阶段强制 复制链接链接已复制到粘贴板!
Red Hat Advanced Cluster Security for Kubernetes 支持对 deploy-time 策略的两种安全策略实施:通过准入控制器和 RHACS Sensor 进行软实施的硬强制。准入控制器会阻止创建或更新违反策略的部署。如果准入控制器被禁用或不可用,Sensor 可以将违反策略的部署缩减为 0 来执行强制。
策略实施可能会影响运行应用程序或开发流程。在启用强制选项前,请通知所有利益相关者,并计划如何响应自动化执行操作。
5.1.2.2.1. 硬实施 复制链接链接已复制到粘贴板!
硬强制由 RHACS 准入控制器执行。在带有准入控制器强制的集群中,Kubernetes 或 OpenShift Container Platform API 服务器会阻止所有不合规的部署。准入控制器会阻止 CREATE、UPDATE 和 SCALE 操作。任何满足启用了部署时间强制配置的策略的 pod 创建、更新或扩展请求都将失败。准入控制器还阻止用户发起的容器命令,如 pod exec 和使用运行时强制配置的策略的 端口转发。
Kubernetes 准入 Webhook 仅支持 CREATE、UPDATE、DELETE 和 CONNECT 操作。RHACS 准入控制器只支持 CREATE、UPDATE 和 SCALE 操作。kubectl patch、kubectl set 和 kubectl scale 等操作是 PATCH 操作,而不是 UPDATE 操作。因为 Kubernetes 不支持 PATCH 操作,所以 RHACS 无法对 PATCH 操作执行强制。但是,支持对 SCALE 操作的强制操作。
对于硬实施,在 RHACS 中启用集群的强制设置。要验证是否启用了强制,在 Admission controller enforcement behavior 字段中的 Dynamic configuration 部分,请确保选择了 Enforce 策略。另外,对于您要强制执行的每个策略,请在 配置策略时选择 Inform 和 enforce。
5.1.2.2.2. 来自准入控制器强制的命名空间排除 复制链接链接已复制到粘贴板!
默认情况下,Red Hat Advanced Cluster Security for Kubernetes (RHACS)从准入控制器中的验证 Webhook 配置中排除某些管理命名空间。策略评估和强制不对来自这些管理命名空间的请求执行。必须部署这些命名空间中的一些项目才能使 RHACS 正常工作,以便排除它们。
除了排除命名空间外,RHACS 准入控制器还会绕过来自系统命名空间中的 Kubernetes ServiceAccount 的请求。
在选择命名空间来部署您选择的持续部署工具时请考虑此因素。
默认排除以下命名空间:
-
stackrox -
kube-system -
kube-public -
istio-system
对于 Kubernetes 安全集群上的 Helm 安装,您可以通过配置 values-public.yaml 文件来自定义从验证 Webhook 配置中排除的命名空间。在 admissionControl.namespaceSelector 字段中,您可以指定您要排除的命名空间。请参见以下示例:
其中:
- example-namespace
- 表示您要排除的命名空间。
5.1.2.2.3. 对现有部署进行强制 复制链接链接已复制到粘贴板!
对于现有部署,当 Kubernetes 事件发生时,策略更改只会导致在下一个条件检测时进行强制。如果对策略进行更改,您必须通过 选择策略管理 并单击 Reassess All 来重新评估策略。无论是否有新的传入的 Kubernetes 事件,此操作会在所有现有部署中应用部署策略。如果违反了策略,则 RHACS 执行执行。
5.1.2.2.4. 软强制 复制链接链接已复制到粘贴板!
软强制由 RHACS Sensor 执行。这种强制可防止启动操作。在软强制中,Sensor 将副本扩展到 0,并阻止调度 pod。在此强制中,集群中提供了一个非就绪的部署。
按照设计,Sensor 仅执行此软执行一次,以防止捕获更新请求以再次缩减部署。
如果配置了软强制,并且 Sensor 停机,则 RHACS 无法执行强制。
5.1.2.3. 运行时强制 复制链接链接已复制到粘贴板!
您可以配置在运行时强制的策略,以终止违反策略的 pod,或者在审计日志检查时通知您违反策略的事件,但已经发生并已记录。
强制时,策略违反会导致以下一个或多个操作:
- 关闭 offending pod,这会导致在节点上创建另一个健康 pod
- RHACS 截获并防止某些 Kubernetes API 调用
当镜像或工作负载规则触发违反时,会生成一个违反警报,但 不会破坏 pod。
5.1.3. RHACS 策略结构 复制链接链接已复制到粘贴板!
RHACS 策略是结构化的文本对象,用于定义安全规则,以及当这些规则出现问题时 RHACS 执行的操作。
RHACS 策略包含以下部分:
策略定义 :指定策略的元数据及其规则,包括以下组件:
- 策略详情 :文本,用于协助策略作者在补救过程中管理策略和最终用户。
- 生命周期 :一个基本的策略属性,用于决定何时评估该策略。
策略规则 :与表示的
OR一起使用的一组条件,如规则 1 或 规则 2。每个规则都包含预定义的构建块,称为使用AND关系的策略标准,如条件 A 和 条件 B。RHAC 使用直观文本来描述您想要的条件,而不是您指定可能复杂的 Kubernetes 条件。大多数 RHACS 条件配置触发策略的条件,许多条件都包括一个
NOT表单。但是,一些条件旨在定义正预期的行为。条件是为正或负条件设计的,这取决于上下文,因为它们旨在为策略用户创建直观的策略。以下示例显示负和正形式的策略标准:-
负形式:
如果使用特定的Container Registry 名称。因此,如果使用任何 registrygcr.ioregistry,则会触发之外的任何 registry quay.io,则 Container Registry 名称为not <quay.io>。这是一个通用规则。 -
负形式:如果配置中缺少
存活度探测,则存活度探测为 <Not Defined> 触发器。存活度探测是 <Defined>,通过使用通知程序处理所有合规工作负载来接收正代表。 -
正形式:
drop 功能,必须丢弃的功能: <SYS_ADMIN> 规则定义预期的行为。如果工作负载无法丢弃SYS_ADMIN属性,它会违反策略并触发违反警报。
策略行为 :指定操作、通知或强制实施 RHACS 给定范围。
- 范围 :默认情况下,RHACS 策略是 全局的 ;它们在所有命名空间中适用于所有工作负载和镜像。可以通过显式包含或排除集群、命名空间和部署选择条件的组合来修改策略范围。策略范围可以使用正则表达式来选择命名空间名称、命名空间标签或部署名称或部署标签,whihc 会自动适用于所有集群,包括新的名称。
- action : 本节确定策略是否活跃,例如启用或禁用、强制执行还是禁用策略,以及用于路由警报的通知程序。
5.1.4. 策略和违反管理 复制链接链接已复制到粘贴板!
策略管理 包括安全团队实施的一系列活动,以建立适当的保护rails。所有这些活动 在评估 策略之前发生。违反管理 是安全与开发人员团队所采取的一系列活动,以帮助解决安全事件以修复策略违反情况。所有这些活动在策略被违反后发生。
5.1.4.1. 设置策略规则 复制链接链接已复制到粘贴板!
使用策略作为代码,RHACS 支持策略的内部和外部源。使用外部策略时,RHACS 定义了一个 Kubernetes 原生自定义资源(CR)来使用 OpenShift Pipelines 和 Argo CD 等工具简化策略作为代码。
您可以使用 RHACS 执行以下操作:
- 定义策略规则:无论团队是将其策略作为代码或使用 RHACS 内部数据库进行管理,编写策略在技术上都具有挑战性。RHACS 提供直观的用户界面或门户,简化了此任务。您可以专注于控制,同时隐藏规格复杂性。您可以使用门户编写策略,然后将其导出为以存储为代码或本地存储的 YAML。
- 选择策略适用的生命周期:对于内部策略,RHACS 提供 Create, Read, Update, Delete (CRUD)操作。对于外部策略,这些操作由用户自行处理,结果会使用 CR 向 RHACS 呈现。对于内部策略,RHACS 还提供基于角色的访问控制,并跟踪其审计日志中策略的更改。
配置策略行为 :RHACS 以集中的方式为用户提供多集群监管。在配置策略时,您可以配置以下内容:
- 为单个集群选择包含或排除的范围,或者选择"监管"以应用到所有集群
- 选择操作(inform/enforce),并启用或禁用策略
- 配置通知程序
测试策略:
- 您可以执行空运行来测试门户中的策略或使用 API,并执行策略 CR 验证
- 创建策略报告:您可以在门户中配置报告,或使用 API 详细策略覆盖范围
5.1.5. 默认安全策略 复制链接链接已复制到粘贴板!
Red Hat Advanced Cluster Security for Kubernetes 中的默认安全策略提供了广泛的覆盖范围,以识别安全问题,并确保环境中安全性的最佳实践。通过配置这些策略,您可以自动防止环境中的高风险服务部署并对运行时安全事件做出响应。
有关按严重性分类的默认安全策略列表,请参阅 "Policy reference"。
5.1.5.1. 查看默认安全策略 复制链接链接已复制到粘贴板!
Red Hat Advanced Cluster Security for Kubernetes 您可以使用 RHACS 门户查看默认策略、克隆它们并编辑克隆的默认策略。策略不支持默认策略作为代码功能。
流程
在 RHACS 门户中,进入 Platform Configuration
Policy Management。默认策略由 Origin 列中的 系统 标签表示。 注意您无法删除默认策略或编辑默认策略标准。
5.1.6. 自定义安全策略 复制链接链接已复制到粘贴板!
使用 RHACS,您可以创建自定义安全策略在构建、部署和运行开发阶段提供安全性。您可以使用以下方法创建自定义安全策略:
- 您可以克隆默认策略,然后修改它来为您的环境配置特定信息
- 您可以使用 RHACS 门户来创建并保存新策略。
- 使用策略作为代码功能,您可以创建策略并将其保存为 Kubernetes 自定义资源(CR),并使用 Kubernetes 原生持续交付(CD)工具(如 Argo CD)将它们应用到集群。
如需更多信息,请参阅"创建和修改自定义安全策略"。
在 openshift requirements 命名空间和默认的 OpenShift Container Platform pod 中强制自定义策略时要小心。例如,如果违反了策略,配置了强制的自定义策略可能会终止带有可能的数据丢失的 pod。
5.1.7. 共享安全策略 复制链接链接已复制到粘贴板!
您可以通过导出和导入策略,在 RHACS 门户的不同 Central 实例间共享安全策略。共享策略可帮助您为所有集群强制执行相同的标准。要共享策略,您可以将它们导出为 JSON 文件,然后将它们导入另一个 Central 实例。
目前,您无法使用 RHACS 门户同时导出多个安全策略。但是,您可以使用 API 导出多个安全策略。在 RHACS 门户中,进入 Help
5.1.7.1. 导出安全策略 复制链接链接已复制到粘贴板!
当您导出策略时,它会包含所有策略内容,还包括集群范围、集群排除以及所有配置的通知。
流程
-
在 RHACS 门户中,进入 Platform Configuration
Policy Management。 - 在 Policies 页面中,选择您要编辑的策略。
-
选择 Actions
Export policy to JSON。
5.1.7.2. 导入安全策略 复制链接链接已复制到粘贴板!
您可以从 RHACS 门户 的系统策略 视图中导入安全策略。
流程
-
在 RHACS 门户中,进入 Platform Configuration
Policy Management。 - 单击 Import policy。
- 在 Import policy JSON 对话框中,点 Upload 并选择您要上传的 JSON 文件。
单击 Begin import。
RHACS 中的每个安全策略都有唯一的 ID (UID)和唯一名称。当您导入策略时,RHACS 处理上传的策略,如下所示:
- 如果导入的策略 UID 和名称都与任何现有策略不匹配,RHACS 创建一个新的策略。
如果导入的策略与现有策略具有相同的 UID,但存在其他名称,您可以:
- 保留这两个策略。RHACS 使用新 UID 保存导入策略。
- 将现有的策略替换为导入的策略。
如果导入的策略与现有策略的名称相同,但不同的 UID,您可以:
- 通过为导入的策略提供新名称来保留这两个策略。
- 将现有的策略替换为导入的策略。
如果导入的策略与现有策略具有相同的名称和 UID,Red Hat Advanced Cluster Security for Kubernetes 会检查是否与现有策略匹配。如果策略条件匹配,RHACS 会保留现有策略并显示成功消息。如果策略条件不匹配,您可以:
- 通过为导入的策略提供新名称来保留这两个策略。
将现有的策略替换为导入的策略。
重要- 如果您导入到同一 Central 实例,RHACS 将使用所有导出的字段。
- 如果您导入到不同的 Central 实例,RHACS 省略某些字段,如集群范围的、集群排除和通知。RHACS 在消息中显示这些忽略的字段。这些字段因每个安装而异,您不能将它们从一个 Central 实例迁移到另一个实例。