1.3. 使用 roxctl CLI

参阅以下部分以了解如何使用 CLI 完成常见任务。

注意
  • 在使用这些命令前导出以下变量:

    $ export ROX_API_TOKEN=<api_token>
    $ export ROX_CENTRAL_ADDRESS=<address>:<port_number>
  • 您可以使用 --help 选项获取有关命令的更多信息。

1.3.1. 管理 Central 的数据库

Central 存储以下信息:

  • 在集群中观察到的活动,
  • 从集成镜像 registry 或扫描程序获取的信息,以及
  • Red Hat Advanced Cluster Security for Kubernetes 配置。

您可以使用 roxctl CLI 备份和恢复 Central 的数据库。

备份 Central 数据库

运行以下命令以备份 Central 的数据库:

$ roxctl -e "$ROX_CENTRAL_ADDRESS" central backup
恢复中央数据库

运行以下命令来恢复 Central 的数据库:

$ roxctl -e "$ROX_CENTRAL_ADDRESS" central db restore <backup_filename>

1.3.2. 管理安全集群

要保护 Kubernetes 或 OpenShift Container Platform 集群,您必须将 Red Hat Advanced Cluster Security for Kubernetes 服务部署到集群中。您可以通过进入到 Platform ConfigurationClusters 视图在 RHACS 门户生成部署文件,也可以使用 roxctl CLI。

生成 Sensor 部署文件

Kubernetes

$ roxctl -e "$ROX_CENTRAL_ADDRESS" sensor generate k8s --name <cluster_name> --central "$ROX_CENTRAL_ADDRESS"

OpenShift Container Platform

$ roxctl -e "$ROX_CENTRAL_ADDRESS" sensor generate openshift --openshift-version <ocp-version> --name <cluster_name> --central "$ROX_CENTRAL_ADDRESS" 1

1
对于 --openshift-version 选项,请指定集群的主 OpenShift Container Platform 版本号。例如,为 OpenShift Container Platform 版本 3.x 指定 3,为 OpenShift Container Platform 版本 4.x 指定 4

阅读 --help 输出以查看您可能需要使用的其他选项,具体取决于您的系统架构。

验证您为 --central 提供的端点是否可以从部署 Red Hat Advanced Cluster Security for Kubernetes 服务的集群中访问。

注意

如果您使用一个支持非 gRPC 的负载均衡器,如 HAProxy、AWS Application Load Balancer (ALB) 或 AWS Elastic Load Balancing (ELB):

  • 使用 WebSocket Secure (ws) 协议。要使用 wss,使用 ws:// 为地址添加前缀,并
  • 在地址后添加端口号,例如:

    $ roxctl sensor generate k8s --central wss://stackrox-central.example.com:443
使用生成的 YAML 文件安装 Sensor

当您生成 Sensor 部署文件时,roxctl 会在工作目录中创建一个名为 sensor-<cluster_name> 的目录。安装 Sensor 的脚本存在于这个目录中。运行传感器安装脚本来安装 Sensor。

$ ./sensor-<cluster_name>/sensor.sh

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

为现有集群下载 Sensor 捆绑包

使用以下命令通过指定集群名称或 ID 为现有集群下载 Sensor 捆绑包。

$ roxctl sensor get-bundle <cluster_name_or_id>
删除集群集成
$ roxctl -e "$ROX_CENTRAL_ADDRESS" cluster delete --name=<cluster_name>
重要

删除集群集成不会删除集群中运行的 Red Hat Advanced Cluster Security for Kubernetes 服务。您可以从 Sensor 安装捆绑包中运行 delete-sensor.sh 脚本来删除它们。

1.3.3. 检查策略合规性

您可以使用 roxctl CLI 检查部署 YAML 文件和镜像是否合规。

配置输出格式

当您使用 deployment check, image check, 或 image scan 命令检查策略的合规性时,您可以使用 -o 选项指定输出格式。此选项决定了如何在终端中显示命令的输出。

您可以通过在命令中添加 -o 选项,并将格式指定为 jsontablecsvjunit 来更改输出格式。

例如,以下命令检查部署,然后以 csv 格式显示结果:

$ roxctl -e "$ROX_CENTRAL_ADDRESS" \
  deployment check --file =<yaml_filename> \
  -o csv
注意

当您没有为输出格式指定 -o 选项时,会使用以下默认行为:

  • deployment checkimage check 命令的格式是 table
  • image scan 命令的默认输出格式是 json。这是与 CLI 旧版本兼容的旧 JSON 格式输出。若要以新的 JSON 格式获取输出,使用格式选项,如 -o json

可以不同的选项用于配置输出。下表列出了选项及其可用格式。

选项描述格式

--compact-output

使用此选项以紧凑格式显示 JSON 输出。

json

--headers

使用这个选项指定自定义标头。

tablecsv

--no-header

使用这个选项省略输出中的标头行。

tablecsv

--row-jsonpath-expressions

使用这个选项指定 GJSON 路径,以选择输出中的特定项目。例如,若要获取部署检查的策略名称严重性,请使用以下命令:

