快速入门:使用 Dependabot 和 Copacetic 了解容器映像依赖项更新和安全性

在本快速入门指南中,我们将指导你完成配置和使用 Dependabot 和 Copacetic 的过程,以简化、维护和保持最新软件依赖项更新,并增强容器安全供应链中的容器映像安全性。

这些工具将自动执行此过程,确保容器映像始终是最新的且安全的。

此快速入门介绍如何:

使用 Dependabot 更新容器映像依赖项和安全性。 使用 Copa 持续监视、扫描和修补容器映像。

先决条件

使用 Dependabot 更新容器映像依赖项和安全性

Dependabot 是一种工具,可自动执行使软件依赖项保持最新状态的过程。 它的工作原理是扫描存储库中的过时依赖项,并创建拉取请求将其更新到最新版本。 它每天检查更新依赖项,并创建拉取请求来更新它们。 可以将 Dependabot 配置为为所有类型的依赖项(包括 Docker 映像)创建拉取请求。 建议使用 dependabot 自动提升 Dockerfiles、Kubernetes yaml 文件和 Helm 图表值 yaml 文件中的依赖项,以获取最新的安全修补程序并降低安全风险。

将 Dependabot 与 GitHub 配合使用

将 Dependabot 与 Azure DevOps 配合使用

  • 按照说明使用 Azure DevOps 配置 Dependabot:
  1. 通过使用以下权限创建名称YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME)的服务帐户来授予权限

    -Force Push -Contribute to 拉取请求s -Create Branch

生成服务权限

  1. 通过添加类似于此示例的dependabot配置文件来配置 Dependabot

      version: 2
      updates:
        - package-ecosystem: "docker"
          directory: "/"
          assignees:
            - "dependabot"
    

  2. 通过添加azure-pipeline.yaml包含以下内容的文件来创建 Azure DevOps Pipeline

     schedules:
       - cron: '0 14 * * *'
         displayName: 'Every day at 7am PST'
         branches:
           include: [main]
         always: true
    
     trigger: none
    
     jobs:
       - job:
         steps:
         - script: |
             git clone https://github.com/dependabot/dependabot-core.git
             cd dependabot-core
    
             DOCKER_BUILDKIT=1 docker build \
               --build-arg "USER_UID=$(id -u)" \
               --build-arg "USER_GID=$(id -g)" \
               -t "dependabot/dependabot-core" .
             cd ..
           displayName: build dependabot-core Docker image
    
         - script: |
             git clone https://github.com/dependabot/dependabot-script.git
             cd dependabot-script
    
             docker run -v "$(pwd):/home/dependabot/dependabot-script" -w /home/dependabot/dependabot-script dependabot/dependabot-core bundle install -j 3 --path vendor
           displayName: install dependencies
    
         - script: |
             #!/bin/bash
             SYSTEM_COLLECTIONURI_TRIM=`echo "${SYSTEM_COLLECTIONURI:22}"`
             PROJECT_PATH="$SYSTEM_COLLECTIONURI_TRIM$SYSTEM_TEAMPROJECT/_git/$BUILD_REPOSITORY_NAME"
             echo "path: $PROJECT_PATH"
    
             docker run  -v "$(pwd)/dependabot-script:/home/dependabot/dependabot-script" \
                         -w '/home/dependabot/dependabot-script' \
                         -e AZURE_ACCESS_TOKEN=$(System.AccessToken) \
                         -e PACKAGE_MANAGER=docker \
                         -e PROJECT_PATH=$PROJECT_PATH \
                         -e DIRECTORY_PATH=/ \
                         -e OPTIONS="$OPTIONS" \
                         dependabot/dependabot-core bundle exec ruby ./generic-update-script.rb
           displayName: "run dependabot"
           env:
             OPTIONS: |
               { "kubernetes_updates": true }
    

  3. 运行管道 “创建”并验证上述 azure-pipelines.yaml 文件中的新 ADO 管道。

目前 Dependabot 支持在各种方案中更新容器映像依赖项,包括 Dockerfile、Kubernetes YAML 和 Helm values.yaml。 在配置文件中指定映像时,可以遵循以下语法:

-Dockerfile -Kubernetes YAML -Helm values.yaml

注意

语法允许 Dependabot 识别和更新配置文件中的容器映像依赖项,确保使用最新版本和安全修补程序保持最新状态。


# Dockerfile
foo:
  image:
    repository: sql/sql
    tag: 1.2.3
    registry: docker.io

# Helm values.yaml
foo:
  image:
    repository: sql/sql
    tag: 1.2.3
    registry: docker.io

或者, Helm values.yaml可以使用 version 字段来指定映像版本:

foo:
  image:
    repository: sql/sql
    version: 1.2.3

使用 Copacetic 持续监视、扫描和修补容器映像

Copacetic (copa)是一个 Microsoft 支持的NCF 开源项目,根据常用扫描程序工具的漏洞扫描结果,直接修补容器映像中的 Linux OS 包漏洞。 Copacetic 允许快速修补容器,而无需上游进行完全重新生成。 这将有助于容器映像快速重新部署到生产环境。 Copacetic 仅适用于 Linux OS 漏洞。 对于应用级漏洞,必须在生成映像之前完成修补程序。

使用 Copacetic

  1. 按照快速入门指南开始使用 Copa。

  2. 示例 ADO 管道

    -可在此处找到用于使用 Copa 的示例 Azure DevOps 管道。

Copa 还可以集成到 Github Actions 工作流中,以使用 Copacetic Action 修补图像漏洞。 此操作使用其关联的漏洞报告修补存储库的一组指定映像。

后续步骤