$ export ROX_API_TOKEN=<api_token>
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 策略。
配置应用于容器生命周期构建时间的策略。
与在构建期间推送镜像的注册表集成。
使用 RHACS 门户检查您在 Red Hat Advanced Cluster Security for Kubernetes 中配置的任何现有的构建时策略。
在 RHACS 门户中,转到**平台配置** → **策略管理**。
使用全局搜索查找生命周期阶段:构建
。
除了使用默认策略外,您还可以在 Red Hat Advanced Cluster Security for Kubernetes 中创建自定义策略。
在 RHACS 门户中,转到**平台配置** → **策略管理**。
点击**+ 新建策略**。
输入策略的**名称**。
为策略选择一个**严重性**级别:严重、高、中或低。
选择策略适用的**生命周期阶段**,包括**构建**、**部署**或**运行时**。您可以选择多个阶段。
如果您创建了一个与 CI 系统集成的新的策略,请选择**构建**作为生命周期阶段。 |
构建时策略适用于镜像字段,例如 CVE 和 Dockerfile 指令。
部署时策略可以包含所有构建时策略标准。它们还可以包含来自集群配置的数据,例如以特权模式运行或挂载 Docker 守护程序套接字。
运行时策略可以包含所有构建时和部署时策略标准,以及运行时进程执行的数据。
在**描述**、**基本原理**和**补救措施**字段中输入有关策略的信息。当 CI 验证构建时,将显示这些字段中的数据。因此,请包含解释策略的所有信息。
从**类别**下拉菜单中选择一个类别。
从**通知**下拉菜单中选择一个接收器,当此策略发生违规时,它会接收警报通知。
您必须将 RHACS 与您的通知提供程序(例如 Webhook、Jira 或 PagerDuty)集成,才能接收警报通知。只有在您已将任何通知提供程序与 RHACS 集成后,通知接收器才会显示。 |
使用**限制范围**仅为特定集群、命名空间或标签启用此策略。您可以添加多个范围,并对命名空间和标签使用 RE2 语法中的正则表达式。
使用**排除范围**排除部署、集群、命名空间和标签。此字段表示策略不适用于您指定的实体。您可以添加多个范围,并对命名空间和标签使用 RE2 语法中的正则表达式。但是,您不能使用正则表达式来选择部署。
对于**排除的镜像(仅限构建生命周期)**,从列表中选择所有您不希望为此策略触发违规的镜像。
**排除的镜像(仅限构建生命周期)**设置仅在您在持续集成系统中检查镜像(构建生命周期阶段)时适用。如果您使用此策略来检查正在运行的部署(部署生命周期阶段)或运行时活动(运行时生命周期阶段),则它没有任何效果。 |
在**策略标准**部分,配置将触发策略的属性。
选择面板标题上的**下一步**。
新的策略面板显示如果启用策略将触发的违规的预览。
选择面板标题上的**下一步**。
为策略选择执行行为。执行设置仅适用于您为**生命周期阶段**选项选择的阶段。选择**开启**以执行策略并报告违规。选择**关闭**仅报告违规。
每个生命周期阶段的执行行为都不同。
|
策略执行可能会影响正在运行的应用程序或开发流程。在启用执行选项之前,请通知所有利益相关者并规划如何响应自动执行操作。 |
Red Hat Advanced Cluster Security for Kubernetes 支持两种形式的部署时策略安全策略执行:通过准入控制器进行强制执行和 RHACS 传感器进行软执行。准入控制器会阻止创建或更新违反策略的部署。如果准入控制器被禁用或不可用,传感器可以通过将违反策略的部署的副本数量缩减到0
来执行强制执行。
策略执行可能会影响正在运行的应用程序或开发流程。在启用执行选项之前,请通知所有利益相关者并规划如何响应自动执行操作。 |
强制执行由 RHACS 准入控制器执行。在具有准入控制器执行的集群中,Kubernetes 或 OpenShift Container Platform API 服务器将阻止所有不符合要求的部署。准入控制器阻止CREATE
和UPDATE
操作。任何满足配置为启用部署时执行的策略的 Pod 创建或更新请求都将失败。
Kubernetes 准入 Webhook 仅支持 |
对于阻止执行,您必须在 RHACS 中为集群启用以下设置
**对对象创建强制执行**:**动态配置**部分中的此切换控制准入控制服务的行为。您必须启用**静态配置**部分中的**配置准入控制器 Webhook 以侦听对象创建**切换才能使其生效。
**对对象更新强制执行**:**动态配置**部分中的此切换控制准入控制服务的行为。您必须启用**静态配置**部分中的**配置准入控制器 Webhook 以侦听对象更新**切换才能使其生效。
如果您更改了**静态配置**设置中的设置,则必须重新部署安全集群才能使这些更改生效。
软执行由 RHACS 传感器执行。此执行可防止启动操作。使用软执行,传感器会将副本数量缩减到 0,并防止调度 Pod。在此执行中,集群中存在非就绪部署。
如果配置了软执行并且传感器关闭,则 RHACS 无法执行强制执行。
默认情况下,RHACS 会从强制阻止中排除某些管理命名空间,例如stackrox
、kube-system
和istio-system
命名空间。原因是必须部署这些命名空间中的一些项目才能使 RHACS 正确工作。
RHACS 提供了 `roxctl` 命令行界面 (CLI) 来简化将 RHACS 策略集成到您的构建流水线中的过程。`roxctl` CLI 会打印有关问题以及如何解决问题的详细信息,以便开发人员可以在容器生命周期的早期阶段保持高标准。
要安全地认证到 Red Hat Advanced Cluster Security for Kubernetes API 服务器,您必须创建一个 API 令牌。
生成身份验证令牌后,通过输入以下命令将其导出为 `ROX_API_TOKEN` 变量
$ export ROX_API_TOKEN=<api_token>
(可选):您也可以将令牌保存在文件中,并使用 `--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 以通过命令行界面与 Red Hat Advanced Cluster Security for Kubernetes 进行交互。您可以在 Linux、Windows 或 macOS 上安装 `roxctl`。
您可以使用以下步骤在 Linux 上安装 `roxctl` CLI 二进制文件。
适用于 Linux 的 `roxctl` CLI 可用于 `amd64`、`arm64`、`ppc64le` 和 `s390x` 架构。 |
确定目标操作系统的 `roxctl` 架构
$ arch="$(uname -m | sed "s/x86_64//")"; arch="${arch:+-$arch}"
下载 `roxctl` CLI
$ curl -L -f -o roxctl "https://mirror.openshift.com/pub/rhacs/assets/4.6.1/bin/Linux/roxctl${arch}"
使 `roxctl` 二进制文件可执行
$ chmod +x roxctl
将 `roxctl` 二进制文件放置在您的 `PATH` 上的目录中
要检查您的 `PATH`,请执行以下命令
$ echo $PATH
验证您已安装的 `roxctl` 版本
$ roxctl version
您可以使用以下步骤在 macOS 上安装 `roxctl` CLI 二进制文件。
适用于 macOS 的 `roxctl` CLI 可用于 `amd64` 和 `arm64` 架构。 |
确定目标操作系统的 `roxctl` 架构
$ arch="$(uname -m | sed "s/x86_64//")"; arch="${arch:+-$arch}"
下载 `roxctl` CLI
$ curl -L -f -o roxctl "https://mirror.openshift.com/pub/rhacs/assets/4.6.1/bin/Darwin/roxctl${arch}"
删除二进制文件中的所有扩展属性
$ xattr -c roxctl
使 `roxctl` 二进制文件可执行
$ chmod +x roxctl
将 `roxctl` 二进制文件放置在您的 `PATH` 上的目录中
要检查您的 `PATH`,请执行以下命令
$ echo $PATH
验证您已安装的 `roxctl` 版本
$ roxctl version
在 RHACS `roxctl` 镜像中,`roxctl` 客户端是默认入口点。要在容器镜像中运行 `roxctl` 客户端
您必须首先从 RHACS 门户生成身份验证令牌。
登录到 `registry.redhat.io` 仓库。
$ docker login registry.redhat.io
拉取 `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 系统可能需要略微不同的配置。
使用 StackRox Container Image Scanner Jenkins 插件与 Jenkins 集成。您可以在 Jenkins 自由风格项目和流水线中使用此插件。
您可以将 Red Hat Advanced Cluster Security for Kubernetes 与 CircleCI 集成。
您拥有对 `Image` 资源具有 `read` 和 `write` 权限的令牌。
您拥有 Docker Hub 帐户的用户名和密码。
登录到 CircleCI 并打开现有项目或创建新项目。
单击**项目设置**。
单击**环境变量**。
单击**添加变量**并创建以下三个环境变量:
**名称**: **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 帐户的用户名。
如果您还没有所选项目的本地代码仓库根目录中名为 `.circleci` 的目录,请创建一个。
在 `.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` 文件,请在现有配置文件中添加一个包含指定详细信息的新作业部分。 |
将配置文件提交到您的仓库后,转到 CircleCI 仪表板中的**作业**队列以验证构建策略的执行。