×

Red Hat Advanced Cluster Security for Kubernetes 与 Kubernetes 准入控制器OpenShift Container Platform 准入插件 协同工作,允许您在 Kubernetes 或 OpenShift Container Platform 创建工作负载(例如,部署、守护程序集或作业)之前强制执行安全策略。

RHACS 准入控制器可防止用户创建违反您在 RHACS 中配置的策略的工作负载。从 RHACS 3.0.41 版本开始,您还可以将准入控制器配置为防止更新违反策略的工作负载。

RHACS 使用ValidatingAdmissionWebhook控制器来验证正在供应的资源是否符合指定的安全策略。为此,RHACS 创建一个包含多个Webhook规则的ValidatingWebhookConfiguration

当 Kubernetes 或 OpenShift Container Platform API 服务器收到与某个Webhook规则匹配的请求时,API 服务器会向 RHACS 发送一个AdmissionReview请求。然后,RHACS 将根据配置的安全策略接受或拒绝该请求。

要在 OpenShift Container Platform 上使用准入控制器强制执行,您需要 Red Hat Advanced Cluster Security for Kubernetes 3.0.49 或更高版本。

了解准入控制器强制执行

如果您打算使用准入控制器强制执行,请考虑以下几点:

  • API 延迟:使用准入控制器强制执行会增加 Kubernetes 或 OpenShift Container Platform API 的延迟,因为它涉及额外的 API 验证请求。许多标准的 Kubernetes 库(例如 fabric8)默认情况下具有较短的 Kubernetes 或 OpenShift Container Platform API 超时时间。此外,请考虑您可能正在使用的任何自定义自动化中的 API 超时时间。

  • 镜像扫描:您可以通过在集群配置面板中设置联系镜像扫描器选项来选择准入控制器在审核请求时是否扫描镜像。

    • 如果启用此设置,则如果扫描或镜像签名验证结果尚不可用,Red Hat Advanced Cluster Security for Kubernetes 会联系镜像扫描器,这会增加相当大的延迟。

    • 如果禁用此设置,则强制执行决策仅在缓存的扫描和签名验证结果可用时才考虑镜像扫描标准。

  • 您可以将准入控制器强制执行用于:

    • pod 的`securityContext`中的选项。

    • 部署配置。

    • 镜像组件和漏洞。

  • 您不能将准入控制器强制执行用于:

    • 任何运行时行为,例如进程。

    • 任何基于端口公开的策略。

  • 如果 Kubernetes 或 OpenShift Container Platform API 服务器与 RHACS 传感器之间存在连接问题,则准入控制器可能会失败。要解决此问题,请删除`ValidatingWebhookConfiguration`对象,如禁用准入控制器强制执行部分所述。

  • 如果您为策略启用了部署时强制执行,并且启用了准入控制器,则 RHACS 会尝试阻止违反策略的部署。如果准入控制器未拒绝不符合规定的部署(例如,超时),RHACS 仍会应用其他部署时强制执行机制,例如缩减到零副本。

启用准入控制器强制执行

安装传感器或编辑现有集群配置时,您可以从集群视图启用准入控制器强制执行。

步骤
  1. 在 RHACS 门户中,转到平台配置集群

  2. 从列表中选择现有集群,或通过选择保护集群旧版安装方法来保护新集群。

  3. 如果您正在保护新集群,请在集群配置面板的静态配置部分中输入集群的详细信息。

  4. Red Hat 建议您仅在计划使用准入控制器强制执行对象创建事件时才启用配置准入控制器 Webhook 以侦听对象创建切换。

  5. Red Hat 建议您仅在计划使用准入控制器强制执行更新事件时才启用配置准入控制器 Webhook 以侦听对象更新切换。

  6. Red Hat 建议您仅在计划使用准入控制器强制执行 Pod 执行和 Pod 端口转发事件时才启用启用准入控制器 Webhook 以侦听 exec 和端口转发事件切换。

  7. 动态配置部分中配置以下选项:

    • 强制执行对象创建:此切换控制准入控制服务的行为。您必须启用配置准入控制器 Webhook 以侦听对象创建切换才能使其生效。

    • 强制执行对象更新:此切换控制准入控制服务的行为。您必须启用配置准入控制器 Webhook 以侦听对象更新切换才能使其生效。

  8. 选择下一步

  9. 下载文件部分中,选择下载 YAML 文件和密钥

    为现有集群启用准入控制器时,请遵循以下指南:

    • 如果您在静态配置部分中进行了任何更改,则必须下载 YAML 文件并重新部署传感器。

    • 如果您在动态配置部分中进行了任何更改,则可以跳过下载文件和部署,因为 RHACS 会自动同步传感器并应用更改。

  10. 选择完成

验证
  • 使用生成的 YAML 配置新集群后,运行以下命令以验证是否已正确配置准入控制器强制执行:

    $ oc get ValidatingWebhookConfiguration (1)
    1 如果您使用 Kubernetes,请输入`kubectl`而不是`oc`。
    示例输出
    NAME       CREATED AT
    stackrox   2019-09-24T06:07:34Z

绕过准入控制器强制执行

要绕过准入控制器,请将`admission.stackrox.io/break-glass`注释添加到您的配置 YAML。绕过准入控制器会触发策略违规,其中包括部署详细信息。Red Hat 建议提供问题跟踪器链接或其他参考作为此注释的值,以便其他人了解您绕过准入控制器的原因。

