Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
本文介绍如何安装、启用和配置连续修补。 启用连续修补功能后,容器注册表将自动检测和修复容器映像的操作系统级别漏洞。
先决条件
可以使用最低版本为 2.15.0 或更高版本的Azure CLI的本地安装。
已有一个具有Azure Container Registry(ACR)的现有资源组。
您拥有一个启用了 ACR 任务的 Azure 容器注册表(ACR 的免费层不支持 ACR 任务)。
运行以下命令以安装 CLI 扩展:
az extension add -n acrcssc
启用连续修补工作流
使用 az login 登录到Azure CLI。
az cloud set -n AzureChinaCloud az login # az cloud set -n AzureCloud //means return to Public Azure.登录到 ACR。
az acr login -n <myRegistry>运行以下命令以创建名为
continuouspatching.json的文件。cat <<EOF > continuouspatching.json { "version": "v1", "tag-convention" : "<incremental|floating>", "repositories": [{ "repository": "<Repository Name>", "tags": ["<comma-separated-tags>"], "enabled": <true|false> }] } EOF架构以数组格式引入特定存储库和标记。 此处定义了每个变量:
version允许 ACR 团队跟踪你正在使用的架构版本。 除非指示不要更改此变量。tag-convention是可选字段。 允许的值是“增量”或“浮动”-请参阅 连续修补的关键概念 ,了解详细信息。repositories是一个数组,其中包含详细的存储库和标记信息:-
repository引用存储库名称 -
tags是用逗号分隔的标记数组。 通配符*可用于表示该存储库中的所有标记。 -
enabled是一个布尔值,该值为 true 或 false,用于确定是否启用指定的存储库。
-
下面的示例展示了客户配置,该客户希望修补存储库
python中的所有标记(使用 * 符号),并专门修补存储库jammy-20240111中的jammy-20240125和ubuntu标记。{ "version": "v1", "tag-convention" : "incremental", "repositories": [{ "repository": "python", "tags": ["*"], "enabled": true }, { "repository": "ubuntu", "tags": ["jammy-20240111", "jammy-20240125"], "enabled": true, }] }创建配置文件后,执行试运行以验证是否按 JSON 条件选择了预期项目。 干运行需要一个名为
schedule的参数,该参数指定您的连续修补周期的运行频率。 计划标志以天为单位,最小值为 1 天,最大值为 30 天。 例如,如果希望每天修补映像,则可以将计划指定为1d或 1 天。 如果你希望每周修补(每周一次),则应该将计划填写为7d,即 7 天。az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --dry-run该
--dry-run标志通过 JSON 文件配置输出所有指定项目。 验证是否选择了正确的工件。 使用示例 ubuntu 配置时,应将以下结果显示为输出:Ubuntu: jammy-20240111 Ubuntu: jammy-20240125对试运行结果感到满意后,请再次运行
create命令,无需--dry-run标记即可创建连续修补工作流。注释
参数
--schedule遵循从月份的第 1 天开始的固定日乘数。 这意味着:- 如果你在 3 号指定并运行
--schedule 7d,则下次计划运行的时间将是 7 号,因为 7 是从本月 1 号开始数起,3 号之后的第一个 7 的倍数。 - 如果
--schedule为 3d,而今天是 7 号,那么下一次计划的运行将在 9 号进行,因为 9 是继 7 后的下一个 3 的倍数。 - 如果添加标志
--run-immediately,则触发即时修补程序运行。 后续的计划运行时间仍将根据你的--schedule值,从每月的第 1 天起,按最接近的日期倍数来对齐。 - 计划计数器每月重置。 无论指定的计划如何,工作流都将在每月的第一个时间运行,然后按照指定的计划值运行本月剩余时间。 如果我的修补程序在1月28日运行,并且我的周期是7天,那么下一个修补程序将在2月1日运行,然后是2月8日,接着每隔7天继续运行。
az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --run-immediately一旦命令成功(无论是否包含
--run-immediately),你会看到一条成功消息,确认你的工作流任务已被加入队列。 您还会看到一个输出参数,指示工作流下次运行的时间,以便可以准确跟踪下次修补的具体时间。- 如果你在 3 号指定并运行
使用Azure门户查看工作流任务
工作流成功后,转到Azure门户查看正在运行的任务。 在服务菜单中的 “服务”下,选择“ 存储库”。 你应该会看到一个名为
csscpolicies/patchpolicy的新存储库。 此存储库托管了一个 JSON 配置项目,该项目被持续引用以进行持续修补。接下来,在 “服务”下,选择“ 任务”。 应会看到三个新任务:
-
cssc-trigger-workflow- 这个任务扫描配置文件并调用每个相应镜像上的扫描任务。 -
cssc-scan-image- 此任务扫描映像中是否存在作系统漏洞。 仅当找到作系统漏洞时,此任务才会触发修补任务。 -
cssc-patch-image- 此任务会修补映像。
这些任务协同工作来执行持续修补工作流。
-
若要查看特定的任务运行,请选择“ 运行”。 在此处可以查看有关任务是成功还是失败的状态信息,以及查看调试日志。
使用 CLI 查看工作流任务
还可以运行以下 CLI show 命令,查看每个任务和常规工作流的更多详细信息。 该命令输出计划、创建日期和系统数据,例如上次修改日期。
例如:
az acr supply-chain workflow show -r myRegistry -g myResourceGroup -t continuouspatchv1
若要查看所有必需和可选标志,请使用帮助命令:
az acr supply-chain workflow show --help
更新持续的修补工作流
若要对连续修补工作流进行编辑,请使用更新命令。 可以使用更新 CLI 命令直接更新计划或 JSON 配置架构。 例如:
az acr supply-chain workflow update -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d
若要更新你的计划,请使用新的计划输入运行上一个命令。 若要更新 JSON 配置,建议对文件进行更改,运行试运行,然后运行更新命令。
删除连续修补工作流
若要删除连续修补工作流,请运行以下 CLI 命令:
az acr supply-chain workflow delete -r myregistry -g myresourcegroup -t continuouspatchv1
成功删除工作流后,将自动删除存储库“csscpolicies/patchpolicy”。 运行你的工作流的三个任务以及任何当前排队的运行都将被删除。
排查持续性修补问题
审查这些提示,以解决在持续进行补丁更新时可能遇到的问题。
列出正在运行的任务
若要获取重要的调试信息,请使用以下命令列出最近执行的连续修补任务:
az acr supply-chain workflow list -r <registryname> -g <resourcegroup> [--run-status <failed || successful || running>] -t continuouspatchv1
成功的结果将返回以下信息:
- 映像名称和标记
- 工作流类型
- 扫描状态
- 上次扫描日期和时间(如果状态失败,日期将留空)
- 扫描任务 ID (用于进一步调试)
- 补丁状态
- 上次修补日期和时间(如果状态失败,日期将留空)
- 补丁图像名称 + 标签
- 补丁任务 ID(用于进一步调试)
使用 [--run-status] 返回与指定筛选器匹配的所有任务状态。 例如,如果指定 --run-status failed,将仅列出修补失败的映像。
取消正在运行的任务
某些方案可能需要取消当前正在运行或等待运行的任务。 例如,你可能会看到想要立即修复的错误配置,而不是等待修补任务完成。
若要取消正在运行的任务,请使用以下 CLI 命令:
az acr supply-chain workflow cancel-run -r <registryname> -g <resourcegroup> --type <continuouspatchv1>
此命令将取消当前计划中所有状态为Running、Queued或Started的连续修补任务。 例如,如果按每日计划取消任务(--schedule 1d),则这些状态中的任务将取消该天,然后再次计划第二天。 如果计划是每周,则下周再次显示已取消的任务。
查找失败的任务
使用任务列表命令输出所有失败的任务。 指定 cssc-patch 命令是应对故障的最佳选择。
例如,此命令返回前 10 个失败的修补任务:
az acr task list-runs -r <registryname> -n cssc-patch-image --run-status Failed --top 10
若要分析具体故障,请记录命令runID返回的结果,并运行:
az acr task logs -r <registryname> --run-id <run-id>
取消配置错误的工作流
使用 cancel 命令来取消正在排队的任务:
az acr supply-chain workflow cancel-run -r <registryname> -g <resourcegroup> --type <continuouspatchv1>