You are viewing documentation for a release that is no longer maintained. To view the documentation for the most recent version, see the latest RHACS docs.
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 继续创建策略。