This documentation is for a release that is no longer maintained.
You can select a different version or view all RHACS documentation.5.4. 创建自定义策略
除了使用默认策略外,您还可以在 Red Hat Advanced Cluster Security for Kubernetes 中创建自定义策略。
要构建新策略,您可以克隆现有的策略,也可以从头开始创建一个新策略。
- 您还可以根据 RHACS 门户中 Risk 视图中的过滤条件来创建策略。
-
您还可以在策略条件中使用
AND,OR, 和NOT逻辑运算符来创建高级策略。
5.4.1. 从系统策略视图创建安全策略 复制链接链接已复制到粘贴板!
您可以从系统策略视图创建新安全策略。
流程
-
在 RHACS 门户网站中,导航至 Platform Configuration
Policies。 - 点击 Create policy。
在 Policy details 部分输入策略的详情:
- 为策略输入一个 Name。
可选:从 Attach notifiers 部分的 available Notifiers 部分中选择将通知附加到策略。
注意在转发警报前,您必须将 Red Hat Advanced Cluster Security for Kubernetes 与通知提供程序集成,如 Webhook、JIRA、Pageruty、Splunk 或其他。
-
为这个策略选择一个 严重级别,可以是
Critical、High、Medium或Low。 - 选择您要 应用到 此策略的策略类别。
- 在 Description 框中输入策略详情。
- 输入有关在 Rationale 框中存在策略的原因。
- 在 Guidance 框中输入解决此策略的违反情况的步骤。
可选:在 MITRE ATT&CK 部分,选择您要为策略指定的技巧和您要指定的 技术。
- 单击 Add tactic,然后从下拉列表中选择 tactic。
- 单击 Add 技术 来为所选的 Tactic 添加技术。您可以为 tactic 指定多种技术。
- 点击 Next。
在 Policy 行为 部分中,为策略选择 Lifecycle 阶段 和 事件源(仅限运行时生命周期 )。
从 Build、Deploy 或 Runtime 中选择适合您的策略的 Lifecycle Stage。您可以选择多个阶段。
- 构建时策略适用于镜像字段,如 CVE 和 Dockerfile 指令。
- deploy-time 策略可以包括所有构建时策略标准,但还可包含集群配置中的数据,如以特权模式运行或挂载 Docker 套接字。
- 运行时策略可以包括所有构建时和部署时策略标准,但也可在运行时包括有关进程执行的数据。
对于 Response 方法,请选择:
- 用于在 违反列表中包括违反情况。
或选择 Inform and enforce 强制执行操作。
选择策略的强制行为。它仅适用于您在配置 Lifecycle Stages 时选择的各个阶段。选择 ON (启用)来强制执行策略并报告冲突,OFF (禁用)仅报告违反情况。各个生命周期阶段的行为都不同。
- Build - 当镜像与策略条件匹配时,Red Hat Advanced Cluster Security for Kubernetes Kubernetes 的持续集成(CI)构建会失败。
- Deployment - 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 included Scope 来使用 Restrict to Scope,以便仅对特定集群、命名空间或标签启用此策略。您可以添加多个范围,并在 RE2 语法中为命名空间 和标签使用正则表达式。
- 点 Add exclusion 范围 使用 Scope 排除部署、集群、命名空间和标签,这意味着策略不会应用到您选择的实体。您可以添加多个范围,并在 RE2 语法中为命名空间 和标签使用正则表达式。但是,您不能使用正则表达式来选择部署。
对于 排除的镜像(仅Build Lifecycle),请选择您不想触发违反情况的所有镜像。
注意排除的镜像 设置只在您通过 Build 生命周期阶段连续集成系统中检查镜像时应用。如果您使用此策略检查 Deploy 生命周期阶段中运行的部署,或检查在 Runtime 生命周期阶段中的运行时活动时,则不会生效。
- 点击 Next。
- 在 Review policy 部分,预览策略违反情况。
- 点击 Save。
5.4.2. 从风险视图中创建安全策略 复制链接链接已复制到粘贴板!
在风险视图中评估部署的风险时,当您应用本地页面过滤时,您可以根据您使用的过滤标准创建新的安全策略。
流程
- 导航到 RHACS 门户并从 导航菜单中选择风险。
- 应用您要创建策略的本地页面过滤条件。
- 选择 New Policy 并填写所需字段来创建新策略。
5.4.3. 策略标准 复制链接链接已复制到粘贴板!
在 Policy Criteria 部分中,您可以配置要触发策略的数据。
您可以根据下表中列出的属性来配置策略。
在此表中:
Regular expressions, AND, OR, 和 NOT 列指示您可以使用正则表达式和其他逻辑运算符以及特定的属性。
-
!在 Regular 表达式 列中,表示您只能对列出的字段使用正则表达式。 -
!在 AND 中,OR 列表示您只能对属性使用上述逻辑运算符。
-
- RHACS 版本 列显示必须使用该属性的 Red Hat Advanced Cluster Security for Kubernetes 的版本。
您不能使用逻辑组合运算符
AND和 或来获得以下属性:-
布尔值
true和false 最小值语义,例如:
- 最低 RBAC 权限
- 自镜像创建以来的天数
-
布尔值
您不能将
NOT逻辑运算符用于具有以下内容的属性:-
布尔值
true和false -
已使用进行比较(如
<,>,<=,>=操作符)的数字值。 可以有多个值的复合条件,例如:
- Dockerfile 行,其中包括 instructions 和 参数。
- 环境变量,由名称和值组成。
- 其他含义,包括 添加功能、Drop Capabilities、自镜像创建起日,以及 自镜像上次扫描起的天数。
-
布尔值
要使用逻辑运算符 AND 或,而不要 创建安全策略,您需要 Red Hat Advanced Cluster Security for Kubernetes 版本 3.0.45 或更新版本。但是,在早期版本中,您仍然可以将正则表达式用于 Regular 表达式 列中列出的字段。
| 属性 | 描述 | RHACS 版本 | 正则表达式 | NOT | 和,或者 | 阶段 |
|---|---|---|---|---|---|---|
| 命名空间 | 命名空间的名称。 | 3.0.51 及更新版本 | ✓ | ✓ | ✓ | 部署 |
| 镜像 Registry | 镜像 registry 的名称。 | All | ✓ | ✓ | ✓ | 部署 |
| 镜像远程 |
registry 中镜像的完整名称,如 | All | ✓ | ✓ | ✓ | 部署 |
| 镜像标签 | 镜像的标识符。 | All | ✓ | ✓ | ✓ | 部署 |
| 自镜像创建以来的天数 | 镜像创建日期的天数。 | All | ✕ | ✕ | ✕ | Build |
| 自镜像最后一次扫描的天数 | 最后一次镜像扫描以来的天数。 | All | ✕ | ✕ | ✕ | Build |
| Dockerfile 行 | Dockerfile 中的特定行,包括 instructions 和 参数。 | 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 | ✕ | ✕ | ✕ | 部署 |
| 只读根文件系统 | 使用 root 文件系统运行的容器配置为只读。 | All | ✕ | ✕ | ✕ | 部署 |
| 丢弃功能 |
必须从容器中丢弃的 Linux 功能。例如 | All | ✕ | ✕ | ✓ | 部署 |
| 添加功能 | 不得添加到容器中的 Linux 功能,例如发送原始数据包或覆盖文件权限的功能。 | All | ✕ | ✕ | ✓ | 部署 |
| 进程名称 | 在部署中执行的进程的名称。 | All | ✓ | ✓ | ✓ | Runtime |
| Process 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 |
| 是 Impersonated 用户 | 检查请求是否由服务帐户或者其它帐户模拟的用户进行。 | 3.63 及更新版本 | ✕ | ✕ | ✕ | Runtime |
| Runtime Class | 部署 RuntimeClass。 | 3.67 及更新版本 | ✓ | ✓ | ✓ | 部署 |
| 自动挂载服务帐户令牌 | 检查部署配置是否自动挂载服务帐户令牌。 | 3.68 及更新版本 | ✕ | ✕ | ✕ | 部署 |
| 存活度(Liveness)探测 | 容器是否定义了存活度探测。 | 3.69 及更新版本 | ✕ | ✕ | ✕ | 部署 |
| 就绪度(Readiness)探测 | 容器是否定义了就绪度探测。 | 3.69 及更新版本 | ✕ | ✕ | ✕ | 部署 |
| Replicas | 部署副本数。 | 3.69 及更新版本 | ✕ | ✓ | ✓ | 部署 |
| 权限升级 | 在配置了开发时,提供警报,以允许容器进程获得高于其父进程的特权。 | 3.70 及更新的版本 | ✕ | ✕ | ✕ | 部署 |
| Ingress Network Policy | 检查 ingress Kubernetes 网络策略是否存在。 | 3.70 及更新的版本 | ✕ | ✕ | ✓ | 部署 |
| 出口网络策略 | 检查出口 Kubernetes 网络策略是否存在。 | 3.70 及更新的版本 | ✕ | ✕ | ✓ | 部署 |
| 不受可信镜像签名者验证 | 您可以使用签名集成列表来验证镜像签名。在镜像上创建警报,它们没有签名,或者其签名至少无法被提供的签名集成之一验证。 | 3.70 及更新的版本 | ✕ | ✕ |
!仅限 | 部署 |
如果您使用 Red Hat Advanced Cluster Security for Kubernetes 版本 3.0.44 或更早的版本,则您在 Policy 条件 部分中指定的策略条件为 "AND"ed。这意味着,在所有指定的策略条件匹配时才会违反触发器。
5.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选项。 如果您选择了一个带有复合值
环境变量 的属性,您将看到为Key、Value、Value From字段的值以及为可用选项添加更多值的选项。- 要组合多个属性的值,点 Add 图标。
-
您还可以单击策略部分中列出的逻辑运算符
AND或OR,以在AND和OR运算符之间切换。在 Operator 之间切换只在策略部分中正常工作,而不在两个不同的策略部分之间进行切换。
-
如果您选择了一个布尔值
-
您可以通过重复这些步骤来指定多个
AND和OR条件。为添加的属性配置条件后,点 Next 继续创建策略。