×

Red Hat Advanced Cluster Security for Kubernetes (RHACS) 集成各种持续集成 (CI) 产品。在部署镜像之前,您可以使用 RHACS 将构建时和部署时安全规则应用于您的镜像。

镜像构建并推送到注册表后,RHACS 会集成到 CI 管道中。首先推送镜像允许开发人员继续测试他们的工件,同时处理任何策略违规以及任何其他 CI 测试失败、代码风格违规或其他问题。

如果可能,请配置版本控制系统,如果包含 RHACS 检查的构建阶段失败,则阻止合并拉取请求或合并请求。

与您的 CI 产品的集成通过联系您的 RHACS 安装来检查镜像是否符合您已配置的构建时策略。如果存在策略违规,则会在控制台日志中显示详细消息,包括策略描述、基本原理和补救说明。

每个策略都包含一个可选的强制执行设置。如果您将策略标记为构建时强制执行,则该策略的失败会导致客户端以非零错误代码退出。

要将 Red Hat Advanced Cluster Security for Kubernetes 与您的 CI 系统集成,请按照以下步骤操作

配置构建策略

您可以在构建期间检查 RHACS 策略。

步骤
  1. 配置应用于容器生命周期构建时间的策略。

  2. 与在构建期间推送镜像的注册表集成。

其他资源

与镜像仓库集成

检查现有的构建时策略

使用 RHACS 门户检查您在 Red Hat Advanced Cluster Security for Kubernetes 中配置的任何现有的构建时策略。

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

  2. 使用全局搜索查找生命周期阶段:构建

创建新的系统策略

除了使用默认策略外,您还可以在 Red Hat Advanced Cluster Security for Kubernetes 中创建自定义策略。

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

  2. 点击**+ 新建策略**。

  3. 输入策略的**名称**。

  4. 为策略选择一个**严重性**级别:严重、高、中或低。

  5. 选择策略适用的**生命周期阶段**,包括**构建**、**部署**或**运行时**。您可以选择多个阶段。

    如果您创建了一个与 CI 系统集成的新的策略,请选择**构建**作为生命周期阶段。

    • 构建时策略适用于镜像字段,例如 CVE 和 Dockerfile 指令。

    • 部署时策略可以包含所有构建时策略标准。它们还可以包含来自集群配置的数据,例如以特权模式运行或挂载 Docker 守护程序套接字。

    • 运行时策略可以包含所有构建时和部署时策略标准,以及运行时进程执行的数据。

  6. 在**描述**、**基本原理**和**补救措施**字段中输入有关策略的信息。当 CI 验证构建时,将显示这些字段中的数据。因此,请包含解释策略的所有信息。

  7. 从**类别**下拉菜单中选择一个类别。

  8. 从**通知**下拉菜单中选择一个接收器,当此策略发生违规时,它会接收警报通知。

    您必须将 RHACS 与您的通知提供程序(例如 Webhook、Jira 或 PagerDuty)集成,才能接收警报通知。只有在您已将任何通知提供程序与 RHACS 集成后,通知接收器才会显示。

  9. 使用**限制范围**仅为特定集群、命名空间或标签启用此策略。您可以添加多个范围,并对命名空间和标签使用 RE2 语法中的正则表达式。

  10. 使用**排除范围**排除部署、集群、命名空间和标签。此字段表示策略不适用于您指定的实体。您可以添加多个范围,并对命名空间和标签使用 RE2 语法中的正则表达式。但是,您不能使用正则表达式来选择部署。

  11. 对于**排除的镜像(仅限构建生命周期)**,从列表中选择所有您不希望为此策略触发违规的镜像。

    **排除的镜像(仅限构建生命周期)**设置仅在您在持续集成系统中检查镜像(构建生命周期阶段)时适用。如果您使用此策略来检查正在运行的部署(部署生命周期阶段)或运行时活动(运行时生命周期阶段),则它没有任何效果。

  12. 在**策略标准**部分,配置将触发策略的属性。

  13. 选择面板标题上的**下一步**。

  14. 新的策略面板显示如果启用策略将触发的违规的预览。

  15. 选择面板标题上的**下一步**。

  16. 为策略选择执行行为。执行设置仅适用于您为**生命周期阶段**选项选择的阶段。选择**开启**以执行策略并报告违规。选择**关闭**仅报告违规。

    每个生命周期阶段的执行行为都不同。

    • 对于**构建**阶段,当镜像与策略的条件匹配时,RHACS 会使您的 CI 构建失败。

    • 对于**部署**阶段,如果 RHACS 准入控制器已配置并正在运行,RHACS 将阻止创建和更新与策略条件匹配的部署。

      • 在具有准入控制器执行的集群中,Kubernetes 或 OpenShift Container Platform API 服务器将阻止所有不符合要求的部署。在其他集群中,RHACS 会编辑不符合要求的部署以防止调度 Pod。

      • 对于现有部署,策略更改仅在下次检测到标准时(发生 Kubernetes 事件时)才会导致执行。有关执行的更多信息,请参见“部署阶段的安全策略执行”。

    • 对于**运行时**阶段,RHACS 将停止所有与策略条件匹配的 Pod。

    策略执行可能会影响正在运行的应用程序或开发流程。在启用执行选项之前,请通知所有利益相关者并规划如何响应自动执行操作。

