卡巴斯基容器安全允许您扫描 CI/CD 中使用的镜像。要从 CI/CD 扫描镜像,您应该配置卡巴斯基容器安全与 CI/CD 过程的集成。
通过监听和拦截网络流量获得的数据必须在 CI/CD 环境和解决方案之间安全传输。
要扫描 CI/CD 过程中使用的镜像或存储库(为了扫描配置文件),请向运行卡巴斯基容器安全扫描器的 CI/CD 管道添加一个阶段。
要从 CI/CD 扫描镜像,请在用于集成存储库的配置文件中,指定扫描器的 API_BASE_URL
( 卡巴斯基容器安全 API 服务器的网址)和 API_TOKEN
(用于访问卡巴斯基容器安全 API 的令牌)环境变量。您还必须指定API_CA_CERT
(用于验证 API 解决方案的主机服务器的证书)或SKIP_API_SERVER_VALIDATION=true
以跳过此扫描。
扫描结果将被转发到服务器并显示在管理控制台的“资源 → CI/CD”部分中。提供的表格会列出被扫描的镜像,显示风险评估的结果,并指示检测到的漏洞。
您可以单击镜像名称链接来打开包含镜像扫描结果详细信息的页面。此页面类似于显示仓库镜像扫描结果的页面。
卡巴斯基容器安全还显示每个对象的构件的类型。使用两种主要构件:
- 文件系统是包含配置文件的存储库。
- 容器镜像是用于容器运行时实现的模板。
对于每个扫描对象,您可以指定内部版本编号(BUILD_NUMBER
)和内部版本
(
BUILD_PIPELINE
)。这些参数可用于确定对象失效的具体阶段。
对于 CI/CD 镜像,不提供重新扫描。
卡巴斯基容器安全在 CI/CD 中执行以下类型的扫描:
- 扫描镜像仓库中的镜像。该解决方案在成功内部版本后运行扫描并将镜像保存到镜像仓库中。
- 扫描 TAR 存档中的镜像。TAR 存档存储为内部版本构件,解决方案将在下一个构建管道中扫描该构件。
- 扫描 Git 存储库,可以通过以下方式之一执行:
- 针对 Git 存储库中的项目分支(单个开发路径)
- 针对提交(项目时间线中的状态快照或检查点)
要扫描镜像仓库的镜像:
运行以下格式的命令来启动扫描:
/scanner [TARGET] --stdout
其中:
<TARGET>
– 注册表中映像的完整地址。
<--stdout>
是到安全事件日志的输出。
要访问注册表,您必须在环境变量中设置登录名COMPANY_EXT_REGISTRY_USERNAME
和密码(令牌)COMPANY_EXT_REGISTRY_PASSWORD
。
要使用证书与注册表建立安全连接,您必须在 COMPANY_EXT_REGISTRY_TLS_CERT
环境变量中将证书详细信息指定为 .PEM 格式的以下字符串: -----BEGIN CERTIFICATE-----\n...
证书数据
> ...\n-----END CERTIFICATE-----
。
GitLab CI/CD和Jenkins CI/CD中扫描镜像的示例。
要从 TAR 存档扫描镜像:
- 使用任何用于创建容器化镜像的应用程序构建镜像并将其保存为 TAR 存档。
- 运行以下格式的命令来启动扫描:
/scanner [TARGET] --file --stdout
其中:
<TARGET>
– 包含要扫描的镜像的文件的路径。
<--file>
– 表示扫描TARGET
文件的标志。
<--stdout>
是到安全事件日志的输出。
包含用于扫描 TAR 存档的设置的配置文件示例
stages:
- build_tar
- scan_tar
- push_image
build_tar:
stage: build_tar
tags:
- k8s
- docker
image:
name: gcr.io/kaniko-project/executor:v1.9.0-debug
entrypoint: [""]
dependencies:
- scan_source_branch
- scan_source_commit
script:
- mkdir -p /kaniko/.docker
- echo "${DOCKER_AUTH_CONFIG}" > /kaniko/.docker/config.json
- /kaniko/executor
--context "${CI_PROJECT_DIR}"
--dockerfile "${CI_PROJECT_DIR}/Dockerfile"
--destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}"
--compressed-caching=false
--build-arg GITLAB_USER=gitlab-ci-token
--build-arg GITLAB_TOKEN=${CI_JOB_TOKEN}
--no-push
--tarPath=image.tar
artifacts:
paths:
- image.tar
expire_in: 2 hours
scan_tar:
stage: scan_tar
tags:
- k8s
- docker
dependencies:
- build_tar
image:
name: "company.gitlab.cloud.net:5050/companydev/example/scanner:master-with-db"
pull_policy: always
entrypoint: [""]
variables:
API_BASE_URL: ${API_BASE_URL}
API_TOKEN: ${API_TOKEN}
API_CA_CERT: ${KCS_CA_CERT}
script:
- /scanner image.tar --file --stdout
artifacts:
paths:
- image.tar
expire_in: 2 hours
push_image:
stage: push_image
tags:
- k8s
image:
name: gcr.io/go-containerregistry/crane:debug
entrypoint: [""]
dependencies:
- scan_tar
script:
- mkdir -p $HOME/.docker
- echo "${DOCKER_AUTH_CONFIG}" > $HOME/.docker/config.json
- /ko-app/crane push image.tar "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}"
要扫描 Git 存储库:
- 在 Git 存储库的配置文件中,在环境变量中指定用于访问存储库的令牌(
GITHUB_TOKEN
或GITLAB_TOKEN
)。
- 运行以下格式的命令来启动扫描:
/scanner [TARGET] --repo [--branch BRANCH] [--commit COMMIT] --stdout
其中:
<TARGET>
– Git 存储库的网址 (URL)。
<--repo>
– 表示扫描TARGET
文件的标志。
<--branch BRANCH>
– 要扫描的存储库的分支。
<--commit COMMIT>
– 要扫描的提交所对应的哈希值。
<--stdout>
是到安全事件日志的输出。
带环境变量的配置文件示例,用于从 Git 存储库扫描镜像
stages:
- scan_source_branch
- scan_source_commit
scan_source_branch:
stage: scan_source_branch
image:
name: "company.gitlab.cloud.net:5050/companydev/example/scanner:master-with-db"
pull_policy: always
entrypoint: [""]
tags:
- k8s
- docker
variables:
API_BASE_URL: ${API_BASE_URL}
API_TOKEN: ${API_TOKEN}
API_CA_CERT: ${KCS_CA_CERT}
script:
- GITLAB_TOKEN=${CI_JOB_TOKEN} /scanner --repo ${CI_REPOSITORY_URL} --branch ${CI_COMMIT_BRANCH} --stdout
scan_source_commit:
stage: scan_source_commit
image:
name: "company.gitlab.cloud.net:5050/companydev/example/scanner:master-with-db"
pull_policy: always
entrypoint: [""]
tags:
- k8s
- docker
variables:
API_BASE_URL: ${API_BASE_URL}
API_TOKEN: ${API_TOKEN}
API_CA_CERT: ${KCS_CA_CERT}
script:
- GITLAB_TOKEN=${CI_JOB_TOKEN} /scanner --repo ${CI_REPOSITORY_URL} --commit ${CI_COMMIT_SHA} --stdout
要扫描
文件系统,您必须使用带有
vX.XX-with-db数据库的扫描器镜像。要扫描 IaC 文件,必须授予扫描器访问容器内文件的权限(例如,通过安装包含文件的卷或将文件复制到容器文件系统)。
要扫描文件系统,
运行以下格式的命令来启动扫描:
/scanner [TARGET] --sources --stdout
其中:
<TARGET>–
用于扫描的文件夹的路径
<--sources>
–
指示需要扫描文件系统中的文件的标志
<--stdout>
是到安全事件日志的输出。
配置文件示例,包含用于扫描文件系统中文件的变量
下列以下情况的变量:在扫描期间,扫描器使用CI_PROJECT_DIR
变量访问位于本地文件系统中的 GitLab 项目文件。
scan_folder:
stage: scanner
image:
name: repo.kcs.kaspersky.com/images/scanner:v2.0.0-with-db
entrypoint: [""]
tags:
- k8s
variables:
SCAN_TARGET: ${CI_PROJECT_DIR}
BUILD_NUMBER: ${CI_JOB_ID}
BUILD_PIPELINE: ${CI_PIPELINE_ID}
API_BASE_URL: ${API_BASE_URL}
API_TOKEN: ${API_TOKEN}
SKIP_API_SERVER_VALIDATION: 'true'
script:
- /bin/sh /entrypoint.sh $SCAN_TARGET --sources --stdout
扫描结果可以在“资源 → CI/CD”中查看,或以 .SPDX、.JSON 和 .HTML 格式下载。
文章 ID: 296997, 上次审阅: 2025年5月20日