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

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

先决条件

  • 可以使用最低版本为 2.15.0 或更高版本的 Azure CLI 的本地安装。

  • 已有一个具有 Azure 容器注册表(ACR)的现有资源组。

  • 你有一个已启用 ACR 任务的 Azure 容器注册表(ACR 免费层中不支持 ACR 任务)。

安装持续修补工作流

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

    az extension add -n acrcssc

启用持续补丁工作流

  1. 使用 az login 登录到 Azure CLI。

    az cloud set -n AzureChinaCloud
    az login
    # az cloud set -n AzureCloud   //means return to Public Azure.
    
  2. 登录到 ACR。

    az acr login -n <myRegistry>
    
  3. 运行以下命令以创建一个名为 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, 
        }]
    }
    
  4. 创建配置文件后,建议执行空运行,以验证 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
    
  5. 一旦对试运行结果感到满意,请再次运行 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 配置项目,该项目被持续引用以进行持续修补。

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

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

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

    任务:

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

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

使用 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”。 运行你的工作流的三个任务以及任何当前排队的运行都将被删除。