Docker Scout は、イメージ コンテンツを分析して、パッケージと検出した脆弱性の詳細なレポートを生成します。イメージ分析によって見つかった問題を修正する方法を提案することができます。
このガイドでは、Docker Scout を使用してコンテナー イメージの脆弱性を特定して修正し、イメージのバージョンを経時的に比較し、その結果をチームと共有する方法を紹介します。
次のビデオは、報告された脆弱性を修正するため Docker Scout を使用するエンドツーエンドのワークフローを示します。
サンプル プロジェクトには、脆弱性のある Node.js アプリケーションが含まれています。これを使用して以下の手順を実行します。
リポジトリをクローンします。
$ git clone https://github.com/docker/scout-demo-service.git
ディレクトリに移動します。
$ cd scout-demo-service
イメージをビルドして、プッシュする組織に一致する名前を付けて、「v1」というタグを付けます。
$ docker build -t <org-name>/scout-demo:v1 .
リポジトリを作成して、Docker Hub にプッシュします。
$ docker push <org-name>/scout-demo:v1
重要
プッシュする前に、Docker CLI または Docker Desktop にログインしていることを確認してください。
Docker Scout は、デフォルトではすべてのローカル イメージを分析します。リモート リポジトリにあるイメージを分析するには、まず Docker Scout を有効にする必要があります。これは、Docker Hub、Docker Scout Dashboard、および CLI から行うことができます。手順については、こちらを参照してください。
docker login
コマンド、または Docker Desktop の [Sign in] ボタンを使用して、Docker アカウントにサインインします。
Docker CLI で docker scout repo enable
コマンドを使用して、既存のリポジトリで分析を有効にします。
$ docker scout repo enable --org <org-name><org-name>/scout-demo
ビルド後、Docker Desktop または docker scout
CLI コマンドを使用して、Docker Scout によって検出された脆弱性を確認できます。
Docker Desktop の [Images] ビューでイメージの名前を選択すると、イメージ レイヤー ビューが表示されます。イメージの階層セクションで、脆弱性が見つかったレイヤーとその詳細を確認できます。
レイヤー 5 を選択して、そのレイヤーで見つかった脆弱性に注目します。
express 4.17.1 と CVE ID (この例では「CVE-2022-24999」) の横にある三角のアイコンをクリックすると、脆弱性の詳細を確認できます。
Docker CLI でも同様の結果を確認できます。
$ docker scout cves <org-name>/scout-demo:v1
Docker Scout は、複数のソースから継続的に脆弱性データを取り込み、照合することで、脆弱性データベースを作成および維持しています。これらのソースには、よく知られているパッケージ リポジトリや信頼できるセキュリティ トラッカーが含まれます。詳細は、「アドバイザリー データベース」を参照してください。
ヒント
CLI コマンド scout cves
で結果をフィルター処理できます。
Docker Scout が提案する修正は、脆弱な express のバージョンを 4.17.3 以降に更新することです。
package.json
ファイルを新しいパッケージ バージョンで更新します。
… "dependencies": { "express": "4.17.3" … }
イメージをリビルドして、新しいバージョン タグを付けます。
$ docker build -t <org-name>/scout-demo:v2 .
新しいバージョン タグを使用して、Docker Hub の同じリポジトリにイメージをプッシュします。
$ docker push <org-name>/scout-demo:v2
Docker Desktop、Docker Scout Dashboard、または CLI でイメージの最新タグを表示すると、脆弱性が修正されていることが確認できます。
Docker Scout は、アプリケーションの脆弱性を特定するだけでなく、イメージのベースとして使用しているイメージの問題を特定して修正するのにも役立ちます。
Docker Scout Dashboard のイメージ レイヤー ビューで [Recommended fixes] ボタンをクリックすると、提案が表示されます。
[Recommendations for base image] オプションを選択します。表示されるダイアログの [Change base image] タブで、使用するベース イメージの新しいバージョンを選択し、Dockerfile
に提案をコピーします。
新しいタグでイメージをリビルドします。
$ docker build -t <org-name>/scout-demo:v3 .
新しいタグを使用して、Docker Hub にイメージをプッシュします。
$ docker push <org-name>/scout-demo:v3
Docker Desktop または Docker Scout Dashboard で新しいイメージ タグを選択すると、ベース イメージが更新され、多くの脆弱性が排除されたことが確認できます。
Docker CLI コマンドラインでも同様の結果を確認できます。
$ docker scout cves <org-name>/scout-demo:v3
Docker Scout Dashboard で組織のイメージの脆弱性に関する情報を共有および確認できます。
すべての組織メンバーは、統合されたコンテナー レジストリからすべてのイメージの概要を確認し、修正のアドバイスを得ることができます。これは、セキュリティ、コンプライアンス、および運用のチーム メンバーが、どの脆弱性と問題に注目すべきかを知るのに役立ちます。
ヒント
複数の組織に所属している場合は、右上のドロップダウンから正しい組織を選択してください。
イメージに複数のタグがある場合、Docker Scout CLI と Docker Scout Dashboard で、同じイメージの異なるタグの脆弱性とパッケージの違いを比較できます。
Docker Scout Dashboard の [Images] リストで比較するリポジトリを選択します。この例では、scout-demo を選択します。
以前のステップでプッシュしたタグから 2 つ (たとえば v1 と v3) を選択し、[Compare images] を選択します。
[Image comparison] ビューに 2 つのタグの違いが表示されます。ページの上部には、脆弱性とベース イメージ タグの違いを含む 2 つのタグの要約が表示されます。
ページ下部には、2 つのタグのパッケージと脆弱性の違いが表示されます。express 行では、バージョンが 4.17.1 から 4.17.3 に変更されたことが確認できます。[Vulnerabilities] タブに切り替えて、2 つのタグの脆弱性の違いを確認します。v3 タグでは、「CVE-2022-24999」がなくなっていることが分かります。
scout compare
CLI コマンドでも同様の結果を確認できます。
$ docker scout compare --to <org-name>/scout-demo:v1 <org-name>/scout-demo:v3