1.3. 使用 roxctl CLI
参阅以下部分以了解如何使用 CLI 完成常见任务。
在使用这些命令前导出以下变量:
$ export ROX_API_TOKEN=<api_token>
$ export ROX_CENTRAL_ADDRESS=<address>:<port_number>
-
您可以使用
--help选项获取有关命令的更多信息。 -
在 Red Hat Advanced Cluster Security Cloud Service 中,当使用需要 Central 地址的
roxctl命令时,请使用 Red Hat Hybrid Cloud Console 的 Instance Details 部分显示的 Central 实例地址。例如,使用acs-ABCD12345.acs.rhcloud.com而不是acs-data-ABCD12345.acs.rhcloud.com。
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 Configuration → Clusters 视图在 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 选项,并将格式指定为 json、table、csv 或 junit 来更改输出格式。
例如,以下命令检查部署,然后以 csv 格式显示结果:
$ roxctl -e "$ROX_CENTRAL_ADDRESS" \ deployment check --file =<yaml_filename> \ -o csv
当您没有为输出格式指定 -o 选项时,会使用以下默认行为:
-
deployment check和image check命令的格式是table。 -
image scan命令的默认输出格式是json。这是与 CLI 旧版本兼容的旧 JSON 格式输出。若要以新的 JSON 格式获取输出,使用格式选项,如-o json。
可以不同的选项用于配置输出。下表列出了选项及其可用格式。
| 选项 | 描述 | 格式 |
|---|---|---|
|
| 使用此选项以紧凑格式显示 JSON 输出。 |
|
|
| 使用这个选项指定自定义标头。 |
|
|
| 使用这个选项省略输出中的标头行。 |
|
|
| 使用这个选项指定 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}"
|
|
|
| 使用此选项合并具有相同值的表单元。 |
|
|
| 使用这个选项在输出中将标头行包含为注释。 |
|
|
| 使用此选项指定 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 资源的 read 和 write 权限的令牌。默认的 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 通信,因此您可以在任何开发环境中使用它。
先决条件
-
build-time 网络策略生成器递归扫描您在运行命令时指定的目录。因此,在运行该命令前,您必须已具有服务清单、配置映射和工作负载清单,如
Pod、Deployment、ReplicaSet、Job、DaemonSet和StatefulSet作为指定目录中的 YAML 文件。 -
使用
kubectl apply -f命令验证这些 YAML 文件是否按原样应用。build-time 网络策略生成器不适用于使用 Helm 样式模板的文件。 验证服务网络地址没有硬编码。需要连接到服务的每个工作负载都必须将服务网络地址指定为变量。您可以使用工作负载的资源环境变量或配置映射来指定此变量。
服务网络地址必须与以下官方正则表达式模式匹配:
(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.
流程
运行 help 命令验证构建网络策略生成功能是否可用:
$ roxctl generate netpol -h
使用
generate netpol命令生成策略:$ roxctl generate netpol <folder-path> 1- 1
- 指定具有 Kubernetes 清单的文件夹路径。
roxctl generate netpol 命令支持以下选项:
|
| 描述 |
|
|
查看 |
|
| 将生成的策略保存到目标文件夹中。每个策略有一个文件。 |
|
| 将生成的策略保存并合并到单个 YAML 文件中。 |
|
|
在第一次遇到的错误时失败。默认值为 |
|
| 删除输出路径(如果已存在)。 |
|
|
将警告视为错误。默认值为 |
其他资源