This documentation is for a release that is no longer maintained.
You can select a different version or view all RHACS documentation.6.4. 创建自定义策略
除了使用默认策略外,您还可以在 Red Hat Advanced Cluster Security for Kubernetes 中创建自定义策略。
要构建新策略,您可以克隆现有策略或从头创建新策略。
- 您还可以根据 RHACS 门户的风险 视图中的 过滤器标准创建策略。
-
您还可以使用
AND、或,而不是策略条件的逻辑运算符来创建高级策略。
6.4.1. 从系统策略视图中创建安全策略 复制链接链接已复制到粘贴板!
您可以从系统策略视图中创建新的安全策略。
流程
-
在 RHACS 门户网站中,导航到 Platform Configuration
Policies。 - 点击 Create policy。
在 Policy details 部分中,输入您的策略的以下详情:
- 输入策略的 Name。
可选:从 Attach notifiers 部分下的可用 Notifier 中选择 Attach notifiers 到策略。
注意您必须将 Red Hat Advanced Cluster Security for Kubernetes 与通知提供程序集成,如 Webhook、JIRA、PagerDuty、Splunk 等,然后才能转发警报。
-
选择 此策略 的严重性级别,可以是
Critical、High、Medium或Low。 - 选择您要 应用到 此策略的策略类别。
- 在 Description 框中输入策略详情。
- 在 Rationale 框中输入有关策略为何的说明。
- 在 Guidance 框中输入步骤来解决此策略的违反情况。
可选:在 MITRE ATT&CK 部分中,选择您需要为策略指定的 tactics and the techniques。
- 单击 Add tactic,然后从下拉列表中选择 tactic。
- 点 Add Technology,为所选 tactic 添加技术。您可以为 tactic 指定多种技术。
- 点击 Next。
在 Policy behavior 部分,为策略选择 Lifecycle stages 和 Event sources (Runtime lifecycle only)。
选择 您的策略适用的 Lifecycle Stage,从 Build、Deploy 或 Runtime。您可以选择多个阶段。
- 构建策略适用于镜像字段,如 CVE 和 Dockerfile 指令。
- 部署时策略可以包括所有构建时策略条件,但它们还可以包含来自集群配置的数据,如以特权模式运行或挂载 Docker 套接字。
- 运行时策略可包括所有构建时间和部署时间策略标准,但它们还可以包含运行时执行过程中有关进程执行的数据。
对于 Response 方法,请选择:
- 告知 在违反列表中包含违反情况。
或选择 Inform 和 enforce to enforce 操作。
选择策略的执行行为。它仅在配置 Lifecycle Stages 时选择阶段使用。选择 ON (启用)来强制策略并报告违反情况,使用 OFF (disable)仅报告违反情况。每个生命周期阶段的执行行为会有所不同。
- build - 当镜像与策略条件匹配时,Red Hat Advanced Cluster Security for Kubernetes 会失败,您的持续集成(CI)构建。
- 部署 - Red Hat Advanced Cluster Security for Kubernetes 会阻止创建与策略条件匹配的部署。在使用准入控制器强制执行的集群中,Kubernetes 或 OpenShift Container Platform API 服务器会阻断所有不合规的部署。在其他集群中,Red Hat Advanced Cluster Security for Kubernetes 编辑不合规的部署以防止调度 pod。
Runtime - Red Hat Advanced Cluster Security for Kubernetes 会终止与策略条件匹配的所有 pod,或阻止对 pod 执行的操作。
警告策略执行可能会影响正在运行的应用程序或开发流程。在启用执行选项前,请告知所有利益相关者并计划如何响应自动执行操作。
- 点击 Next。
- 在 Policy Criteria 部分中,配置您要触发策略的属性。
- 点击 Next。
在 Policy scope 部分中,配置以下内容:
- 点击 Add 包含范围 使用 Restrict to Scope 来为特定集群、命名空间或标签启用此策略。您可以添加多个范围,并在 RE2 语法中使用正则表达式进行命名空间和标签。
- 点击 Addclu sion 范围使用 Exclude by Scope 来排除您指定的部署、集群、命名空间和标签,这意味着策略不会应用于您选择的实体。您可以添加多个范围,并在 RE2 语法中使用正则表达式进行命名空间和标签。但是,您无法使用正则表达式来选择部署。
对于 Excluded Images (Build Lifecycle),请选择您不想触发冲突的所有镜像。
注意排除的镜像 设置只适用于您在持续集成系统中的镜像与 构建 生命周期阶段时才适用。如果您使用此策略检查 Deploy 生命周期阶段或运行时活动在 Runtime 生命周期阶段或运行时活动中运行的部署,则没有任何效果。
- 点击 Next。
- 在 Review policy 部分中,预览策略违反情况。
- 点 Save。
6.4.2. 从 risk 视图创建安全策略 复制链接链接已复制到粘贴板!
在风险视图中评估部署的风险时,当您应用本地页面过滤时,您可以根据您使用的过滤标准创建新的安全策略。
流程
- 导航到 RHACS 门户,然后从 导航菜单中选择风险。
- 应用您要创建策略的本地页面过滤条件。
- 选择 New Policy 并填写所需字段以创建新策略。
6.4.3. 策略标准 复制链接链接已复制到粘贴板!
在 Policy Criteria 部分中,您可以配置要触发策略的数据。
您可以根据下表中列出的属性配置策略。
在此表中:
正则表达式 、和 或,不 列指明是否可以将正则表达式和其他逻辑运算符与特定属性一起使用。
-
!在 正则表达式 列中,表示您只能对列出的字段使用正则表达式。 -
!在 AND 中,OR 列表示您只能对 属性使用上述逻辑运算符。
-
- RHACS 版本 栏指示您必须使用该属性的 Red Hat Advanced Cluster Security for Kubernetes 版本。
您不能将逻辑组合运算符
和或用于具有以下条件的属性:-
布尔值
true和false 最小值语义,例如:
- 最低 RBAC 权限
- 创建自镜像以来的天数
-
布尔值
您不能将 not
logicaloperator 用于具有的属性:-
布尔值
true和false -
已使用比较的数字值,如 < , >
;,<=,>=operator。 可以有多个值的复合条件,例如:
- Dockerfile 行,其中包含指令和参数。
- 环境变量,由名称和值组成。
- 其他含义,包括 Add capabilities、Drop Capabilities、自镜像创建的日 以及 自镜像最后一次扫描以来的几天。
-
布尔值
要使用逻辑运算符 AND、或 不 创建安全策略,您需要 Red Hat Advanced Cluster Security for Kubernetes 版本 3.0.45 或更高版本。但是,在早期版本中,您仍然可以对 Regular 表达式 列中列出的字段使用正则表达式。
| 属性 | Description | RHACS 版本 | 正则表达式 | 不适用 | 或者 | 阶段 |
|---|---|---|---|---|---|---|
| 命名空间 | 命名空间的名称。 | 3.0.51 或更新版本 | ✓ | ✓ | ✓ | 部署 |
| 镜像 Registry | 镜像 registry 的名称。 | All | ✓ | ✓ | ✓ | 部署 |
| 镜像远程 |
registry 中镜像的完整名称,如 | All | ✓ | ✓ | ✓ | 部署 |
| 镜像标签 | 镜像的标识符。 | All | ✓ | ✓ | ✓ | 部署 |
| 创建自镜像以来的天数 | 镜像创建日期中的天数。 | All | ✕ | ✕ | ✕ | Build |
| 镜像最后一次扫描之后的天数 | 最后一次镜像扫描以来的天数。 | All | ✕ | ✕ | ✕ | Build |
| Dockerfile 行 | Dockerfile 中的特定行,包括指令和参数。 | All | ! 仅适用于值 | ✕ | ✓ | Build |
| 镜像没有扫描 | 镜像没有可用于扫描数据。 | All | ✕ | ✕ | ✕ | Build |
| CVSS |
通用漏洞评分系统,使用它来匹配分数大于 | All | ✕ | ✕ | ✓ | Build |
| 固定者 | 在镜像中修复带有标记漏洞的软件包的版本字符串。 | All | ✓ | ✓ | ✓ | Build |
| CVE | 常见的漏洞和风险,将其用于特定的 CVE 编号。 | All | ✓ | ✓ | ✓ | Build |
| 镜像组件 | 镜像中存在的特定软件组件的名称和版本号。 | All | ✓ | ✕ | ✓ | Build |
| 镜像操作系统 | 镜像的基本操作系统的名称和版本号。 | 3.0.47 或更新版本 | ✓ | ✓ | ✓ | Build |
| 环境变量 | 根据名称或值检查环境变量。 | All | ! 仅适用于键和值 | ✕ | ✓ | 部署 |
| 不允许的注解 | 在指定环境中的 Kubernetes 资源上不允许使用的注解。 | All | ✓ | ✕ | ✓ | 部署 |
| 不允许镜像标签 |
检查是否存在不应使用的 Docker 镜像标签。如果部署中任何镜像都有指定标签,则策略将触发。您可以将正则表达式用于 | 3.0.40 或更新版本 | ✓ | ✕ | ✓ | 部署 |
| 所需的镜像标签 |
检查是否存在所需的 Docker 镜像标签。如果部署中任何镜像都没有指定标签,则策略会触发。您可以将正则表达式用于 | 3.0.40 或更新版本 | ✓ | ✕ | ✓ | 部署 |
| 所需的标签 | 检查 Kubernetes 中是否存在所需的标签。 | All | ✓ | ✕ | ✓ | 部署 |
| 所需的注解 | 检查 Kubernetes 中是否存在所需的注解。 | All | ✓ | ✕ | ✓ | 部署 |
| 卷名称 | 存储的名称。 | All | ✓ | ✓ | ✓ | 部署 |
| 卷源 |
指示置备卷的形式。例如: | All | ✓ | ✓ | ✓ | 部署 |
| 卷目标 | 挂载卷的路径。 | All | ✓ | ✓ | ✓ | 部署 |
| 卷类型 | 卷的类型。 | All | ✓ | ✓ | ✓ | 部署 |
| 可写卷 | 被挂载为可写的卷。 | All | ✕ | ✕ | ✕ | 部署 |
| 协议 | 供公开端口使用的协议,如 TCP 或 UDP。 | All | ✓ | ✓ | ✓ | 部署 |
| 端口 | 部署公开的端口号。 | All | ✕ | ✓ | ✓ | 部署 |
| privileged | 特权运行部署. | All | ✕ | ✕ | ✕ | 部署 |
| Read-Only Root Filesystem | 使用配置为只读的 root 文件系统运行容器。 | All | ✕ | ✕ | ✕ | 部署 |
| 丢弃功能 |
必须从容器中丢弃的 Linux 功能。例如, | All | ✕ | ✕ | ✓ | 部署 |
| 添加功能 | 不添加到容器中的 Linux 功能,实例能够发送原始数据包或覆盖文件权限。 | All | ✕ | ✕ | ✓ | 部署 |
| 进程名称 | 部署中执行的进程的名称。 | All | ✓ | ✓ | ✓ | Runtime |
| 进程 Ancestor | 部署中执行的进程的任何父进程的名称。 | All | ✓ | ✓ | ✓ | Runtime |
| 进程参数 | 部署中执行的进程的命令参数。 | All | ✓ | ✓ | ✓ | Runtime |
| 进程 UID | 部署中执行的进程的 UNIX 用户 ID。 | All | ✕ | ✓ | ✓ | Runtime |
| 端口公开 | 服务暴露方法,如负载均衡器或节点端口。 | All | ✕ | ✓ | ✓ | 部署 |
| 服务帐户 | 服务帐户的名称。 | All | ✓ | ✓ | ✓ | 部署 |
| 可写入主机挂载 | 资源已在具有写入权限的主机上挂载了路径。 | All | ✕ | ✕ | ✕ | 部署 |
| 执行意外的进程 | 检查部署是否在部署的锁定进程基准中列出哪些进程执行。 | All | ✕ | ✕ | ✕ | Runtime |
| 最低 RBAC 权限 |
如果部署的 Kubernetes 服务帐户等于 | All | ✕ | ✓ | ✕ | 部署 |
| 容器名称 | 容器的名称。 | 3.0.52 及更新版本 | ✓ | ✓ | ✓ | 部署 |
| 容器 CPU 请求 | 检查为给定资源保留的内核数。 | All | ✕ | ✕ | ✓ | 部署 |
| 容器 CPU 限制 | 检查允许使用资源的最大内核数。 | All | ✕ | ✕ | ✓ | 部署 |
| 容器内存请求 | 检查为给定资源保留的内存量。 | All | ✕ | ✕ | ✓ | 部署 |
| 容器内存限制 | 检查允许使用资源的最大内存量。 | All | ✕ | ✕ | ✓ | 部署 |
| Kubernetes 操作 |
Kubernetes 操作的名称,如 | 3.0.55 或更新版本 | ✕ | ✕ |
!仅限 | Runtime |
| Kubernetes 资源 |
可访问的 Kubernetes 资源的名称,如 | 3.63 或更新版本 | ✕ | ✕ |
!仅限 | Runtime |
| Kubernetes 资源名称 | 访问的 Kubernetes 资源的名称。 | 3.63 或更新版本 | ✓ | ✓ |
!仅限 | Runtime |
| Kubernetes API Verb |
用于访问资源的 Kubernetes API 操作动词,如 | 3.63 或更新版本 | ✕ | ✕ |
!仅限 | Runtime |
| Kubernetes 用户名 | 访问该资源的用户的名称。 | 3.63 或更新版本 | ✓ | ✓ |
!仅限 | Runtime |
| Kubernetes 用户组 | 访问资源所属用户的组名称。 | 3.63 或更新版本 | ✓ | ✕ |
!仅限 | Runtime |
| 用户代理 |
用于访问该资源的用户代理。例如 | 3.63 或更新版本 | ✓ | ✓ |
!仅限 | Runtime |
| 源 IP 地址 | 用户从其访问资源的 IP 地址。 | 3.63 或更新版本 | ✓ | ✓ |
!仅限 | Runtime |
| 有人为用户 | 检查请求是否由服务帐户或某些其他帐户模拟。 | 3.63 或更新版本 | ✕ | ✕ | ✕ | Runtime |
| 运行时类 | 部署的 RuntimeClass。 | 3.67 或更新版本 | ✓ | ✓ | ✓ | 部署 |
| 自动挂载服务帐户令牌 | 检查部署配置是否自动挂载服务帐户令牌。 | 3.68 或更新版本 | ✕ | ✕ | ✕ | 部署 |
| 存活度(Liveness)探测 | 容器是否定义了存活度探测。 | 3.69 或更新版本 | ✕ | ✕ | ✕ | 部署 |
| 就绪度(Readiness)探测 | 容器是否定义了就绪度探测。 | 3.69 或更新版本 | ✕ | ✕ | ✕ | 部署 |
| Replicas | 部署副本数。 | 3.69 或更新版本 | ✕ | ✓ | ✓ | 部署 |
| 特权升级 | 当开发配置为允许容器进程获得的权限超过其父进程时,可以提供警报。 | 3.70 及更新的版本 | ✕ | ✕ | ✕ | 部署 |
| Ingress Network Policy | 检查入口 Kubernetes 网络策略是否存在。 | 3.70 及更新的版本 | ✕ | ✕ | ✓ | 部署 |
| 出口网络策略 | 检查出口 Kubernetes 网络策略是否存在。 | 3.70 及更新的版本 | ✕ | ✕ | ✓ | 部署 |
| 不受可信镜像签名者验证 | 您可以使用签名集成列表来验证镜像签名。在镜像上创建警报,它们没有签名,或者其签名至少无法被提供的签名集成之一验证。 | 3.70 及更新的版本 | ✕ | ✕ |
!仅限 | 部署 |
如果您使用 Red Hat Advanced Cluster Security for Kubernetes 版本 3.0.44 或更早版本,您在 Policy criteria 部分中指定的策略条件为 "AND"。这意味着,如果所有指定的策略条件都匹配,则违反才会触发。
6.4.3.1. 为策略条件添加逻辑条件 复制链接链接已复制到粘贴板!
您可以使用拖放策略字段面板为策略标准指定逻辑条件。
前提条件
- 您必须使用 Red Hat Advanced Cluster Security for Kubernetes 版本 3.0.45 或更高版本。
流程
在 Policy Criteria 部分中,选择 Add a new condition 来添加新策略部分。
- 您可以点 Edit 图标重命名 policy 部分。
- Drag out a policy 字段 部分在多个类别中列出了可用策略标准。您可以扩展并折叠这些类别来查看策略标准属性。
- 将属性拖到 policy 部分区域中的 Drop a policy 字段。
根据您选择的属性的类型,您可以获得不同的选项来配置所选属性的条件。例如:
-
如果您选择了一个带有布尔值值
Read-Only Root Filesystem的属性,您将看到READ-ONLY和WRITABLE选项。 如果您选择一个带有 compound values
Environment 变量的属性,您会看到为Key、Value和Value From字段输入值的选项,以及用于为可用选项添加更多值的图标。- 要组合多个属性的值,点 Add 图标。
-
您也可以点策略部分中列出的逻辑运算符
AND或OR,以在AND和OR运算符之间进行切换。要在 Operator 间进行切换,只在策略部分内有效,而不在两个不同的策略部分之间使用。
-
如果您选择了一个带有布尔值值
-
您可以通过重复这些步骤来指定多个
AND和OR条件。为添加的属性配置条件后,点 Next 以继续创建策略。