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. 構建映象並將其推送到 <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 執行此操作。在概述指南中瞭解如何操作

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

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

    $ docker scout enroll <ORG_NAME>
    
  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 分析後,發現了一個高危漏洞 CVE-2022-24999,這是由過時版本的 express 包引起的。

express 包的 4.17.3 版本修復了該漏洞。因此,請將 package.json 檔案更新到新版本

   "dependencies": {
-    "express": "4.17.1"
+    "express": "4.17.3"
   }

使用新標籤重新構建映象並將其推送到您的 Docker Hub 倉庫

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

再次執行 docker scout 命令,並驗證高危漏洞 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

狀態列中的感嘆號表示違反了策略。問號表示沒有足夠的元資料來完成評估。勾號表示合規。

步驟 6:改進合規性

quickview 命令的輸出顯示還有改進的空間。一些策略無法成功評估(No data),因為映象缺少來源和 SBOM 證明。該映象在一些評估中也未能透過檢查。

策略評估不僅僅是檢查漏洞。以Default non-root user(預設非 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 儀表板。

  1. 開啟 Docker Scout 儀表板
  2. 使用您的 Docker 帳戶登入。
  3. 在左側導航欄中選擇映象

映象頁面列出了您已啟用 Scout 的倉庫。

在您想檢視的映象行中,除了連結以外的任何位置單擊,以開啟映象詳情側邊欄。

側邊欄顯示了倉庫最後推送的標籤的合規性概覽。

注意

如果策略結果尚未出現,請嘗試重新整理頁面。如果您是第一次使用 Docker Scout 儀表板,結果可能需要幾分鐘才能出現。

返回到映象列表,並選擇最新映象列中的映象版本。然後,在頁面右上角,選擇更新基礎映象按鈕以檢查策略。

該策略檢查您使用的基礎映象是否為最新版本。它目前處於不合規狀態,因為示例映象使用了一箇舊版本的 alpine 作為基礎映象。

關閉基礎映象的推薦修復模式視窗。在策略列表中,選擇策略名稱旁邊的檢視修復方案按鈕,以獲取有關違規的詳細資訊以及如何解決它的建議。

在這種情況下,推薦的操作是啟用 Docker Scout 的 GitHub 整合,這有助於自動保持您的基礎映象為最新版本。

提示

您無法為本指南中使用的演示應用啟用此整合。歡迎將程式碼推送到您自己的 GitHub 倉庫,並在那裡嘗試該整合!

摘要

本快速入門指南僅初步介紹了 Docker Scout 支援軟體供應鏈管理的幾種方式

  • 如何為您的倉庫啟用 Docker Scout
  • 分析映象的漏洞
  • 策略與合規
  • 修復漏洞並提高合規性

下一步是什麼?

還有更多內容等待探索,從第三方整合到策略定製,再到即時監控執行時環境。

檢視以下部分