你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 容器注册表中配置连续修补

本文介绍如何安装、启用和配置连续修补。 启用连续修补功能后,容器注册表将自动检测和修复容器映像的操作系统级别漏洞。

先决条件

  • 可以使用 Azure Cloud Shell 或 Azure CLI 的本地安装,最低版本为 2.15.0 或更高版本。
  • 已有一个具有 Azure 容器注册表(ACR)的现有资源组。
  • 你有一个已启用 ACR 任务的 Azure 容器注册表(ACR 免费层中不支持 ACR 任务)。

安装持续修补工作流

运行以下命令以安装 CLI 扩展:

    az extension add -n acrcssc

启用持续补丁工作流

  1. 使用 az login 登录到 Azure CLI。
az login
  1. 登录到 ACR。
az acr login -n <myRegistry>
  1. 运行以下命令以创建一个名为 continuouspatching.json,其中包含连续修补 JSON 的文件。 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-20240125ubuntu标签。

JSON 示例:

{
"version": "v1",
"tag-convention" : "incremental",
"repositories": [{
        "repository": "python",
        "tags": ["*"],
        "enabled": true
    },
    {
        "repository": "ubuntu",
        "tags": ["jammy-20240111", "jammy-20240125"],
        "enabled": true, 
    }]
}
  1. 创建配置文件后,建议执行空运行,以验证 JSON 条件是否选择了预期的构件。 干运行需要一个名为schedule的参数,该参数指定您的连续修补周期的运行频率。 计划标志以天为单位,最小值为 1 天,最大值为 30 天。 例如,如果希望每天修补映像,则可以将计划指定为 1d或 1 天。 如果你希望每周修补(每周一次),则应该将计划填写为 7d,即 7 天。

命令架构:

az acr supply-chain workflow create -r <registryname> -g <resourcegroupname> -t continuouspatchv1 --config <JSONfilepath> --schedule <number of days> --dry-run 

示例命令:

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

查看所有必需/可选标志的帮助命令:

az acr supply-chain workflow create --help
  1. 一旦对试运行结果感到满意,请再次运行 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 <registryname> -g <resourcegroupname> -t continuouspatchv1 --config <JSONfilename> --schedule <number of days> --run-immediately

示例命令:

az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --run-immediately

在成功执行命令后,无论是否包含--run-immediately,您都应该看到:

  • 一条成功消息,确认你的工作流任务已排队。

  • 一个输出参数,用于指示工作流下一次运行的计划时间,从而可以准确跟踪修补将何时再次发生。

针对所有必需/可选标志的帮助命令。

az acr supply-chain workflow create --help

使用 Azure 门户查看工作流任务

  1. 工作流成功后,转到 Azure 门户查看正在运行的任务。 选择“服务 -> 存储库”,应会看到名为 csscpolicies/patchpolicy“的新存储库”。 此存储库托管了一个 JSON 配置项目,该项目被持续引用以进行持续修补。

显示托管持续修补的配置项目的存储库的屏幕截图。

  1. 接下来,选择“服务”下的“任务”-应会看到三个新任务:

显示为连续修补创建的任务的屏幕截图。

任务:

  • cssc-trigger-workflow - 此任务扫描配置文件,并在每个相应的镜像上调用扫描任务。
  • cssc-scan-image - 此任务将扫描映像中是否存在作系统漏洞。 仅当找到作系统漏洞时,此任务才会触发修补任务。
  • cssc-patch-image - 此任务会修补映像。 这些任务协同工作来执行持续修补工作流。
  1. 还可以在“任务”视图中选择“运行”以查看特定任务运行。 在此处可以查看有关任务是成功还是失败的状态信息,以及查看调试日志。

屏幕截图显示了为进行持续修补而运行的任务。

使用 CLI 查看工作流任务

还可以运行以下 CLI show 命令,查看每个任务和常规工作流的更多详细信息。 命令输出:

  • 时间表
  • 创建日期
  • 系统数据,例如上次修改日期、按谁等。

命令架构:

az acr supply-chain workflow show -r <registry> -g <resourceGroup> -t continuouspatchv1   

示例命令:

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 <registry> -g <resourceGroup> -t continuouspatchv1 --config <JSONfilename> --schedule <number of days>

示例命令:

az acr supply-chain workflow update -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d

针对所有必需/可选标志的帮助命令:

az acr supply-chain workflow update --help

若要更新你的计划,请使用新的计划输入运行上一个命令。 若要更新 JSON 配置,建议对文件进行更改,运行试运行,然后运行更新命令。

删除持续修补工作流

若要删除连续修补工作流,请运行以下 CLI 命令。

命令架构:

az acr supply-chain workflow delete -r <registry> -g <resourceGroup> -t continuouspatchv1 

示例命令:

az acr supply-chain workflow delete -r myregistry -g myresourcegroup -t continuouspatchv1

针对所有必需/可选标志的帮助命令:

az acr supply-chain workflow delete --help

成功删除工作流后,将自动删除存储库“csscpolicies/patchpolicy”。 运行你的工作流的三个任务以及任何当前排队的运行都将被删除。