とことんDevOps | 日本仮想化技術のDevOps技術情報メディア

DevOpsに関連する技術情報を幅広く提供していきます。

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど
読者登録と各種SNSのフォローもよろしくお願いいたします。

Docker Desktop 4.18で機能強化されたDocker Scoutを触ってみる

Docker Desktop 4.18がリリースされてこのバージョンでDocker Scoutが使えるようになったようなので、早速触ってみました。

Docker Desktop 4.18の主な変更点の一つであるDocker Scoutは、Dockerでコンテナイメージのスキャンをしてイメージの脆弱性をあぶり出す機能です。Docker Desktopで使う場合はGUIとコマンドラインベースのCLIコマンドとして機能を実装しており、一つ前のDocker Desktop 4.17からCLI周りが機能強化されています。

例えばDockerに存在するイメージをDocker DesktopのGUIから閲覧すると、次のように表示されます。

4.17で追加された右上の「Recommended fixed」を選択して現れるウィンドウでは、現在のコンテナイメージで利用するベースイメージの問題点の洗い出し、現在メンテナンスされているベースイメージのついての確認、ベースイメージを更新することによるメリットなどを確認できるようです。

イメージのリンクをクリックすると、より詳細に脆弱性情報を閲覧できるImage Vulnerability Databaseのページを表示できます(ここは4.18での改善の一つです)。 メンテナンスが行き届いたイメージの場合は次のように何も表示されませんが、

イメージによっては次のような感じで表示されます。

Docker ScanとDocker Scout

このような機能は以前のバージョンのDocker Desktopでもあったと思うのですが、Docker Scoutは旧来のDocker Scanに変わる機能になっているようで、両者の違いはバックエンドで使っているエンジンの違いのようです。

実際旧来の機能ベースのDocker Scanコマンドを実行してみると、Snykのエンジンを使ってコンテナイメージのセキュリティ脆弱性をスキャンする機能であることがわかります。おおっと、サービス終了までもう時間がないですね。

% docker scan


  │ The  docker scan  command is deprecated and will no longer be supported after April 13th, 2023.
  │ Run the  docker scout cves  command to continue to get vulnerabilities on your images or install the
  │ Snyk CLI.
  │ See https://www.docker.com/products/docker-scout for more details.


Docker Scan relies upon access to Snyk, a third party provider, do you consent to proceed using Snyk? (y/N)

一方、Docker Scoutは独自エンジンを使っているようです。Docker Desktopで使った限りでは以前のものと同じように使えるので困ることはないはずです。Docker Desktop 4.17ではcvesとversionオプションだけが実装されていましたが、4.18ではいくつか増えていました。 これらはGUIで利用できる機能をCLIに実装した形だと思われます。

% docker sc...
scan   -- Docker Scan (Docker Inc., v0.25.0)
scout  -- Command line tool for Docker Scout (Docker Inc., v0.9.0)

% docker scout

Usage:  docker scout COMMAND

Command line tool for Docker Scout

Commands:
  compare         [early preview] Compare two images and display differences
  cves            Display CVEs identified in a software artifact
  quickview       Quick overview of an image
  recommendations Display available base image updates and remediation recommendations
  version         Show Docker Scout version information

Run 'docker scout COMMAND --help' for more information on a command.

例えばわざと古いバージョンのイメージでスキャンすると、こんなに多くの既知の脆弱性を確認できます(とはいえ多すぎるので、省略しますが)。ここで確認できる情報はDocker DesktopのGUIからも確認できます。

% docker scout cves nginx:1.18-alpine
    ✓ SBOM of image already cached, 50 packages indexed
    ✗ Detected 8 vulnerable packages with a total of 29 vulnerabilities

   1C     2H     3M     2L  curl 7.67.0-r3
pkg:apk/alpine/curl@7.67.0-r3?os_name=alpine&os_version=3.11

    ✗ CRITICAL CVE-2021-22945 [Double Free]
      https://dso.docker.com/cve/CVE-2021-22945
      Affected range : <7.79.0-r0
      Fixed version  : 7.79.0-r0
      CVSS Score     : 9.1
      CVSS Vector    : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H

    ✗ HIGH CVE-2021-22946 [Cleartext Transmission of Sensitive Information]
      https://dso.docker.com/cve/CVE-2021-22946
      Affected range : <7.79.0-r0
      Fixed version  : 7.79.0-r0
      CVSS Score     : 7.5
      CVSS Vector    : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

    ✗ HIGH CVE-2021-22926 [Improper Certificate Validation]
      https://dso.docker.com/cve/CVE-2021-22926
      Affected range : <7.67.0-r5
      Fixed version  : 7.67.0-r5
      CVSS Score     : 7.5
      CVSS Vector    : CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
