6.2. 自定义安全策略
除了使用默认策略外,您还可以在 Red Hat Advanced Cluster Security for Kubernetes 中创建自定义策略。
您可以使用以下方法创建自定义策略:
-
在 RHACS 门户中,进入 Platform 配置
Policy 管理,然后点击 Create policy。 - 在 RHACS 门户中,进入 风险,并使用过滤器来选择您要使用策略的条件。点击 Create policy。
- 通过将策略保存为 Kubernetes 自定义资源(CR),并使用持续交付工具(如 Argo CD)将它们应用到集群来创建和管理策略。
如需更多信息,请参阅以下部分。
6.2.1. 从系统策略视图创建安全策略
您可以从系统策略视图创建新的安全策略。
流程
-
在 RHACS 门户中,进入 Platform Configuration
Policy Management。 - 点击 Create policy。
- 在以下部分中配置策略定义信息:
输入策略详情
在 Policy details 部分中,输入有关您的策略的以下详情。
- 输入策略的 Name。
- 为此策略选择一个 严重性级别。
- 为策略选择一个策略类别。这个为必填字段。
- 在 Description 字段中输入策略详情。
- 在 Rationale 字段中输入有关策略存在的原因的说明。
- 在 Guidance 字段中输入解决此策略违反情况的步骤。
在 MITRE ATT&CK 部分下,选择您要为策略指定的 tactics 和技术。
- 单击 Add tactic,然后从下拉列表中选择 tactic。
- 点 Add Technology,为所选 tactic 添加技术。您可以为 tactic 指定多种技术。
- 点击 Next。
配置策略生命周期
在 Lifecycle 部分中,完成以下步骤:
选择适用于策略的生命周期阶段: Build、Deployment或 Runtime。您可以从以下选项中选择多个阶段:
- 构建时策略适用于 CVE 和 Dockerfile 指令等镜像字段。
- deploy-time 策略可以包含所有构建时策略标准,但也可以包含集群配置中的数据,如以特权模式运行或挂载 Docker 套接字。
- 运行时策略可以包含所有构建时间和部署时间策略标准,但它们也可以包括运行时进程执行的相关数据。
如果选择了 Runtime 生命周期阶段,您必须选择以下 事件源 之一:
- Deployment: RHACS 会在事件源包括进程和网络活动、pod 执行和 pod 端口转发时触发策略违反情况。
- 审计日志 :当事件源与 Kubernetes 审计日志记录匹配时,RHACS 会触发策略违反情况。
- 点击 Next。
配置策略规则和标准
配置策略规则:
- 在 Rules 部分中,配置您要触发策略的条件。您可以编辑规则标题,然后点 Add a new rule 来添加额外的规则。
对于每个规则,点策略字段并将策略字段拖到 Policy Section 中,以添加策略字段或条件。
注意可用的策略字段取决于您为策略选择的生命周期阶段。例如,在为运行时生命周期 创建策略时,Kubernetes 访问策略 或网络下的条件可用,但不能在为构建生命周期创建策略时使用。如需有关策略条件的更多信息,请参阅"添加资源"部分中的"策略条件"部分,包括有关条件及其可用生命周期阶段的信息。
对于每个字段,您可以从特定于字段的选项中选择。它们根据字段类型而有所不同。例如:
- 作为字符串的默认行为与策略字段匹配,您点 Not 来指示您不希望字段匹配的时间。
-
有些字段包含一个值,可以是
true
或false
。 - 有些字段要求您从下拉列表中选择一个值。
-
如果您选择了值为
Read-Only Root Filesystem
的属性,您会看到READ-ONLY
和WRITABLE
选项。 如果您选择了带有复合值
Environment 变量 的属性
,您将看到为Key
,Value
, 和Value From
字段输入值的选项,以及一个用于为可用选项添加更多值的图标。注意如需更多信息,请参阅"添加资源"部分中的"策略标准"。
- 要组合一个属性的多个值,点 Add 图标。
- 点击 Next。
配置策略范围
创建范围以从环境中的实体(如集群或命名空间)限制或排除您的策略。
- 若要按范围限制,可单击 Add inclusion scope。这可让此策略只应用于特定的集群、命名空间或部署标签。您可以添加多个范围,并将 RE2 语法中的正则表达式 用于命名空间和标签。
要排除范围,例如,要从策略中排除特定的部署、集群、命名空间和部署标签,请点 Add exclude scope。该策略不适用于您选择的实体。您可以添加多个范围,并将 RE2 语法中的正则表达式 用于命名空间和标签。但是,您不能使用正则表达式来选择部署。
注意此功能仅适用于为部署和运行时生命周期阶段配置的策略。
对于为构建生命周期阶段配置的策略,您可以从策略中排除镜像。在 Exclude images (Build lifecycle only) 字段中,输入您不想触发违反情况的镜像。
注意Excluded Images 设置仅在您在带有 Build 生命周期阶段的持续集成系统中检查镜像时适用。如果您使用此策略检查 Deploy 生命周期阶段中运行的部署,或检查在 Runtime 生命周期阶段中的运行时活动时,则不会生效。
- 点击 Next。
配置策略操作
为策略配置激活状态、强制和通知程序。
- 为策略选择激活状态。
选择强制方法:
- inform: 在违反列表中包含违反情况。
- inform 和 enforce: enforce 操作。如果选择这个选项,则必须使用每个生命周期的切换来选择策略的强制行为。您可以选择的强制行为取决于您在策略定义的 Lifecycle 部分为策略选择的生命周期阶段。以下强制行为取决于生命周期阶段:
- 构建 :当镜像与策略条件匹配时,RHACS 将无法进行持续集成(CI)构建。
部署 :对于 Deploy 阶段,RHACS 会阻止在 RHACS 准入控制器配置并运行时与策略条件匹配的部署创建或更新。
- 在带有准入控制器强制的集群中,Kubernetes 或 OpenShift Container Platform API 服务器会阻止所有不合规的部署。在其他集群中,RHACS 编辑不合规的部署以防止调度 pod。
- 对于现有部署,当 Kubernetes 事件发生时,策略更改只会导致在下一个条件检测时进行强制。有关强制的更多信息,请参阅"部署阶段的安全策略强制"。
Runtime: RHACS 当 Pod 中的事件与策略条件匹配时,会删除所有 pod。
警告策略实施可能会影响运行应用程序或开发流程。在启用强制选项前,请通知所有利益相关者,并计划如何响应自动化执行操作。
将通知程序附加到策略,将策略违反情况发送到电子邮件接收者或外部工具,如 JIRA、Splunk 或其他使用 Webhook 的应用程序。
从列表中选择 notifiers。
注意您必须先配置了通知,然后才能查看通知,并可在列表中进行选择。您可以在 Platform Configuration
Integrations 页面中配置这些集成,在 Notifier Integrations 部分。
- 点击 Next。
查看策略和预览违反情况
查看您配置的策略设置。
- 验证策略配置是否已配置了正确的选项。
预览违反 面板提供了其他信息,包括构建阶段还是部署阶段部署是否违反了策略。
注意此预览中不提供运行时违反情况,因为它们会根据将来的事件生成。
在保存策略前,请验证违反情况是否准确。
- 点击 Save。
6.2.1.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
选项。 如果您选择了带有复合值
Environment 变量 的属性
,您将看到为Key
,Value
, 和Value From
字段输入值的选项,以及一个用于为可用选项添加更多值的图标。- 要组合一个属性的多个值,点 Add 图标。
-
您也可以点策略部分中列出的逻辑运算符
AND
或OR
,以在AND
和OR
运算符之间进行切换。在运算符之间进行切换只能在策略部分内工作,而不能在两个不同策略部分间进行切换。
-
如果您选择了值为
-
您可以通过重复这些步骤来指定多个
AND
和OR
条件。为添加的属性配置条件后,点 Next 以继续策略创建。
6.2.2. 从 risk 视图创建安全策略
在风险视图中评估部署的风险时,当您应用本地页面过滤时,您可以根据您使用的过滤标准创建新的安全策略。
流程
- 进入 RHACS 门户,从导航菜单中选择 Risk。
- 应用您要为其创建策略的本地页面过滤条件。
- 选择 New Policy 并填写所需字段来创建新策略。
其他资源
6.2.3. 修改现有安全策略
您可以编辑您创建的策略,以及已克隆的 Red Hat Advanced Cluster Security for Kubernetes 提供的现有默认策略。
流程
-
在 RHACS 门户中,进入 Platform Configuration
Policy Management。 - 在 Policies 页面中,选择您要编辑的策略。
选择 Actions
Edit policy。 注意您不能编辑默认策略。您必须克隆默认策略并编辑克隆的策略。
- 编辑您要更改的字段,然后单击保存。
6.2.4. 管理策略作为代码
您可以通过将策略保存为 Kubernetes 自定义资源(CR)并使用 Kubernetes 原生持续交付(CD)工具(如 Argo CD)将它们应用到集群来创建和管理策略。
作为代码的策略只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
RHACS 提供了使用默认策略或为您的系统创建自定义策略的功能。使用策略作为代码功能时,您可以通过在本地编写自定义策略,然后使用 Argo CD 等持续交付工具来跟踪、管理并将策略应用到运行 RHACS 的集群。您还可以使用 API 配置到您自己的 GitOps 存储库(如 GitHub)的连接。要在本地编写策略,您需要创建代表策略所需状态的 CR。在创建或更新 CR 并使用 CI/CD 工具应用它们后,将创建或更新 RHACS 数据库中存储的策略。
对于希望在 YAML 或 JSON 中编写策略的 Kubernetes 安全架构师,而不是使用 RHACS 门户,策略对 Kubernetes 安全架构师很有用。已使用 GitOps 工作流管理 Kubernetes 配置的 GitOps 管理员也可以找到它很有用。
RHACS 在安装 Central 的命名空间中安装一个新的配置控制器,通常是 stackrox
命名空间。使用 Argo CD 工作流,您可以使用 Kubernetes API 将 Argo CD 配置为与 stackrox
命名空间中的这个控制器通信。配置此连接后,RHAC 中的控制器从 Kubernetes API 接收有关作为独立 Kubernetes CR 文件管理的新、更新或删除策略的信息。RHACS 将策略 CR 协调到 RHACS 数据库中存储的策略。
使用不使用 Argo CD 的 GitOps 工作流,您可以将 GitOps 存储库配置为通过 RHACS API 在 RHACS 中连接到 RHACS 中的 Central。不使用 CR。
6.2.4.1. 关于策略偏移
由于策略可以在 RHACS 门户中编辑、删除和创建,因此有时可能会出现 策略偏移。当 RHACS 中的策略版本与 Kubernetes 中的策略版本不匹配时,会发生 drift。
当使用 RHACS 门户或 API 应用到外部管理策略时,可能会发生偏移,而不是修改其 Kubernetes 自定义资源。RHACS 不阻止偏移,但不推荐这样做。偏移会在引入十小时内自动解决。
6.2.4.2. 使用 RHACS 门户在代码中创建策略
您可以使用 RHACS 门户将现有策略保存为 YAML 文件来以代码创建新策略。
先决条件
- 已安装 RHACS 版本 4.6 或更高版本。
如果您使用清单安装方法(也称为
roxctl
方法)安装 RHACS,则必须使用以下命令手动应用位于helm/chart/crds/
的 .zip 文件中的 config.stackrox.io_securitypolicies.yaml :config.stackrox.io
_securitypolicies.yaml$ kubectl create -f helm/chart/crds/config.stackrox.io_securitypolicies.yaml
流程
使用 RHACS 门户创建 CR,在代码中创建新策略:
在 Policy Management 页面中,创建新策略或克隆默认策略。
注意您必须克隆默认策略,然后才能将其保存为 CR。
-
在策略列表的行中,点 overflow 菜单
,然后选择 Save as Custom Resource。要一次保存多个策略,您可以选择它们并点 Bulk actions
Save as Custom Resources。 编辑策略后,您可以通过执行以下操作之一应用保存的 CR:
-
使用
oc apply
或kubectl apply
命令,将 CR 直接应用到安装 Central 的 Kubernetes 命名空间。 - 使用 Argo CD 或 GitOps 工具将 CR 推送到安装 Central 的 Kubernetes 命名空间。
-
使用
6.2.4.3. 通过构建 CR 在代码中创建策略
您可以通过为策略构建 CR,在代码中创建新策略。
使用编辑器使用以下属性为策略构建 CR:
kind: SecurityPolicy apiVersion: config.stackrox.io/v1alpha1 metadata: name: short-name spec: policyName: A longer form name # ...
提示使用在线文档,例如输入
kubectl explain securitypolicy.spec
命令,以了解可用于定义策略规格的字段。通过执行以下操作之一应用保存的 CR:
-
使用
oc apply
或kubectl apply
命令,将 CR 直接应用到安装 Central 的 Kubernetes 命名空间。 - 使用 Argo CD 或 GitOps 工具将 CR 推送到安装 Central 的 Kubernetes 命名空间。
-
使用
6.2.4.4. 禁用策略作为代码功能
安装 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
。