將 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 以查詢新映象來工作。當找到新映象時,它會執行以下步驟:
- 從 Artifactory 拉取映象
- 分析映象
- 將分析結果上傳到 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_name | Docker 組織的名稱。 |
docker.username | Docker 組織中管理員使用者的使用者名稱。 |
docker.pat | 具有讀寫許可權的管理員使用者的個人訪問令牌 (PAT)。 |
artifactory.base_url | Artifactory 例項的基礎 URL。 |
artifactory.username | 代理將使用的具有讀取許可權的 Artifactory 使用者的使用者名稱。 |
artifactory.password | Artifactory 使用者的密碼或 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 儀表盤中檢視映象分析結果。
前往 Docker Scout 儀表盤中的映象頁面。
此頁面顯示您的組織中已啟用 Docker Scout 的倉庫。
在列表中選擇映象。
選擇標籤。
選擇標籤後,您將進入該標籤的漏洞報告頁面。在此頁面上,您可以選擇檢視映象中的所有漏洞,或特定層中引入的漏洞。您還可以按嚴重程度以及是否有可用修復版本來過濾漏洞。