將 Docker Scout 與 Azure 容器登錄檔整合

將 Docker Scout 與 Azure 容器登錄檔 (ACR) 整合,可讓您檢視託管在 ACR 倉庫中的映象的映象洞察。在 Docker Scout 與 ACR 整合併為倉庫啟用 Docker Scout 後,將映象推送到倉庫會自動觸發映象分析。您可以使用 Docker Scout 控制面板或 `docker scout` CLI 命令檢視映象洞察。

工作原理

為了幫助您將 Azure 容器登錄檔與 Docker Scout 整合,您可以使用自定義的 Azure Resource Manager (ARM) 模板,該模板會自動為您在 Azure 中建立必要的基礎設施

  • 一個用於映象推送和刪除事件的 EventGrid 主題和訂閱。
  • 登錄檔的只讀授權令牌,用於列出倉庫並匯入映象。

在 Azure 中建立資源後,您可以為整合 ACR 例項中的映象倉庫啟用整合。啟用倉庫後,推送新映象會自動觸發映象分析。分析結果會顯示在 Docker Scout 控制面板中。

如果您對已包含映象的倉庫啟用整合,Docker Scout 會自動拉取並分析最新的映象版本。

ARM 模板

下表描述了配置資源。

注意

建立這些資源會在 Azure 帳戶上產生少量定期費用。表格中的“**成本**”列表示在整合每天有 100 個映象推送的 ACR 登錄檔時,這些資源的估計每月成本。

出口成本因使用情況而異,但大約為每 GB 0.1 美元,前 100 GB 免費。

Azure資源成本
事件網格系統主題訂閱 Azure 容器登錄檔事件(映象推送和映象刪除)免費
事件訂閱透過 Webhook 訂閱將事件網格事件傳送到 Scout每 100 萬條訊息 0.60 美元。前 10 萬條免費。
登錄檔令牌用於 Scout 列出倉庫並從登錄檔拉取映象的只讀令牌免費

以下 JSON 文件顯示了 Docker Scout 用於建立 Azure 資源的 ARM 模板。

{
   "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
   "contentVersion": "1.0.0.0",
   "parameters": {
      "DockerScoutWebhook": {
         "metadata": {
            "description": "EventGrid's subscription Webhook"
         },
         "type": "String"
      },
      "RegistryName": {
         "metadata": {
            "description": "Name of the registry to add Docker Scout"
         },
         "type": "String"
      },
      "systemTopics_dockerScoutRepository": {
         "defaultValue": "docker-scout-repository",
         "metadata": {
            "description": "EventGrid's topic name"
         },
         "type": "String"
      }
   },
   "resources": [
      {
         "apiVersion": "2023-06-01-preview",
         "identity": {
            "type": "None"
         },
         "location": "[resourceGroup().location]",
         "name": "[parameters('systemTopics_dockerScoutRepository')]",
         "properties": {
            "source": "[extensionResourceId(resourceGroup().Id , 'Microsoft.ContainerRegistry/Registries', parameters('RegistryName'))]",
            "topicType": "Microsoft.ContainerRegistry.Registries"
         },
         "type": "Microsoft.EventGrid/systemTopics"
      },
      {
         "apiVersion": "2023-06-01-preview",
         "dependsOn": [
            "[resourceId('Microsoft.EventGrid/systemTopics', parameters('systemTopics_dockerScoutRepository'))]"
         ],
         "name": "[concat(parameters('systemTopics_dockerScoutRepository'), '/image-change')]",
         "properties": {
            "destination": {
               "endpointType": "WebHook",
               "properties": {
                  "endpointUrl": "[parameters('DockerScoutWebhook')]",
                  "maxEventsPerBatch": 1,
                  "preferredBatchSizeInKilobytes": 64
               }
            },
            "eventDeliverySchema": "EventGridSchema",
            "filter": {
               "enableAdvancedFilteringOnArrays": true,
               "includedEventTypes": [
                  "Microsoft.ContainerRegistry.ImagePushed",
                  "Microsoft.ContainerRegistry.ImageDeleted"
               ]
            },
            "labels": [],
            "retryPolicy": {
               "eventTimeToLiveInMinutes": 1440,
               "maxDeliveryAttempts": 30
            }
         },
         "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions"
      },
      {
         "apiVersion": "2023-01-01-preview",
         "name": "[concat(parameters('RegistryName'), '/docker-scout-readonly-token')]",
         "properties": {
            "credentials": {},
            "scopeMapId": "[resourceId('Microsoft.ContainerRegistry/registries/scopeMaps', parameters('RegistryName'), '_repositories_pull_metadata_read')]"
         },
         "type": "Microsoft.ContainerRegistry/registries/tokens"
      }
   ],
   "variables": {}
}

整合登錄檔

  1. 前往 Docker Scout 控制面板上的 ACR 整合頁面

  2. 在“**如何整合**”部分,輸入您要整合的登錄檔的“**登錄檔主機名**”。

  3. 選擇“**下一步**”。

  4. 選擇“**部署到 Azure**”以在 Azure 中開啟模板部署嚮導。

    如果您尚未登入,系統可能會提示您登入 Azure 帳戶。

  5. 在模板嚮導中,配置您的部署

    • **資源組**:輸入您用於容器登錄檔的相同資源組。Docker Scout 資源必須部署到與登錄檔相同的資源組。

    • **登錄檔名稱**:該欄位已預填充登錄檔主機名的子域。

  6. 選擇“**稽核 + 建立**”,然後選擇“**建立**”以部署模板。

  7. 等待部署完成。

  8. 在“**部署詳情**”部分,單擊新建立的“**容器登錄檔令牌**”型別的資源。為該令牌生成一個新密碼。

    或者,使用 Azure 中的搜尋功能導航到您要整合的“**容器登錄檔**”資源,併為建立的訪問令牌生成新密碼。

  9. 複製生成的密碼並返回 Docker Scout 控制面板以完成整合。

  10. 將生成的密碼貼上到“**登錄檔令牌**”欄位中。

  11. 選擇“**啟用整合**”。

選擇“**啟用整合**”後,Docker Scout 會執行連線測試以驗證整合。如果驗證成功,您將被重定向到 Azure 登錄檔摘要頁面,該頁面顯示您當前組織的所有 Azure 整合。

接下來,在 倉庫設定 中為要分析的倉庫啟用 Docker Scout。

啟用倉庫後,您推送的映象將由 Docker Scout 進行分析。分析結果會顯示在 Docker Scout 控制面板中。如果您的倉庫已包含映象,Docker Scout 會自動拉取並分析最新的映象版本。

移除整合

重要

在 Docker Scout 控制面板中移除整合並不會自動移除在 Azure 中建立的資源。

要移除 ACR 整合

  1. 前往 Docker Scout 控制面板上的 ACR 整合頁面

  2. 找到您要移除的 ACR 整合,然後選擇“**移除**”按鈕。

  3. 在開啟的對話方塊中,透過選擇“**移除**”確認。

  4. 在 Docker Scout 控制面板中移除整合後,還需移除與整合相關的 Azure 資源

    • 容器登錄檔的 `docker-scout-readonly-token` 令牌。
    • `docker-scout-repository` 事件網格系統主題。