快速入门:使用 Dependabot 和 Copacetic 更新和保护容器映像依赖项

在本快速入门中,你将介绍配置 Dependabot 和 Copacetic 所需的步骤,这有助于自动执行软件依赖项更新,并增强安全供应链环境中容器映像的安全性。 通过使用这些工具,可以确保容器映像始终是最新的且安全的。

此快速入门介绍如何:

  • 使用 Dependabot 更新容器映像依赖项和安全性。
    • Dependabot 自动执行使容器映像依赖项保持最新状态的过程,从而降低漏洞的风险。
  • 使用 Copacetic 持续监视、扫描和修补容器映像。
    • Copacetic 提供对容器映像的持续监视和扫描,确保它们安全并针对已知漏洞进行修补。

先决条件

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

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

将 Dependabot 与 GitHub 配合使用

遵循指导和建议,以有效管理 Dependabot 引发的拉取请求,使用 GitHub Actions 增强 Dependabot 的性能,并排查常见的 Dependabot 错误。

将 Dependabot 与 Azure DevOps 配合使用

按照说明使用 Azure DevOps 配置 Dependabot,确保容器映像依赖项与最新版本和安全增强功能保持最新状态。

  1. 授予权限:使用名称 YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME) 创建服务帐户,并向其授予以下权限:
  • 强制推送
  • 参与拉取请求
  • 创建分支

* 查找生成服务权限。*

请确保替换 YOUR-PROJECT-NAME 项目 YOUR-ORGANIZATION-NAME 和组织的实际名称。

  1. 配置 Dependabot:若要配置 Dependabot,请将配置文件添加到 dependabot.yml 存储库。 下面是配置文件可能如下所示的示例:

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

此配置为使用 Docker 的项目设置 Dependabot,指定根目录(“/”)是 Docker 文件所在的位置,并分配 Dependabot 来处理更新。 可以自定义配置以满足项目的需求。

  1. 创建 Azure DevOps Pipeline:若要创建 Azure DevOps Pipeline,请使用以下内容将文件添加到 azure-pipeline.yml 存储库:

     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 }
    

  2. 运行管道:从上述 azure-pipelines.yaml 文件创建并验证新的 ADO 管道。

Dependabot 可以在各种方案中更新容器映像依赖项,例如:

  • 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. 按照 Copacetic 的快速入门指南,通过利用漏洞扫描结果来修补容器映像。

  2. 查看 示例 ADO 管道 ,了解使用 Copacetic 的示例 Azure DevOps 管道配置文件。 该管道旨在将 Copacetic 集成到 CI/CD 工作流中,以便持续监视、扫描和修补容器映像是否存在漏洞。

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

后续步骤