部署阶段的安全策略执行

Red Hat Advanced Cluster Security for Kubernetes 支持两种形式的部署时策略安全策略执行:通过准入控制器进行强制执行和 RHACS 传感器进行软执行。准入控制器会阻止创建或更新违反策略的部署。如果准入控制器被禁用或不可用,传感器可以通过将违反策略的部署的副本数量缩减到0来执行强制执行。

策略执行可能会影响正在运行的应用程序或开发流程。在启用执行选项之前,请通知所有利益相关者并规划如何响应自动执行操作。

强制执行

强制执行由 RHACS 准入控制器执行。在具有准入控制器执行的集群中,Kubernetes 或 OpenShift Container Platform API 服务器将阻止所有不符合要求的部署。准入控制器阻止CREATEUPDATE操作。任何满足配置为启用部署时执行的策略的 Pod 创建或更新请求都将失败。

Kubernetes 准入 Webhook 仅支持CREATEUPDATEDELETECONNECT操作。RHACS 准入控制器仅支持CREATEUPDATE操作。诸如kubectl patchkubectl setkubectl scale之类的操作是 PATCH 操作,而不是 UPDATE 操作。由于 Kubernetes 不支持 PATCH 操作,因此 RHACS 无法对 PATCH 操作执行强制执行。

对于阻止执行,您必须在 RHACS 中为集群启用以下设置

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

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

如果您更改了**静态配置**设置中的设置,则必须重新部署安全集群才能使这些更改生效。

软执行

软执行由 RHACS 传感器执行。此执行可防止启动操作。使用软执行,传感器会将副本数量缩减到 0,并防止调度 Pod。在此执行中,集群中存在非就绪部署。

如果配置了软执行并且传感器关闭,则 RHACS 无法执行强制执行。

命名空间排除

默认情况下,RHACS 会从强制阻止中排除某些管理命名空间,例如stackroxkube-systemistio-system命名空间。原因是必须部署这些命名空间中的一些项目才能使 RHACS 正确工作。

对现有部署的执行

对于现有部署,策略更改仅在下次检测到标准时(发生 Kubernetes 事件时)才会导致执行。如果您更改了策略,则必须通过选择**策略管理**并单击**重新评估所有**来重新评估策略。此操作会将部署策略应用于所有现有部署,无论是否有任何新的传入 Kubernetes 事件。如果违反了策略,则 RHACS 将执行强制执行。

配置注册表集成

要扫描镜像,您必须为 Red Hat Advanced Cluster Security for Kubernetes 提供访问您在构建流水线中使用的镜像仓库的权限。

检查现有的仓库集成

您可以使用 RHACS 门户检查您是否已与仓库集成。

步骤
  1. 在 RHACS 门户中,转到**平台配置** → **集成**。

  2. 在**镜像集成**部分下,查找高亮的**仓库**磁贴。磁贴还会列出已为此磁贴配置的项目数量。

如果没有任何仓库磁贴高亮显示,您必须首先与镜像仓库集成。

其他资源

配置访问权限

RHACS 提供了 `roxctl` 命令行界面 (CLI) 来简化将 RHACS 策略集成到您的构建流水线中的过程。`roxctl` CLI 会打印有关问题以及如何解决问题的详细信息,以便开发人员可以在容器生命周期的早期阶段保持高标准。

