$ kubectl create -f helm/chart/crds/config.stackrox.io_securitypolicies.yaml
除了使用默认策略外,您还可以为 Red Hat Advanced Cluster Security for Kubernetes 创建自定义策略。
您可以使用以下方法创建自定义策略
在 RHACS 门户中,转到**平台配置** → **策略管理**,然后单击**创建策略**。
在 RHACS 门户中,转到**风险**,并使用过滤器选择策略要使用的条件。单击**创建策略**。
通过将策略保存为 Kubernetes 自定义资源 (CR) 并使用持续交付工具(如 Argo CD)将其应用于集群,以代码方式创建和管理策略。
有关更多信息,请参阅以下部分。
您可以从系统策略视图创建新的安全策略。
在 RHACS 门户中,转到**平台配置** → **策略管理**。
单击**创建策略**。
在以下部分配置策略定义信息
在**策略详细信息**部分输入有关策略的以下详细信息。
输入策略的名称。
选择此策略的严重性级别。
选择策略的类别。这是必填字段。
在描述字段中输入策略的详细信息。
在基本原理字段中解释策略存在的原因。
在指导字段中输入解决此策略违规的步骤。
在MITRE ATT&CK 部分,选择您想为策略指定的战术和技术。
单击添加战术,然后从下拉列表中选择战术。
单击添加技术以添加所选战术的技术。您可以为一个战术指定多种技术。
单击下一步。
在生命周期部分,完成以下步骤
选择您的策略适用的生命周期阶段:构建、部署或运行时。您可以从以下选项中选择多个阶段
构建时策略适用于镜像字段,例如 CVE 和 Dockerfile 指令。
部署时策略可以包含所有构建时策略标准,但也可以包含来自集群配置的数据,例如以特权模式运行或挂载 Docker 套接字。
运行时策略可以包含所有构建时和部署时策略标准,但也可以包含运行时进程执行的数据。
如果您选择了运行时生命周期阶段,则必须选择以下事件源之一
部署:当事件源包含进程和网络活动、Pod 执行和 Pod 端口转发时,RHACS 会触发策略违规。
审计日志:当事件源与 Kubernetes 审计日志记录匹配时,RHACS 会触发策略违规。
单击下一步。
要配置策略规则
在规则部分,配置您希望触发策略的条件。您可以编辑规则标题,并单击添加新规则以添加其他规则。
对于每个规则,单击并拖动策略字段到策略部分以添加策略字段或标准。
可用的策略字段取决于您为策略选择的生命周期阶段。例如,在为运行时生命周期创建策略时,Kubernetes 访问策略或网络下的标准可用,但在为构建生命周期创建策略时不可用。有关策略标准的更多信息(包括有关标准及其可用生命周期阶段的信息),请参阅“附加资源”部分中的“策略标准”。 |
对于每个字段,您可以从特定于该字段的选项中选择。这些选项因字段类型而异。例如:
字符串值的默认行为是匹配策略字段,您可以单击非来指示您不希望字段匹配。
某些字段包含值为true
或false
的值。
某些字段要求您从下拉列表中选择一个值。
如果您选择具有布尔值只读根文件系统
的属性,您将看到只读
和可写
选项。
如果您选择具有复合值环境变量
的属性,您将看到用于输入键
、值
和值来源
字段的值的选项,以及一个图标,用于为可用选项添加更多值。
有关更多信息,请参阅“附加资源”部分中的“策略标准”。 |
要组合属性的多个值,请单击添加图标。
单击下一步。
创建范围以限制或排除策略对环境中的实体(例如集群或命名空间)的影响。
要按范围限制,请单击添加包含范围。这使策略仅适用于特定集群、命名空间或部署标签。您可以添加多个范围,并对命名空间和标签使用RE2 语法中的正则表达式。
要按范围排除,例如,要从策略中排除特定的部署、集群、命名空间和部署标签,请单击添加排除范围。策略将不适用于您选择的实体。您可以添加多个范围,并对命名空间和标签使用RE2 语法中的正则表达式。但是,您不能使用正则表达式来选择部署。
此功能仅适用于为部署和运行时生命周期阶段配置的策略。 |
对于为构建生命周期阶段配置的策略,您可以从策略中排除镜像。在排除镜像(仅限构建生命周期)字段中,输入您不希望触发违规的镜像。
已排除镜像设置仅在您使用构建生命周期阶段在持续集成系统中检查镜像时适用。如果您使用此策略检查部署生命周期阶段中的运行部署或运行时生命周期阶段中的运行时活动,则它没有任何效果。 |
单击下一步。
配置策略的激活状态、强制执行和通知程序。
为策略选择激活状态。
选择一种强制执行方法
告知:将违规包含在违规列表中。
告知并强制执行:强制执行操作。如果您选择此选项,则必须使用每个生命周期的切换开关为策略选择强制执行行为。您可以选择的强制执行行为取决于您在策略定义的生命周期部分中为策略选择的生命周期阶段。根据生命周期阶段,可以使用以下强制执行行为
构建:当镜像与策略的标准匹配时,RHACS 会使您的持续集成 (CI) 构建失败。
部署:对于部署阶段,如果配置并运行了 RHACS 准入控制器,则 RHACS 会阻止与策略条件匹配的部署的创建和更新。
在具有准入控制器强制执行的集群中,Kubernetes 或 OpenShift Container Platform API 服务器会阻止所有不符合条件的部署。在其他集群中,RHACS 会编辑不符合条件的部署以防止调度 Pod。
对于现有部署,策略更改仅在发生 Kubernetes 事件时下次检测到标准时才会导致强制执行。有关强制执行的更多信息,请参阅“部署阶段的安全策略强制执行”。
运行时:当 Pod 中的事件与策略的标准匹配时,RHACS 会删除所有 Pod。
策略强制执行可能会影响正在运行的应用程序或开发流程。在启用强制执行选项之前,请告知所有利益相关者并规划如何响应自动强制执行操作。 |
将通知程序附加到策略,以便将策略违规发送给电子邮件收件人或外部工具(例如 Jira、Splunk 或使用 Webhook 的其他应用程序)。
从列表中选择通知程序。
您必须先配置通知,才能在列表中看到并选择它。您可以在**平台配置** → **集成**页面中的**通知程序集成**部分配置这些集成。 |
单击下一步。
查看您已配置的策略设置。
验证策略配置是否已使用正确的选项进行配置。
**预览违规**面板提供其他信息,包括构建阶段或部署阶段部署是否违反了策略。
运行时违规在此预览中不可用,因为它们是根据未来事件生成的。 |
保存策略之前,请验证违规是否准确。
单击**保存**。
您可以使用拖放策略字段面板来指定策略条件的逻辑条件。
您必须使用 Red Hat Advanced Cluster Security for Kubernetes 3.0.45 或更高版本。
在**策略条件**部分,选择**添加新条件**以添加新的策略部分。
您可以单击**编辑**图标来重命名策略部分。
**拖出策略字段**部分列出了多个类别中的可用策略条件。您可以展开和折叠这些类别以查看策略条件属性。
将属性拖到策略部分的**将策略字段拖放到此处**区域。
根据您选择的属性类型,您可以获得不同的选项来配置所选属性的条件。例如
如果您选择具有布尔值只读根文件系统
的属性,您将看到只读
和可写
选项。
如果您选择具有复合值环境变量
的属性,您将看到用于输入键
、值
和值来源
字段的值的选项,以及一个图标,用于为可用选项添加更多值。
要组合属性的多个值,请单击添加图标。
您还可以单击策略部分中列出的逻辑运算符AND
或OR
,在AND
和OR
运算符之间切换。运算符之间的切换仅在策略部分内有效,而不是在两个不同的策略部分之间。
您可以通过重复这些步骤来指定多个AND
和OR
条件。配置添加属性的条件后,单击**下一步**继续创建策略。
在**风险**视图中评估部署中的风险时,应用本地页面筛选后,您可以根据使用的筛选条件创建新的安全策略。
转到 RHACS 门户并从导航菜单中选择**风险**。
应用要为其创建策略的本地页面筛选条件。
选择**新建策略**并填写所需字段以创建新策略。
您可以编辑您创建的策略以及您已克隆的 Red Hat Advanced Cluster Security for Kubernetes 提供的现有默认策略。
在 RHACS 门户中,转到**平台配置** → **策略管理**。
在**策略**页面中,选择要编辑的策略。
选择**操作** → **编辑策略**。
您无法编辑默认策略。您必须克隆默认策略并编辑克隆的策略。 |
编辑您想要更改的字段,然后单击**保存**。
您可以通过将策略保存为 Kubernetes 自定义资源 (CR) 并使用 Kubernetes 原生持续交付 (CD) 工具(例如 Argo CD)将它们应用于集群,以代码方式创建和管理策略。
策略即代码仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅技术预览功能支持范围。 |
RHACS 提供了使用默认策略或为您的系统创建自定义策略的功能。使用策略即代码功能,您可以通过在本地编写自定义策略,然后使用持续交付工具(例如 Argo CD)来跟踪、管理和将策略应用于运行 RHACS 的集群来创建自定义策略。您还可以使用 API 配置与您自己的 GitOps 存储库(例如 GitHub)的连接。要在本地编写策略,您可以创建表示策略所需状态的 CR。创建或更新 CR 并使用 CI/CD 工具应用它们后,将创建或更新存储在 RHACS 数据库中的策略。
策略即代码对于希望使用 YAML 或 JSON 而不是 RHACS 门户编写策略的 Kubernetes 安全架构师非常有用。已经使用 GitOps 工作流管理 Kubernetes 配置的 GitOps 管理员也会发现它很有用。
RHACS 在安装 Central 的命名空间(通常是stackrox
命名空间)中安装一个新的配置控制器。使用 Argo CD 工作流,您可以配置 Argo CD 使用 Kubernetes API 与stackrox
命名空间中的此控制器通信。配置此连接后,RHACS 中的控制器将从 Kubernetes API 接收有关作为单个 Kubernetes CR 文件管理的新策略、更新策略或已删除策略的信息。RHACS 将策略 CR 与存储在 RHACS 数据库中的策略协调。
对于不使用 Argo CD 的 GitOps 工作流,您可以将您的 GitOps 存储库配置为通过 RHACS API 连接到 RHACS 中的 Central。不使用 CR。
由于可以在 RHACS 门户和外部编辑、删除和创建策略,因此有时可能会发生策略漂移。当 RHACS 中 Central 中的策略版本与 Kubernetes 中的策略版本不匹配时,就会发生漂移。
当使用 RHACS 门户或 API 而不是修改其 Kubernetes 自定义资源来更改外部管理的策略时,可能会发生漂移。RHACS 不会阻止漂移,但不建议这样做。漂移会在引入后十小时内自动解决。
您可以使用 RHACS 门户将现有策略保存为 YAML 文件,以代码方式创建新策略。
您必须安装 RHACS 4.6 或更高版本。
如果您使用清单安装方法(也称为roxctl
方法)安装了 RHACS,则必须使用以下命令手动应用位于 .zip 文件 helm/chart/crds/config.stackrox.io_securitypolicies.yaml
中的 config.stackrox.io
CRD。
$ kubectl create -f helm/chart/crds/config.stackrox.io_securitypolicies.yaml
使用 RHACS 门户创建 CR 来在代码中创建新策略
在**策略管理**页面中,创建一个新策略或克隆一个默认策略。
您必须先克隆一个默认策略,才能将其保存为 CR。 |
在列出策略的行中,点击溢出菜单,,然后选择**保存为自定义资源**。要一次保存多个策略,可以选择它们并点击**批量操作** → **保存为自定义资源**。
编辑策略后,您可以通过以下任一方法应用已保存的 CR
使用oc apply
或 kubectl apply
命令将 CR 直接应用到安装 Central 的 Kubernetes 命名空间。
使用 Argo CD 或您的 GitOps 工具将 CR 推送到安装 Central 的 Kubernetes 命名空间。
您可以通过为策略构建 CR 来在代码中创建新策略。
使用编辑器构建具有以下属性的策略的 CR
kind: SecurityPolicy
apiVersion: config.stackrox.io/v1alpha1
metadata:
name: short-name
spec:
policyName: A longer form name
# ...
使用在线文档(例如,输入 |
通过以下任一方法应用已保存的 CR
使用oc apply
或 kubectl apply
命令将 CR 直接应用到安装 Central 的 Kubernetes 命名空间。
使用 Argo CD 或您的 GitOps 工具将 CR 推送到安装 Central 的 Kubernetes 命名空间。
安装 RHACS 时会自动启用代码策略功能,但您可以将其禁用。
要禁用代码策略功能,请根据您用于安装 RHACS 的方法完成以下任务之一
如果您使用 Operator 安装了 RHACS,请将spec.configAsCode.configAsCodeComponent
字段设置为Enabled
。
如果您使用 Helm chart 安装了 RHACS,请将values.yaml
文件中的configAsCode.enabled
字段设置为true
。
如果您使用清单安装方法(也称为roxctl
方法)安装了 RHACS,请运行以下命令删除config-controller
部署
$ kubectl -n stackrox delete deployment config-controller (1)
1 | 对于 OpenShift Container Platform,请使用oc 代替kubectl 。 |