卡巴斯基容器安全

在 CI/CD 进程之外运行扫描器

在资源有限的情况下,您可以在 CI/CD 进程中除了工作节点之外运行卡巴斯基容器安全扫描程序。例如,通过在 Docker 节点上使用docker run命令,或者作为 Kubernetes 集群中的 Job。

为了最大程度地节省资源,我们建议使用扫描器:2.0.0-lite镜像,因为它不包含漏洞数据库,使用 API 将基于目标镜像扫描结果的 SBOM 文件发送到解决方案。

要在 CI/CD 进程之外启动卡巴斯基容器安全扫描程序,您必须指定以下强制参数:

  • API_TOKEN:< API 令牌值>是用于在解决方案的 API 接口中进行身份验证的卡巴斯基容器安全用户令牌。
  • API_BASE_URL:<网址>是访问卡巴斯基容器安全的 API 接口的链接。接口可以使用 HTTP 和 HTTPS 协议进行访问,具体取决于部署的解决方案的环境变量。
  • API_CA_CERT:<.PEM 格式的证书>是用于验证解决方案的 API 证书的变量。
  • SKIP_API_SERVER_VALIDATION = true — 如果需要,可以指定一个变量来跳过卡巴斯基容器安全的 API 证书验证。

您还可以为扫描器操作指定其他参数:

  • COMPANY_EXT_REGISTRY_USERNAME:<注册表用户名>是存储扫描器要检查的镜像的注册表的用户的名称。
  • COMPANY_EXT_REGISTRY_PASSWORD:<注册表用户密码>是存储扫描器要检查的镜像的注册表用户的密码。
  • BUILD_NUMBER:<内部版本号 ID>是用于在解决方案接口中跟踪内部版本号的 ID。卡巴斯基容器安全在 CI\CD 进程扫描结果中显示该数字。
  • BUILD_PIPELINE:<管道编号 ID >是用于在解决方案接口中跟踪管道编号的标识符。卡巴斯基容器安全在 CI\CD 进程扫描结果中显示该数字。
  • HTTP_PROXY:<HTTP 请求的代理服务器>是一个变量,表示在需要访问外部资源时使用 HTTP 代理服务器
  • HTTPS_PROXY:<HTTPS 请求的代理服务器>是一个变量,表示在需要访问外部资源时使用 HTTPS 代理
  • NO_PROXY:<用于排除项代理的域对应的域或掩码>是一个变量,表示使用代理服务器时本地可用的资源。

在 Docker 中运行扫描器

要在 Docker 中以精简版 SBOM 模式启动扫描器:

  1. 指定卡巴斯基容器安全的强制参数:

    -e API_TOKEN=<API 令牌值>

    -e API_BASE_URL=https://company.com

    -e API_CA_CERT: <.PEM 格式的证书> -e SKIP_API_SERVER_VALIDATION=true

  2. 如有必要,请为卡巴斯基容器安全指定附加参数。
  3. 指定要运行的扫描器镜像:

    repo.kcs.company.com/images/scanner:v2.0.0-lite

  4. 如果需要生成可供下载的构件,请指定以下内容:

    --<工件格式> --stdout> result. <文件格式>

    例如:

    --html --stdout > result.html

  5. 确保 .docker/config.json 配置文件包含用于使用扫描器镜像连接到镜像仓库的数据。如有必要,运行以下命令之一:docker login repo.company.comdocker login repo.kcs.kaspersky.com
  6. 开始扫描。

    如果在调用扫描仪时出现域名解析错误(Name does not resolve(名称无法解析)),则必须在组织的内部 DNS 服务器之前指定 API_BASE_URL 变量之前的地址。例如:

    --dns 10.0.xx.x

如果扫描器镜像和要扫描的镜像存储在您的注册表中,并且您需要以 .JSON 格式生成包含扫描器操作结果的工件,则扫描器起始变量指定如下:

docker run --dns 10.0.10.10 \

-e "API_BASE_URL=https://kcs.company.com" \

-e "SKIP_API_SERVER_VALIDATION=true" \

-e "API_TOKEN=${api_token}" \

-e "COMPANY_EXT_REGISTRY_USERNAME=${user}" \

-e "COMPANY_EXT_REGISTRY_PASSWORD=${password}"

repo.company.com/images/scanner:v2.0.0-lite \

repo.company.com/images/alpine:latest --stdout > result.json

如果扫描器镜像存储在卡巴斯基公共注册表中(节点使用您的代理服务器镜像拉取此镜像),则扫描的镜像将作为压缩文件本地存储在节点上,您需要使用 .SPDX 格式的扫描器操作结果生成工件,扫描器起始变量指定如下:

docker run --dns 10.0.10.10 \

-e "API_BASE_URL=https://kcs.company.com" \

-e "SKIP_API_SERVER_VALIDATION=true" \

-e "API_TOKEN=${api_token}" \

-e "HTTPS_PROXY=http://user:password@client.proxy.com:8080" \

-v ./image_to_scan.tar:/image.tar \

repo.kcs.kaspersky.com/images/scanner:v2.0.0-lite \

image.tar --file --spdx --stdout > result.spdx

在 Kubernetes 集群中将扫描器作为作业运行

要在 Kubernetes 集群中以精简 SBOM 模式将扫描器作为作业运行:

  1. 确保运行命令的节点包含 kubectl和相应 Kubernetes 集群的配置文件,并且运行命令的用户可以访问它们。
  2. 确保相应的名字空间中存在一个 Secret,以便从您感兴趣的注册表中进行身份验证并下载扫描器镜像。

    您可以自己创建这样的 Secret,例如使用以下命令:

    kubectl create secret docker-registry <secret name> --docker-server=<存储库的 FQDN> --docker-username=username --docker-password=password

  3. 指定扫描器作为 Kubernetes 集群中的任务运行所需的必需参数值以及(如有必要)附加参数的值。

    运行扫描器的参数在.YAML 格式的文件中指定如下:

    apiVersion: batch/v1

    kind: Job

    metadata:

    name: my-lite-job

    spec:

    template:

    spec:

    containers:

    - name: my-lite-container

    image: repo.company.com/images/scanner:v2.0.0-lite

    command: ["/bin/sh"]

    args: ["entrypoint.sh", "alpine:latest"]

    env:

    - name: COMPANY_EXT_REGISTRY_USERNAME

    value: <待扫描镜像所在镜像仓库中用于身份验证的用户>

    - name: COMPANY_EXT_REGISTRY_PASSWORD

    value: <待扫描镜像所在镜像仓库的身份验证密码>

    - name: API_BASE_URL

    value: https://kcs.company.local

    - name: API_TOKEN

    value: <卡巴斯基容器安全 API 中的身份验证令牌>

    - name: SKIP_API_SERVER_VALIDATION

    value: 'true'

    imagePullPolicy: Always

    restartPolicy: Never

    imagePullSecrets:

    - name: 用于身份验证和拉取扫描器镜像的 Secret 名称>

    backoffLimit: 0

  4. 在 Kubernetes 集群中开始扫描:

    kubectl apply -f my-lite-job.yaml

页首
[Topic 301504]