Docker Scout 快速入門

Docker Scout 會分析映像檔內容,並產生它偵測到的套件和弱點的詳細報告。它可以為您提供如何補救映像檔分析發現問題的建議。

本指南以一個有弱點的容器映像檔為例,向您展示如何使用 Docker Scout 來識別和修正弱點、比較不同版本的映像檔,以及與您的團隊分享結果。

步驟 1:設定

此範例專案 包含一個有弱點的 Node.js 應用程式,您可以用它來跟著操作。

  1. 複製其儲存庫

    $ git clone https://github.com/docker/scout-demo-service.git
    
  2. 移至目錄

    $ cd scout-demo-service
    
  3. 確定您已登入 Docker 帳戶,方法是執行 docker login 指令或使用 Docker Desktop 登入。

  4. 建置映像檔並將其推送到 <組織名稱>/scout-demo:v1,其中 <組織名稱> 是您推送到的 Docker Hub 命名空間。

    $ docker build --push -t <ORG_NAME>/scout-demo:v1 .
    

步驟 2:啟用 Docker Scout

Docker Scout 預設會分析所有本機映像檔。要分析遠端儲存庫中的映像檔,您需要先啟用它。您可以從 Docker Hub、Docker Scout 儀表板和 CLI 執行此操作。在概觀指南中瞭解如何操作

  1. 使用 docker login 指令登入您的 Docker 帳戶,或使用 Docker Desktop 中的**登入**按鈕。

  2. 接下來,使用 docker scout enroll 指令,將您的組織註冊到 Docker Scout。

    $ docker scout enroll <ORG_NAME>
        ✓ Successfully enrolled organization <ORG_NAME> with Docker Scout Free
    
  3. 使用 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 建議的修正方法是將底層有弱點的 express 版本更新至 4.17.3 或更高版本。

  1. 使用新的套件版本更新 package.json 檔案。

       "dependencies": {
    -    "express": "4.17.1"
    +    "express": "4.17.3"
       }
    
  2. 使用新的標籤重建映像檔,並將其推送到您的 Docker Hub 儲存庫

    $ docker build --push -t <ORG_NAME>/scout-demo:v2 .
    

現在,您可以透過 Docker Desktop、Docker Scout Dashboard 或 CLI 查看映像檔的最新標籤,確認您已修復漏洞。

$ 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

狀態欄中的驚嘆號表示違反了策略。問號表示沒有足夠的元數據來完成評估。勾號表示符合規定。

步驟 6:改善合規性

quickview 命令的輸出顯示還有改進的空間。有些策略無法成功評估(無資料),因為映像檔缺少來源和 SBOM 證明。映像檔也未通過一些評估的檢查。

策略評估不僅僅是檢查漏洞。以「預設非 root 使用者」策略為例。此策略有助於改善執行時期安全性,確保映像檔預設不會以 root 超級使用者身分執行。

要解決此策略違規問題,請編輯 Dockerfile,加入 USER 指令,指定一個非 root 使用者。

  CMD ["node","/app/app.js"]
  EXPOSE 3000
+ USER appuser

此外,為了獲得更完整的策略評估結果,您的映像檔應該附加 SBOM 和來源證明。Docker Scout 使用來源證明來判斷映像檔的建置方式,以便提供更好的評估結果。

在建置具有證明的映像檔之前,您必須啟用 containerd 映像檔儲存區(或使用 docker-container 驅動程式建立自訂建置器)。傳統映像檔儲存區不支援清單檔,而這是來源證明附加到映像檔的方式。

在 Docker Desktop 中開啟「設定」。在「一般」區段下,確定已勾選「使用 containerd 來提取和儲存映像檔」選項。請注意,變更映像檔儲存區會暫時隱藏非使用中映像檔儲存區的映像檔和容器,直到您切換回來為止。

啟用 containerd 映像檔儲存區後,使用新的 v3 標籤重建映像檔。這次,加入 --provenance=true--sbom=true 旗標。

$ docker build --provenance=true --sbom=true --push -t <ORG_NAME>/scout-demo:v3 .

步驟 7:在儀表板中檢視

推送具有證明的更新映像檔後,就可以透過不同的視角來檢視結果:Docker Scout Dashboard。

  1. 開啟 Docker Scout Dashboard
  2. 使用您的 Docker 帳戶登入。
  3. 在左側導覽列中選取「映像檔」。

映像檔頁面會列出您已啟用 Scout 的存放庫。在清單中選取映像檔以開啟「映像檔詳細資訊」側邊欄。側邊欄會顯示存放庫最後推送標籤的合規性概覽。

注意事項

如果策略結果尚未顯示,請嘗試重新整理頁面。如果您是第一次使用 Docker Scout Dashboard,結果可能需要幾分鐘才會顯示。

檢查「最新基礎映像檔」策略。此策略會檢查您使用的基礎映像檔是否為最新版本。目前狀態為不合規,因為範例映像檔使用舊版 alpine 作為基礎映像檔。

選取策略名稱旁邊的「檢視修復」按鈕,以瞭解違規的詳細資訊,以及如何解決問題的建議。在本例中,建議的動作是啟用 Docker Scout 的 GitHub 整合,這有助於自動保持您的基礎映像檔為最新版本。

提示

您無法在本指南中使用的示範應用程式啟用此整合。您可以將程式碼推送至您擁有的 GitHub 存放庫,並在那裡試用此整合!

摘要

本快速入門指南簡要介紹了 Docker Scout 支援軟體供應鏈管理的一些方法。

  • 如何為您的存放庫啟用 Docker Scout
  • 分析映像檔中的漏洞
  • 策略與合規性
  • 修復漏洞並提升合規性

接下來是什麼?

還有更多值得探索的功能,從第三方整合到策略自訂,以及即時監控執行時期環境。

查看以下章節