禁用准入控制器强制执行

您可以从 Red Hat Advanced Cluster Security for Kubernetes (RHACS) 门户的集群视图禁用准入控制器强制执行。

步骤
  1. 在 RHACS 门户中,选择平台配置集群

  2. 从列表中选择现有集群。

  3. 动态配置部分中关闭强制执行对象创建强制执行对象更新切换。

  4. 选择下一步

  5. 选择完成

禁用关联策略

您可以关闭相关策略上的强制执行,这反过来会指示准入控制器跳过强制执行。

步骤
  1. 在 RHACS 门户中,转到平台配置策略管理

  2. 禁用默认策略上的强制执行

    • 在策略视图中,找到Kubernetes 操作:进入 Pod 执行策略。单击溢出菜单,kebab,然后选择禁用策略

    • 在策略视图中,找到**Kubernetes 操作:端口转发到 Pod**策略。点击溢出菜单,kebab,然后选择**禁用策略**。

  3. 禁用您使用默认**Kubernetes 操作:端口转发到 Pod**和**Kubernetes 操作:进入 Pod 执行**策略中的条件创建的任何其他自定义策略的强制执行。

禁用 Webhook

您可以在 RHACS 门户的**集群**视图中禁用准入控制器强制执行。

如果您通过关闭 Webhook 来禁用准入控制器,则必须重新部署 Sensor 包。

步骤
  1. 在 RHACS 门户中,转到平台配置集群

  2. 从列表中选择现有集群。

  3. 在**静态配置**部分关闭**启用准入控制器 Webhook 以侦听 exec 和端口转发事件**切换。

  4. 选择**下一步**继续进行 Sensor 设置。

  5. 点击**下载 YAML 文件和密钥**。

  6. 从具有访问受监控集群权限的系统中,提取并运行sensor脚本。

    $ unzip -d sensor sensor-<cluster_name>.zip
    $ ./sensor/sensor.sh

    如果您收到警告,提示您没有部署 Sensor 的所需权限,请按照屏幕上的说明操作,或联系您的集群管理员寻求帮助。

    部署 Sensor 后,它将联系 Central 并提供集群信息。

  7. 返回 RHACS 门户并检查部署是否成功。如果成功,则第 2 节下会出现一个绿色勾号。如果您没有看到绿色勾号,请使用以下命令检查问题。

    • 在 OpenShift Container Platform 上

      $ oc get pod -n stackrox -w
    • 在 Kubernetes 上

      $ kubectl get pod -n stackrox -w
  8. 选择完成

禁用准入控制器时,RHACS 不会删除ValidatingWebhookConfiguration参数。但是,它不会检查违规请求,而是接受所有AdmissionReview请求。

要删除ValidatingWebhookConfiguration对象,请在安全集群中运行以下命令

  • 在 OpenShift Container Platform 上

    $ oc delete ValidatingWebhookConfiguration/stackrox
  • 在 Kubernetes 上

    $ kubectl delete ValidatingWebhookConfiguration/stackrox

ValidatingWebhookConfiguration YAML 文件更改

使用 Red Hat Advanced Cluster Security for Kubernetes,您可以对以下内容强制执行安全策略:

  • 对象创建

  • 对象更新

  • Pod 执行

  • Pod 端口转发

如果 Central 或 Sensor 不可用

准入控制器需要 Sensor 的初始配置才能工作。Kubernetes 或 OpenShift Container Platform 会保存此配置,即使所有准入控制服务副本重新调度到其他节点,它仍然可以访问。如果存在此初始配置,则准入控制器将强制执行所有已配置的部署时策略。

如果 Sensor 或 Central 稍后不可用

  • 您将无法运行镜像扫描或查询有关缓存镜像扫描的信息。但是,即使收集到的信息不完整,准入控制器强制执行仍将基于在超时过期前收集到的可用信息运行。

  • 您将无法从 RHACS 门户禁用准入控制器或修改现有策略的强制执行,因为更改不会传播到准入控制服务。

如果您需要禁用准入控制强制执行,您可以通过运行以下命令删除验证 Webhook 配置

  • 在 OpenShift Container Platform 上

    $ oc delete ValidatingWebhookConfiguration/stackrox
  • 在 Kubernetes 上

    $ kubectl delete ValidatingWebhookConfiguration/stackrox

使准入控制器更可靠

Red Hat 建议您将准入控制服务调度到控制平面而不是工作节点上。部署 YAML 文件包含在控制平面上运行的软偏好,但是它没有强制执行。

默认情况下,准入控制服务运行 3 个副本。为了提高可靠性,您可以通过运行以下命令来增加副本数。

$ oc -n stackrox scale deploy/admission-control --replicas=<number_of_replicas> (1)
1 如果您使用 Kubernetes,请输入`kubectl`而不是`oc`。

与 roxctl CLI 一起使用

生成 Sensor 部署 YAML 文件时,可以使用以下选项:

  • --admission-controller-listen-on-updates:如果您使用此选项,Red Hat Advanced Cluster Security for Kubernetes 将生成一个预配置了ValidatingWebhookConfiguration的 Sensor 包,以接收来自 Kubernetes 或 OpenShift Container Platform API 服务器的更新事件。

  • --admission-controller-enforce-on-updates:如果您使用此选项,Red Hat Advanced Cluster Security for Kubernetes 将配置 Central,以便准入控制器还强制执行安全策略对象更新。

这两个选项都是可选的,默认值为false