Docker Scout 快速入門
Docker Scout 會分析映像檔內容,並產生關於其檢測到的套件與漏洞的詳細報告。它可以為您提供關於如何修復映像檔分析所發現問題的建議。
本指南將使用一個帶有漏洞的容器映像檔,向您展示如何使用 Docker Scout 來識別並修復漏洞、隨時間比較映像檔版本,以及與您的團隊分享結果。
步驟 1:設定
此範例專案包含一個帶有漏洞的 Node.js 應用程式,您可以依照步驟進行練習。
複製其儲存庫
$ git clone https://github.com/docker/scout-demo-service.git進入目錄
$ cd scout-demo-service確保您已登入您的 Docker 帳號,可以透過執行
docker login指令或使用 Docker Desktop 登入。建立映像檔並將其推送至
<ORG_NAME>/scout-demo:v1,其中<ORG_NAME>是您推送到的 Docker Hub 命名空間。$ docker build --push -t <ORG_NAME>/scout-demo:v1 .
步驟 2:啟用 Docker Scout
Docker Scout 預設會分析所有本機映像檔。若要分析遠端儲存庫中的映像檔,您需要先啟用它。您可以從 Docker Hub、Docker Scout 儀表板以及 CLI 完成此操作。在概覽指南中了解如何操作。
使用
docker login指令登入您的 Docker 帳號,或使用 Docker Desktop 中的登入 (Sign in) 按鈕。接下來,使用
docker scout enroll指令為您的組織註冊 Docker Scout。$ docker scout enroll <ORG_NAME>使用
docker scout repo enable指令為您的映像檔儲存庫啟用 Docker Scout。$ docker scout repo enable --org <ORG_NAME> <ORG_NAME>/scout-demo
步驟 3:分析映像檔漏洞
建置完成後,使用 docker scout CLI 指令查看 Docker Scout 檢測到的漏洞。
本指南的範例應用程式使用了帶有漏洞的 Express 版本。以下指令顯示了您剛建置的映像檔中影響 Express 的所有 CVE:
$ docker scout cves --only-package express
Docker Scout 預設會分析您最近建置的映像檔,因此在這種情況下無需指定映像檔名稱。
在 CLI 參考文件 中了解更多關於 docker scout cves 指令的資訊。
步驟 4:修復應用程式漏洞
經過 Docker Scout 分析後,發現了一個高風險漏洞 CVE-2022-24999,這是由過時的 express 套件版本所導致的。
Express 套件的 4.17.3 版本修復了此漏洞。因此,將 package.json 檔案更新至新版本:
"dependencies": {
- "express": "4.17.1"
+ "express": "4.17.3"
}
使用新的標籤 (tag) 重新建置映像檔,並將其推送到您的 Docker Hub 儲存庫:
$ docker build --push -t <ORG_NAME>/scout-demo:v2 .
再次執行 docker scout 指令,並驗證該 HIGH 風險的 CVE-2022-24999 已不復存在。
$ docker scout cves --only-package express
✓ Provenance obtained from attestation
✓ Image stored for indexing
✓ Indexed 79 packages
✓ No vulnerable package detected
## Overview
│ Analyzed Image
────────────────────┼───────────────────────────────────────────────────
Target │ mobywhale/scout-demo:v2
digest │ ef68417b2866
platform │ linux/arm64
provenance │ https://github.com/docker/scout-demo-service.git
│ 7c3a06793fc8f97961b4a40c73e0f7ed85501857
vulnerabilities │ 0C 0H 0M 0L
size │ 19 MB
packages │ 1
## Packages and Vulnerabilities
No vulnerable packages detected
步驟 5:評估政策合規性
雖然檢查特定套件的漏洞很有用,但這並不是改善供應鏈作業最有效的方法。
Docker Scout 也支援政策評估,這是一個用於檢測和修復映像檔問題的更高級概念。政策是一組可自訂的規則,讓組織能夠追蹤映像檔是否符合其供應鏈需求。
由於政策規則是針對每個組織所設定的,因此您必須指定您要根據哪個組織的政策進行評估。使用 docker scout config 指令來設定您的 Docker 組織。
$ docker scout config organization <ORG_NAME>
✓ Successfully set organization to <ORG_NAME>
現在您可以執行 quickview 指令,取得您剛建置的映像檔合規狀態概覽。映像檔會根據預設的政策設定進行評估。您將看到類似以下的輸出:
$ docker scout quickview
...
Policy status FAILED (2/6 policies met, 2 missing data)
Status │ Policy │ Results
─────────┼──────────────────────────────────────────────┼──────────────────────────────
✓ │ No copyleft licenses │ 0 packages
! │ Default non-root user │
! │ No fixable critical or high vulnerabilities │ 2C 16H 0M 0L
✓ │ No high-profile vulnerabilities │ 0C 0H 0M 0L
? │ No outdated base images │ No data
? │ Supply chain attestations │ No data
狀態欄中的驚嘆號表示違反政策。問號表示沒有足夠的元數據 (metadata) 來完成評估。勾選符號表示合規。
步驟 6:提升合規性
quickview 指令的輸出顯示還有改進空間。由於映像檔缺乏來源證明 (provenance) 和 SBOM 證明,部分政策無法成功評估 (No data)。該映像檔在某些評估項目中也未通過檢查。
政策評估不僅僅是檢查漏洞。以 Default non-root user(預設非 root 使用者)政策為例,此政策透過確保映像檔預設不以 root 超級使用者身分執行,來協助提升執行階段的安全性。
為了處理此政策違規,請編輯 Dockerfile 並加入 USER 指令,指定一個非 root 使用者:
CMD ["node","/app/app.js"]
EXPOSE 3000
+ USER appuser
此外,為了獲得更完整的政策評估結果,您的映像檔應附加 SBOM 和來源證明。Docker Scout 會使用來源證明來判斷映像檔是如何建置的,以便提供更好的評估結果。
在您建置帶有證明的映像檔之前,必須先啟用 containerd 映像檔儲存區(或使用 docker-container 驅動程式建立自訂建置器)。傳統的映像檔儲存區不支援資訊清單列表 (manifest lists),而這正是將來源證明附加到映像檔的方式。
開啟 Docker Desktop 中的 設定 (Settings)。在 一般 (General) 區段下,確保已勾選 Use containerd for pulling and storing images 選項,然後選擇 套用 (Apply)。請注意,變更映像檔儲存區會暫時隱藏非作用中儲存區的映像檔和容器,直到您切換回來為止。
啟用 containerd 映像檔儲存區後,使用新的 v3 標籤重新建置映像檔。這一次,加入 --provenance=true 和 --sbom=true 旗標。
$ docker build --provenance=true --sbom=true --push -t <ORG_NAME>/scout-demo:v3 .
步驟 7:在儀表板中查看
在推送帶有證明的更新版映像檔後,現在是時候透過另一個視角來查看結果了:Docker Scout 儀表板。
- 開啟 Docker Scout 儀表板。
- 使用您的 Docker 帳戶登入。
- 在左側導覽中選擇 Images。
映像檔頁面會列出您已啟用 Scout 的儲存庫。
選擇您要查看的映像檔所在列(點擊該列中除了連結以外的任何位置),以開啟 Image details 側邊欄。
側邊欄會顯示儲存庫最後一個推送標籤的合規概覽。
注意如果尚未出現政策結果,請嘗試重新整理頁面。如果是您第一次使用 Docker Scout 儀表板,結果可能需要幾分鐘才會顯示。
回到映像檔清單並選擇映像檔版本(可在 Most recent image 欄位中找到)。然後,在頁面右上角選擇 Update base image 按鈕以檢查政策。
此政策會檢查您使用的基礎映像檔是否為最新版本。目前它的狀態為不合規,因為範例映像檔使用了舊版本的 alpine 作為基礎映像檔。
關閉 Recommended fixes for base image 視窗。在政策列表中,選擇政策名稱旁邊的 View fixes 按鈕,以查看關於違規的詳細資訊以及如何處理的建議。
在這種情況下,建議的操作是啟用 Docker Scout 的 GitHub 整合,這有助於自動保持您的基礎映像檔為最新狀態。
提示您無法為本指南使用的示範應用程式啟用此整合。歡迎將程式碼推送到您擁有的 GitHub 儲存庫,並在那裡試用該整合!
總結
這份快速入門指南僅觸及了 Docker Scout 支援軟體供應鏈管理的部分方式。
- 如何為您的儲存庫啟用 Docker Scout
- 分析映像檔漏洞
- 政策與合規性
- 修復漏洞並提升合規性
下一步是什麼?
還有更多內容等您去探索,從第三方整合、政策自訂,到即時執行環境監控。
請參閱以下章節: