快速入门:使用 Dependabot 和 Copacetic 了解容器映像依赖项更新和安全性
在本快速入门指南中,我们将指导你完成配置和使用 Dependabot 和 Copacetic 的过程,以简化、维护和保持最新软件依赖项更新,并增强容器安全供应链中的容器映像安全性。
这些工具将自动执行此过程,确保容器映像始终是最新的且安全的。
此快速入门介绍如何:
使用 Dependabot 更新容器映像依赖项和安全性。 使用 Copa 持续监视、扫描和修补容器映像。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- 为订阅安装和配置最新版本的 Azure CLI 。
- 订阅中的现有Azure 容器注册表(ACR)。
使用 Dependabot 更新容器映像依赖项和安全性
Dependabot 是一种工具,可自动执行使软件依赖项保持最新状态的过程。 它的工作原理是扫描存储库中的过时依赖项,并创建拉取请求将其更新到最新版本。 它每天检查更新依赖项,并创建拉取请求来更新它们。 可以将 Dependabot 配置为为所有类型的依赖项(包括 Docker 映像)创建拉取请求。 建议使用 dependabot 自动提升 Dockerfiles、Kubernetes yaml 文件和 Helm 图表值 yaml 文件中的依赖项,以获取最新的安全修补程序并降低安全风险。
将 Dependabot 与 GitHub 配合使用
- 按照此处的说明使用 GitHub 设置 Dependabot
将 Dependabot 与 Azure DevOps 配合使用
- 按照说明使用 Azure DevOps 配置 Dependabot:
通过使用以下权限创建名称
YOUR-PROJECT-NAME Build Service (YOUR-ORGANIZATION-NAME)
的服务帐户来授予权限:-Force Push -Contribute to 拉取请求s -Create Branch
通过添加类似于此示例的
dependabot
配置文件来配置 Dependabot:version: 2 updates: - package-ecosystem: "docker" directory: "/" assignees: - "dependabot"
通过添加
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 }
运行管道 “创建”并验证上述
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
按照快速入门指南开始使用 Copa。
示例 ADO 管道:
-可在此处找到用于使用 Copa 的示例 Azure DevOps 管道。
Copa 还可以集成到 Github Actions 工作流中,以使用 Copacetic Action 修补图像漏洞。 此操作使用其关联的漏洞报告修补存储库的一组指定映像。