共用方式為


在 Azure Container Registry 中設定持續修補

在本文中,您將瞭解如何安裝、啟用及設定持續修補。 啟用容器暫存庫時,持續修補會自動偵測並解決容器映像檔的作業系統層級弱點。

先決條件

  • 您可以使用 Azure Cloud Shell 或 Azure CLI 的本機安裝,最低版本為 2.15.0 或更新版本。
  • 您有現有的資源群組與 Azure Container Registry(ACR)。
  • 您擁有一個已啟用 ACR 工作功能的 Azure Container Registry(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-20240111jammy-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的參數,其會指定連續修補迴圈執行的頻率。 排程旗標是以天為單位來測量,最小值為一天,最大值為 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 是 3 日之後的第一個倍數,從當月第 1 天算起。
  • 如果 --schedule 是 3d,而今天是 7 日,則下一個排程運行會在 9 日登陸,因為 9 是接下來 7 個 3 的下一個倍數。
  • 如果您新增旗標 --run-immediately,則會觸發立即修補程序執行。 後續排程的執行仍會根據您的 --schedule 值,與當月月初的最接近的天數倍數對齊。
  • 排程計數器會每個月 重設 。 無論指定的排程如何,您的工作流程都會在每個月的第一天運行,然後在該月的剩餘天數遵循指定的排程值。 如果我的修補會在 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」。。 也會刪除執行工作流程的三項工作,以及任何目前已排入佇列的執行。