卡巴斯基容器安全

在 CI/CD 过程中扫描镜像

卡巴斯基容器安全允许您扫描 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

GitLab CI/CDJenkins CI/CD中扫描镜像的示例。

要从 TAR 存档扫描镜像:

  1. 使用任何用于创建容器化镜像的应用程序构建镜像并将其保存为 TAR 存档。
  2. 运行以下格式的命令来启动扫描:

    /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 存储库:

  1. 在 Git 存储库的配置文件中,在环境变量中指定用于访问存储库的令牌(GITHUB_TOKENGITLAB_TOKEN)。
  2. 运行以下格式的命令来启动扫描:

    /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

扫描结果可以在“资源CI/CD”中查看,或以 .SPDX、.JSON 和 .HTML 格式下载。

页首
[Topic 273843]