在本快速入门中,你将介绍配置 Dependabot 和 Copacetic 所需的步骤,这有助于自动执行软件依赖项更新,并增强安全供应链环境中容器映像的安全性。 通过使用这些工具,可以确保容器映像始终是最新的且安全的。
此快速入门介绍如何:
- 使用 Dependabot 更新容器映像依赖项和安全性。
- Dependabot 自动执行使容器映像依赖项保持最新状态的过程,从而降低漏洞的风险。
- 使用 Copacetic 持续监视、扫描和修补容器映像。
- Copacetic 提供对容器映像的持续监视和扫描,确保它们安全并针对已知漏洞进行修补。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- 为订阅安装和配置最新版本的 Azure CLI 。
- 订阅中的现有Azure 容器注册表(ACR)。
使用 Dependabot 更新容器映像依赖项和安全性
Dependabot 是一种工具,可自动执行使软件依赖项保持最新状态的过程。 它的工作原理是扫描存储库中的过时依赖项,并创建拉取请求将其更新到最新版本。 它每天检查更新依赖项,并创建拉取请求来更新它们。 可以将 Dependabot 配置为为所有类型的依赖项(包括 Docker 映像)创建拉取请求。 建议使用 dependabot 自动提升 Dockerfiles、Kubernetes yaml 文件和 Helm 图表值 yaml 文件中的依赖项,以获取最新的安全修补程序并降低安全风险。
将 Dependabot 与 GitHub 配合使用
遵循指导和建议,以有效管理 Dependabot 引发的拉取请求,使用 GitHub Actions 增强 Dependabot 的性能,并排查常见的 Dependabot 错误。
- 在此处使用 GitHub 设置 Dependabot。
将 Dependabot 与 Azure DevOps 配合使用
按照说明使用 Azure DevOps 配置 Dependabot,确保容器映像依赖项与最新版本和安全增强功能保持最新状态。
- 授予权限:使用名称
YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME)
创建服务帐户,并向其授予以下权限:
- 强制推送
- 参与拉取请求
- 创建分支
请确保替换 YOUR-PROJECT-NAME
项目 YOUR-ORGANIZATION-NAME
和组织的实际名称。
配置 Dependabot:若要配置 Dependabot,请将配置文件添加到
dependabot.yml
存储库。 下面是配置文件可能如下所示的示例:version: 2 updates: - package-ecosystem: "docker" directory: "/" assignees: - "dependabot"
此配置为使用 Docker 的项目设置 Dependabot,指定根目录(“/”)是 Docker 文件所在的位置,并分配 Dependabot 来处理更新。 可以自定义配置以满足项目的需求。
创建 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 }
运行管道:从上述
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
按照 Copacetic 的快速入门指南,通过利用漏洞扫描结果来修补容器映像。
查看 示例 ADO 管道 ,了解使用 Copacetic 的示例 Azure DevOps 管道配置文件。 该管道旨在将 Copacetic 集成到 CI/CD 工作流中,以便持续监视、扫描和修补容器映像是否存在漏洞。
Copacetic 还可以集成到 Github Actions 工作流中,以使用 Copacetic Action 修补图像漏洞。 此操作使用其关联的漏洞报告修补存储库的一组指定映像。