要安全地认证到 Red Hat Advanced Cluster Security for Kubernetes API 服务器,您必须创建一个 API 令牌。

导出和保存 API 令牌

步骤
  1. 生成身份验证令牌后,通过输入以下命令将其导出为 `ROX_API_TOKEN` 变量

    $ export ROX_API_TOKEN=<api_token>
  2. (可选):您也可以将令牌保存在文件中,并使用 `--token-file` 选项输入以下命令

    $ roxctl central debug dump --token-file <token_file>

请注意以下指南:

  • 您不能同时使用 `-password` (`-p`) 和 `--token-file` 选项。

  • 如果您已经设置了 `ROX_API_TOKEN` 变量,并指定了 `--token-file` 选项,则 `roxctl` CLI 将使用指定的令牌文件进行身份验证。

  • 如果您已经设置了 `ROX_API_TOKEN` 变量,并指定了 `--password` 选项,则 `roxctl` CLI 将使用指定的密码进行身份验证。

通过下载二进制文件安装 roxctl CLI

您可以安装 `roxctl` CLI 以通过命令行界面与 Red Hat Advanced Cluster Security for Kubernetes 进行交互。您可以在 Linux、Windows 或 macOS 上安装 `roxctl`。

在 Linux 上安装 roxctl CLI

您可以使用以下步骤在 Linux 上安装 `roxctl` CLI 二进制文件。

适用于 Linux 的 `roxctl` CLI 可用于 `amd64`、`arm64`、`ppc64le` 和 `s390x` 架构。

步骤
  1. 确定目标操作系统的 `roxctl` 架构

    $ arch="$(uname -m | sed "s/x86_64//")"; arch="${arch:+-$arch}"
  2. 下载 `roxctl` CLI

    $ curl -L -f -o roxctl "https://mirror.openshift.com/pub/rhacs/assets/4.6.1/bin/Linux/roxctl${arch}"
  3. 使 `roxctl` 二进制文件可执行

    $ chmod +x roxctl
  4. 将 `roxctl` 二进制文件放置在您的 `PATH` 上的目录中

    要检查您的 `PATH`,请执行以下命令

    $ echo $PATH
验证
  • 验证您已安装的 `roxctl` 版本

    $ roxctl version

在 macOS 上安装 roxctl CLI

您可以使用以下步骤在 macOS 上安装 `roxctl` CLI 二进制文件。

适用于 macOS 的 `roxctl` CLI 可用于 `amd64` 和 `arm64` 架构。

步骤
  1. 确定目标操作系统的 `roxctl` 架构

    $ arch="$(uname -m | sed "s/x86_64//")"; arch="${arch:+-$arch}"
  2. 下载 `roxctl` CLI

    $ curl -L -f -o roxctl "https://mirror.openshift.com/pub/rhacs/assets/4.6.1/bin/Darwin/roxctl${arch}"
  3. 删除二进制文件中的所有扩展属性

    $ xattr -c roxctl
  4. 使 `roxctl` 二进制文件可执行

    $ chmod +x roxctl
  5. 将 `roxctl` 二进制文件放置在您的 `PATH` 上的目录中

    要检查您的 `PATH`,请执行以下命令

    $ echo $PATH
验证
  • 验证您已安装的 `roxctl` 版本

    $ roxctl version

在 Windows 上安装 roxctl CLI

您可以使用以下步骤在 Windows 上安装 `roxctl` CLI 二进制文件。

适用于 Windows 的 `roxctl` CLI 可用于 `amd64` 架构。

步骤
  • 下载 `roxctl` CLI

    $ curl -f -O https://mirror.openshift.com/pub/rhacs/assets/4.6.1/bin/Windows/roxctl.exe
验证
  • 验证您已安装的 `roxctl` 版本

    $ roxctl version

从容器运行 roxctl CLI

在 RHACS `roxctl` 镜像中,`roxctl` 客户端是默认入口点。要在容器镜像中运行 `roxctl` 客户端

先决条件
  • 您必须首先从 RHACS 门户生成身份验证令牌。

