イメージを比較し、ベースイメージの脆弱性を無視する
前のステップでは、2 つの ubuntu
イメージを比較し、脆弱性の違いを確認しました。イメージを比較する際、ベースイメージから引き継がれた脆弱性ではなく、アプリケーションコードや依存関係によって導入された脆弱性に関心がある場合があります。trivy
を使用すると、指定したベースイメージに存在する脆弱性を無視することができます。
これを実証するために、まず ubuntu:20.04
をベースイメージとして使用し、単純なファイルを追加する簡単な Dockerfile を作成しましょう。
プロジェクトディレクトリに移動します。
cd ~/project
nano
を使用して Dockerfile
という名前のファイルを作成します。
nano Dockerfile
以下の内容を Dockerfile
に貼り付けます。
FROM ubuntu:20.04
RUN echo "This is a test file" >/app/test.txt
ファイルを保存し、nano
を終了します(Ctrl+X、Y、Enter)。
この Dockerfile は非常にシンプルです。ubuntu:20.04
イメージから始めて、/app
ディレクトリ内に test.txt
という名前のファイルを作成するコマンドを実行します。
ここで、この Dockerfile から Docker イメージをビルドしましょう。my-ubuntu-app:latest
というタグを付けます。
docker build -t my-ubuntu-app:latest .
docker build
コマンドは、Dockerfile からイメージをビルドします。-t my-ubuntu-app:latest
フラグは、イメージに my-ubuntu-app
という名前と latest
というタグを付けます。最後の .
は、Dockerfile が現在のディレクトリにあることを指定します。ビルドプロセスとイメージの正常な作成を示す出力が表示されるはずです。
これで、2 つのイメージができました。ubuntu:20.04
(ベースイメージ)と my-ubuntu-app:latest
(ベースイメージの上に構築されたイメージ)です。my-ubuntu-app:latest
と ubuntu:20.04
を比較し、ubuntu:20.04
にすでに存在する脆弱性を無視することができます。これにより、Dockerfile
の変更によって導入された脆弱性のみが表示されます。
これを実現するために、trivy image
コマンドに --ignore-base
フラグを使用します。
trivy image --ignore-base --diff-image ubuntu:20.04 my-ubuntu-app:latest
このコマンドは、my-ubuntu-app:latest
と ubuntu:20.04
を比較しますが、my-ubuntu-app:latest
に存在し、ubuntu:20.04
には存在しない脆弱性のみを報告します。この Dockerfile では単純なファイルを追加しただけで、新しいパッケージをインストールしていないため、前のステップの出力と比較して、報告される新しい脆弱性はほとんどないか、まったくないはずです。これは、--ignore-base
がアプリケーションレイヤーのセキュリティへの影響に焦点を当てるのにどのように役立つかを示しています。