將 Docker Scout 與 Artifactory 整合

將 Docker Scout 與 JFrog Artifactory 整合後,您可以自動對 Artifactory 登錄檔中的映象執行映象分析。

本地映象分析

您可以使用 Docker Desktop 或 Docker CLI 在本地分析 Artifactory 映象的漏洞。您首先需要使用 docker login 命令向 JFrog Artifactory 進行身份驗證。例如

docker login {URL}

提示

對於雲託管的 Artifactory,您可以在 Artifactory UI 中選擇您的 Artifactory 倉庫,然後點選為我設定 (Set Me Up) 按鈕來找到憑據。

遠端映象分析

要自動分析在遠端環境中執行的映象,您需要部署 Docker Scout Artifactory 代理。該代理是一個獨立的服務,用於分析映象並將結果上傳到 Docker Scout。您可以使用Docker Scout 儀表盤檢視結果。

代理工作原理

Docker Scout Artifactory 代理以Docker Hub 上的映象形式提供。該代理透過持續輪詢 Artifactory 以查詢新映象來工作。當找到新映象時,它會執行以下步驟:

  1. 從 Artifactory 拉取映象
  2. 分析映象
  3. 將分析結果上傳到 Docker Scout

代理記錄映象的軟體物料清單 (SBOM) 及其所有基礎映象的 SBOM。記錄的 SBOM 包括映象中包含的作業系統 (OS) 級別和應用程式級別的程式或依賴項。

此外,代理還會將有關映象的以下元資料傳送到 Docker Scout:

  • 映象的源倉庫 URL 和提交 SHA
  • 構建指令
  • 構建日期
  • 標籤和摘要 (digest)
  • 目標平臺
  • 層大小

代理絕不傳輸映象本身,也不傳輸映象內的任何資料,例如程式碼、二進位制檔案和層 blob。

代理不檢測和分析預先存在的映象。它僅分析在代理執行時出現在登錄檔中的映象。

部署代理

本節介紹部署 Artifactory 代理的步驟。

先決條件

在部署代理之前,請確保您滿足先決條件:

  • 託管代理的伺服器可以透過網路訪問以下資源:
    • 您的 JFrog Artifactory 例項
    • hub.docker.com,埠 443,用於與 Docker 進行身份驗證
    • api.dso.docker.com,埠 443,用於將資料傳輸到 Docker Scout
  • 登錄檔是 Docker V2 登錄檔。不支援 V1 登錄檔。

代理支援所有版本的 JFrog Artifactory 和 JFrog Container Registry。

建立配置檔案

您可以使用 JSON 檔案配置代理。代理期望在啟動時配置檔案位於 /opt/artifactory-agent/data/config.json

配置檔案包括以下屬性:

屬性描述
agent_id代理的唯一識別符號。
docker.organization_nameDocker 組織的名稱。
docker.usernameDocker 組織中管理員使用者的使用者名稱。
docker.pat具有讀寫許可權的管理員使用者的個人訪問令牌 (PAT)。
artifactory.base_urlArtifactory 例項的基礎 URL。
artifactory.username代理將使用的具有讀取許可權的 Artifactory 使用者的使用者名稱。
artifactory.passwordArtifactory 使用者的密碼或 API 令牌。
artifactory.image_filters可選:要分析的倉庫和映象列表。

如果您未在 artifactory.image_filters 中指定任何倉庫,代理將對您的 Artifactory 例項中的所有映象執行映象分析。

以下程式碼片段顯示了一個示例配置:

{
  "agent_id": "acme-prod-agent",
  "docker": {
    "organization_name": "acme",
    "username": "mobythewhale",
    "pat": "dckr_pat__dsaCAs_xL3kNyupAa7dwO1alwg"
  },
  "artifactory": [
    {
      "base_url": "https://acme.jfrog.io",
      "username": "acmeagent",
      "password": "hayKMvFKkFp42RAwKz2K",
      "image_filters": [
        {
          "repository": "dev-local",
          "images": ["internal/repo1", "internal/repo2"]
        },
        {
          "repository": "prod-local",
          "images": ["staging/repo1", "prod/repo1"]
        }
      ]
    }
  ]
}

建立配置檔案並將其儲存在您計劃執行代理的伺服器上的某個位置。例如,/var/opt/artifactory-agent/config.json

執行代理

以下示例展示瞭如何使用 docker run 執行 Docker Scout Artifactory 代理。此命令會為之前建立的 JSON 配置檔案所在的目錄在容器內部建立繫結掛載點 /opt/artifactory-agent/data。請確保您使用的掛載路徑是包含 config.json 檔案的目錄。

重要提示

使用 Artifactory 代理映象的 v1 標籤。不要使用 latest 標籤,因為這可能會導致重大更改。

$ docker run \
  --mount type=bind,src=/var/opt/artifactory-agent,target=/opt/artifactory-agent/data \
  docker/artifactory-agent:v1

分析現有資料

預設情況下,代理會檢測並分析建立和更新的映象。如果您想使用代理分析預先存在的映象,可以使用回填模式 (backfill mode)。使用命令列選項 --backfill-from=TIME(其中 TIME 是 ISO 8601 格式的時間)以回填模式執行代理。如果您使用此選項,代理會分析從該時間到代理啟動時當前時間之間推送的所有映象,然後退出。

例如

$ docker run \
  --mount type=bind,src=/var/opt/artifactory-agent,target=/opt/artifactory-agent/data \
  docker/artifactory-agent:v1 --backfill-from=2022-04-10T10:00:00Z

多次執行回填時,代理不會分析已分析過的映象。要強制重新分析,請提供命令列標誌 --force

檢視分析結果

您可以在 Docker Scout 儀表盤中檢視映象分析結果。

  1. 前往 Docker Scout 儀表盤中的映象頁面

    此頁面顯示您的組織中已啟用 Docker Scout 的倉庫。

  2. 在列表中選擇映象。

  3. 選擇標籤。

選擇標籤後,您將進入該標籤的漏洞報告頁面。在此頁面上,您可以選擇檢視映象中的所有漏洞,或特定層中引入的漏洞。您還可以按嚴重程度以及是否有可用修復版本來過濾漏洞。

頁面選項