$ roxctl -e "$ROX_CENTRAL_ADDRESS" \
  deployment check --file=<yaml_filename> \
  -o table --headers POLICY-NAME,SEVERITY \
  --row-jsonpath-expressions="{results.#.violatedPolicies.#.name,results.#.violatedPolicies.#.severity}"

tablecsv

--merge-output

使用此选项合并具有相同值的表单元。

table

headers-as-comment

使用这个选项在输出中将标头行包含为注释。

csv

--junit-suite-name

使用此选项指定 JUnit 测试套件的名称。

junit

检查部署 YAML 文件

以下命令检查 YAML 部署文件中的安全策略的构建时间和部署时间违反情况。使用这个命令验证:

  • YAML 文件中的配置选项,如资源限值或特权选项;或者
  • YAML 文件中使用的镜像的各个方面,如组件或漏洞。
$ roxctl -e "$ROX_CENTRAL_ADDRESS" deployment check --file=<yaml_filename>
检查镜像

以下命令检查镜像中安全策略的构建时违反情况。

$ roxctl -e "$ROX_CENTRAL_ADDRESS" image check --image=<image_name>
检查镜像扫描结果

您还可以检查特定镜像的扫描结果。

以下命令以 JSON 格式返回镜像中发现的组件和漏洞。格式在 API 引用中定义。

$ roxctl -e "$ROX_CENTRAL_ADDRESS" image scan --image <image_name>

要让 Red Hat Advanced Cluster Security for Kubernetes 从关联的 registry 和扫描程序中拉取镜像元数据和镜像扫描结果,请添加 --force 选项。

注意

要检查特定的镜像扫描结果,您必须具有 Image 资源的 readwrite 权限的令牌。默认的 Continuous Integration 系统角色已具有所需的权限。

1.3.4. 调试问题

管理中央日志级别

Central 将信息保存到其容器日志中。

查看日志

您可以运行以下命令来查看 Central 的容器日志:

Kubernetes

$ kubectl logs -n stackrox <central_pod>

OpenShift Container Platform

$ oc logs -n stackrox <central_pod>

查看当前日志级别

您可以更改日志级别,以在 Central 日志中看到更多或较少的信息。运行以下命令来查看当前的日志级别:

$ roxctl -e "$ROX_CENTRAL_ADDRESS" central debug log
更改日志级别

运行以下命令来更改日志级别:

$ roxctl -e "$ROX_CENTRAL_ADDRESS" central debug log --level=<log_level> 1
1
<log_level> 可以接受的值是:Panic, Fatal, Error, Warn, Info, 和 Debug
检索调试信息

要收集用于调查问题的调试信息,请运行以下命令:

$ roxctl -e "$ROX_CENTRAL_ADDRESS" central debug dump

1.3.5. 生成构建时网络策略

build-time 网络策略生成器包含在 roxctl CLI 中。对于构建网络策略生成功能,roxctl CLI 不需要与 RHACS Central 通信,因此您可以在任何开发环境中使用它。

先决条件

  1. build-time 网络策略生成器递归扫描您在运行命令时指定的目录。因此,在运行该命令前,您必须已具有服务清单、配置映射和工作负载清单,如 PodDeploymentReplicaSetJobDaemonSetStatefulSet 作为指定目录中的 YAML 文件。
  2. 使用 kubectl apply -f 命令验证这些 YAML 文件是否按原样应用。build-time 网络策略生成器不适用于使用 Helm 样式模板的文件。
  3. 验证服务网络地址没有硬编码。需要连接到服务的每个工作负载都必须将服务网络地址指定为变量。您可以使用工作负载的资源环境变量或配置映射来指定此变量。

  4. 服务网络地址必须与以下官方正则表达式模式匹配:

    (http(s)?://)?<svc>(.<ns>(.svc.cluster.local)?)?(:<portNum>)? 1
    1
    在这种模式中,
    • <svc> 是服务名称。
    • <ns> 是定义该服务的命名空间。
    • <portNum> 是公开的服务端口号。

    以下是与模式匹配的一些示例:

    • wordpress-mysql:3306
    • redis-follower.redis.svc.cluster.local:6379
    • redis-leader.redis
    • http://rating-service.

流程

  1. 运行 help 命令验证构建网络策略生成功能是否可用:

    $ roxctl generate netpol -h
  2. 使用 generate netpol 命令生成策略:

    $ roxctl generate netpol <folder-path> 1
    1
    指定具有 Kubernetes 清单的文件夹路径。

roxctl generate netpol 命令支持以下选项:

选项

描述

-h, --help

查看 netpol 命令的帮助文本。

-d, --output-dir <dir>

将生成的策略保存到目标文件夹中。每个策略有一个文件。

-f, --output-file <filename>

将生成的策略保存并合并到单个 YAML 文件中。

--fail

在第一次遇到的错误时失败。默认值为 false

--remove

删除输出路径(如果已存在)。

--strict

将警告视为错误。默认值为 false