將 Docker Scout 與 Azure Container Registry 整合

將 Docker Scout 與 Azure Container Registry (ACR) 整合後,您可以查看託管於 ACR 儲存庫中映像檔的深入分析。在將 Docker Scout 與 ACR 整合並為儲存庫啟用 Docker Scout 後,將映像檔推送至該儲存庫將會自動觸發映像檔分析。您可以使用 Docker Scout 儀表板或 docker scout CLI 指令來查看映像檔深入分析。

運作方式

為了協助您將 Azure Container Registry 與 Docker Scout 整合,您可以使用自訂的 Azure Resource Manager (ARM) 範本,該範本會自動為您在 Azure 中建立所需的基礎結構。

  • 用於映像檔推送和刪除事件的 EventGrid 主題 (Topic) 與訂閱 (Subscription)。
  • 用於登錄庫的唯讀授權權杖 (Token),用於列出儲存庫並導入映像檔。

當資源在 Azure 中建立完成後,您即可在整合後的 ACR 執行個體中為映像檔儲存庫啟用整合。一旦啟用儲存庫,推送新映像檔將會自動觸發映像檔分析。分析結果將會顯示在 Docker Scout 儀表板中。

如果您在已經包含映像檔的儲存庫上啟用整合,Docker Scout 會自動提取並分析最新的映像檔版本。

ARM 範本

下表說明了設定資源。

注意

建立這些資源會對 Azure 帳戶產生少量的經常性費用。表中的費用欄位代表當整合一個每日推送 100 個映像檔的 ACR 登錄庫時,預估的每月費用。

傳出流量 (Egress) 費用會依使用量而異,約為每 GB $0.1 美元,且前 100 GB 免費。

Azure資源費用
Event Grid 系統主題訂閱 Azure Container Registry 事件(映像檔推送與映像檔刪除)免費
事件訂閱透過 Webhook 訂閱將 Event Grid 事件發送至 Scout每 100 萬則訊息 $0.60 美元。前 10 萬則免費。
登錄庫權杖 (Registry Token)用於 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. 如何整合 (How to integrate) 部分中,輸入您想要整合的登錄庫之登錄庫主機名稱 (Registry hostname)

  3. 選擇「下一步」(Next)。

  4. 選擇部署至 Azure (Deploy to Azure) 以在 Azure 中開啟範本部署精靈。

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

  5. 在範本精靈中,設定您的部署:

    • 資源群組 (Resource group):輸入與您用於容器登錄庫相同的資源群組。Docker Scout 資源必須部署在與登錄庫相同的資源群組中。

    • 登錄庫名稱 (Registry name):此欄位會預先填入登錄庫主機名稱的子網域。

  6. 選擇檢閱 + 建立 (Review + create),然後選擇建立 (Create) 以部署範本。

  7. 等待部署完成。

  8. 部署詳細資料 (Deployment details) 部分中,點擊新建立的容器登錄庫權杖 (Container registry token) 類型的資源。為此權杖產生一個新的密碼。

    或者,使用 Azure 中的搜尋功能導覽至您要整合的容器登錄庫 (Container registry) 資源,並為建立的存取權杖產生新密碼。

  9. 複製產生的密碼,然後返回 Docker Scout 儀表板以完成整合。

  10. 將產生的密碼貼上至登錄庫權杖 (Registry token) 欄位中。

  11. 選擇啟用整合 (Enable integration)

選擇啟用整合後,Docker Scout 會執行連線測試以驗證整合。如果驗證成功,您將被重新導向至 Azure 登錄庫摘要頁面,該頁面會顯示您目前組織的所有 Azure 整合。

接下來,在 儲存庫設定 (Repository settings) 中為您想要分析的儲存庫啟用 Docker Scout。

啟用儲存庫後,您推送的映像檔將會由 Docker Scout 進行分析。分析結果會出現在 Docker Scout 儀表板中。如果您的儲存庫已包含映像檔,Docker Scout 會自動提取並分析最新的映像檔版本。

移除整合

重要

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

若要移除 ACR 整合:

  1. 前往 Docker Scout 儀表板上的 ACR 整合頁面

  2. 找到您要移除的 ACR 整合,然後選擇移除 (Remove) 按鈕。

  3. 在開啟的對話框中,選擇移除進行確認。

  4. 在 Docker Scout 儀表板中移除整合後,也請一併移除與該整合相關的 Azure 資源:

    • 容器登錄庫的 docker-scout-readonly-token 權杖。
    • docker-scout-repository Event Grid 系統主題。
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.