...
The image contains 8 packages with one or more vulnerability for a total of 29 vulnerabilities
  LOW      | 2
  MEDIUM   | 8
  HIGH     | 15
  CRITICAL | 4

Docker Scoutに追加されたコマンドを触ってみる

せっかくなので、そのほか4.18で実装されたオプションも使ってみることにしましょう。 docker scout quickviewはイメージ脆弱性を概要でまとめてくれるようです。これ好き。

docker scout recommendationsを実行すると以下のGUIで確認できる内容と同じ情報を...

次のようにコマンドラインで確認できるというもののようです。

% docker scout recommendations nginx:1.18-alpine
    ✓ SBOM of image already cached, 50 packages indexed

Recommended fixes for image  nginx:1.18-alpine

  Base image is  alpine:3.11

  Name            │  3.11.11
  Digest          │  sha256:852ed96728fdb6b5fefaa8a0a7b0fbee60bd988c549a325c1b102923de431261
  Vulnerabilities │    3C    10H     1M     0L
  Pushed          │ 2 years ago
  Size            │ 2.7 MB
  Packages        │ 18
  OS              │ 3.11.11



Refresh base image
  Rebuild the image using a newer base image version. Updating this may result in breaking changes.

  ✓ This image version is up to date.


Change base image
  Select the tag you would like to see recommendations for. The list displays new recommended tags in descending order, where the top results are rated as most suitable.


            Tag           │                             Details                              │   Pushed   │       Vulnerabilities
──────────────────────────┼──────────────────────────────────────────────────────────────────┼────────────┼──────────────────────────────
   3.17                   │ Benefits:                                                        │ 1 week ago │    0C     0H     0M     0L
  Tag is preferred tag    │ • Minor OS version update                                       │            │    -3    -10     -1
  Also known as:          │ • Tag is preferred tag                                          │            │
  • 3.17.3               │ • Tag was pushed more recently                                  │            │
  • 3                    │ • Image has similar size                                        │            │
  • latest               │ • Tag is latest                                                 │            │
                          │ • Image introduces no new vulnerability but removes 14          │            │
                          │ • Image contains similar number of packages                     │            │
                          │ • 3.17 is the fifth most popular tag with 152K pulls per month  │            │
                          │                                                                  │            │
                          │ Image details:                                                   │            │
                          │ • Size: 3.3 MB                                                  │            │
                          │ • OS: 3.17.3                                                    │            │

...

Docker ScanはSnykのAPIを使っている都合上、API利用に制限がありました。Docker ScoutはDockerのサービスのひとつなのでその点安心して使うことができます。 しかしDocker Scoutについて懸念点がないわけではありません。次のサイトがDocker Scoutのプロジェクトサイトなのですが、現在はEarly access Product なので特に無料でフル機能を使えていますが、将来的にはプライスプランが提示されるようです。

現行はDockerのライセンスとは別にする方針のようにみえます。これがDocker Pro,Team, Businessとかのライセンスに統合されれば嬉しいんですけどね。今後の動きに注目かもしれません。

10/5追記

10/4のDocker公式ブログによると、Docker ScoutがGAを迎えたようです。

www.docker.com

気になるライセンスについてですが、こちらによるとローカルイメージのスキャンについてはリミットなしで使うことができるそうですね。標準機能でここまで使えるのはなかなか良いなと思います。

www.docker.com

おまけ

Snykのエンジンを使ったコンテナイメージのスキャンについては、Docker Extensionsが提供されているので、それを使う形に今後はなると思います。docker scanコマンドについては今後のアップデートで削除されるのかなと思います。

Docker Desktop 4.18にアップデートしたら、Docker DesktopにDisk UsageというDocker Extensionsをおすすめされたので入れてみました。Dockerイメージのキャッシュとかゴミなどを簡単にクリーンアップしてくれるものみたいです。docker system prune -adocker image prune -aなどのコマンドでやっていたことがボタンポチでできてかなり良かったです。

なお、Docker Desktop 4.18ではバージョン1.25.4のKubernetesクラスターを実行できる機能が用意されています。コンテナベースのアプリケーション開発に便利そうです。また次のDocker公式ブログ記事の機能「Container File Explorer」にあるように、コンテナの中のファイルの確認が可能になっています。これまでは色々なサードパーティのツールを使ってしかできなかったことが、次々Docker Desktopに実装されていますね。

www.docker.com