步骤
  1. 登录到 `registry.redhat.io` 仓库。

    $ docker login registry.redhat.io
  2. 拉取 `roxctl` CLI 的最新容器镜像。

    $ docker pull registry.redhat.io/advanced-cluster-security/rhacs-roxctl-rhel8:4.6.1

安装 CLI 后,您可以使用以下命令运行它

$ docker run -e ROX_API_TOKEN=$ROX_API_TOKEN \
  -it registry.redhat.io/advanced-cluster-security/rhacs-roxctl-rhel8:4.6.1 \
  -e $ROX_CENTRAL_ADDRESS <command>

在 Red Hat Advanced Cluster Security Cloud Service (RHACS Cloud Service) 中,当使用需要 Central 地址的 `roxctl` 命令时,请使用 Red Hat Hybrid Cloud Console 的**实例详细信息**部分中显示的**Central 实例地址**。例如,使用 `acs-ABCD12345.acs.rhcloud.com` 代替 `acs-data-ABCD12345.acs.rhcloud.com`。

验证
  • 验证您已安装的 `roxctl` 版本。

    $ docker run -it registry.redhat.io/advanced-cluster-security/rhacs-roxctl-rhel8:4.6.1 version

与您的 CI 流水线集成

完成这些步骤后,下一步是与您的 CI 流水线集成。

每个 CI 系统可能需要略微不同的配置。

使用 Jenkins

使用 StackRox Container Image Scanner Jenkins 插件与 Jenkins 集成。您可以在 Jenkins 自由风格项目和流水线中使用此插件。

使用 CircleCI

您可以将 Red Hat Advanced Cluster Security for Kubernetes 与 CircleCI 集成。

先决条件
  • 您拥有对 `Image` 资源具有 `read` 和 `write` 权限的令牌。

  • 您拥有 Docker Hub 帐户的用户名和密码。

步骤
  1. 登录到 CircleCI 并打开现有项目或创建新项目。

  2. 单击**项目设置**。

  3. 单击**环境变量**。

  4. 单击**添加变量**并创建以下三个环境变量:

    • **名称**: **STACKROX_CENTRAL_HOST** - Central 的 DNS 名称或 IP 地址。

    • **名称**: **ROX_API_TOKEN** - 访问 Red Hat Advanced Cluster Security for Kubernetes 的 API 令牌。

    • **名称**: **DOCKERHUB_PASSWORD** - 您 Docker Hub 帐户的密码。

    • **名称**: **DOCKERHUB_USER** - 您 Docker Hub 帐户的用户名。

  5. 如果您还没有所选项目的本地代码仓库根目录中名为 `.circleci` 的目录,请创建一个。

  6. 在 `.circleci` 目录中创建一个包含以下行的 `config.yml` 配置文件:

    version: 2
    jobs:
      check-policy-compliance:
        docker:
          - image: 'circleci/node:latest'
            auth:
              username: $DOCKERHUB_USER
              password: $DOCKERHUB_PASSWORD
        steps:
          - checkout
          - run:
              name: Install roxctl
              command: |
                  curl -H "Authorization: Bearer $ROX_API_TOKEN" https://$STACKROX_CENTRAL_HOST:443/api/cli/download/roxctl-linux -o roxctl && chmod +x ./roxctl
          - run:
              name: Scan images for policy deviations and vulnerabilities
              command: |
                  ./roxctl image check --endpoint "$STACKROX_CENTRAL_HOST:443" --image "<your_registry/repo/image_name>" (1)
          - run:
              name: Scan deployment files for policy deviations
              command: |
                  ./roxctl image check --endpoint "$STACKROX_CENTRAL_HOST:443" --image "<your_deployment_file>" (2)
                  # Important note: This step assumes the YAML file you'd like to test is located in the project.
    workflows:
      version: 2
      build_and_test:
        jobs:
          - check-policy-compliance
    1 将 `<your_registry/repo/image_name>` 替换为您自己的仓库和镜像路径。
    2 将 `<your_deployment_file>` 替换为您部署文件的路径。

    如果您在仓库中已经有 CircleCI 的 `config.yml` 文件,请在现有配置文件中添加一个包含指定详细信息的新作业部分。

  7. 将配置文件提交到您的仓库后,转到 CircleCI 仪表板中的**作业**队列以验证构建策略的执行。