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

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

日本仮想化技術がお届けする「とことんDevOps」では、DevOpsに関する技術情報や、日々のDevOps業務の中での検証結果、TipsなどDevOpsのお役立ち情報をお届けします。
主なテーマ: DevOps、CI/CD、コンテナ開発、IaCなど

開催予定の勉強会

読者登録と各種SNSのフォローもよろしくお願いいたします。

DockerでSBOMを試してみた

今年の4月にリリースされたDocker Desktop 4.7.0でSBOMが普通に使えるようになり、Docker DesktopユーザーはDocker単体でSBOMの調査やSBOMファイル作成が可能になっていました。

www.docker.com

筆者はこの機能はDocker Desktopでしか使えないのかなと勘違いしていたのですが、Dockerのドキュメント をよくみたら、これ自身はDocker Pluginだと書かれていたのでLinuxでも動きそうだと先ほどようやく気がつきました。

このブログでも何度か取り上げたTrivyを使ってSBOMを取り扱う方法もありますが、Docker単体で利用できるならそれに越したことはありません。ということで早速試してみました。

インストール

SBOMのDockerプラグインはGitHubのDockerリポジトリー で開発されています。 ここにインストール方法が書かれているのですが、実行してみたら「Dockerがインストールされていない」とメッセージが出てきました。

# curl -sSfL https://raw.githubusercontent.com/docker/sbom-cli-plugin/main/install.sh | sh -s --
... docker is not installed; refusing to install to '~/.docker/cli-plugins".

Issueリストを見たら、Issueとプルリクを見つけました。ざっくり説明すると、現状は~/.dockerディレクトリーの有無でDockerがインストールされているかいないかを判断しているようです。

というわけで、mkdirコマンドでディレクトリーを作ったら動作しました。

~# mkdir ~/.docker
~# curl -sSfL https://raw.githubusercontent.com/docker/sbom-cli-plugin/main/install.sh | sh -s --
[info] fetching release script for tag='v0.6.1' 
[info] using release tag='v0.6.1' version='0.6.1' os='linux' arch='amd64' 
[info] installed /root/.docker/cli-plugins/docker-sbom 

インストール後はdocker --helpに表示されていたので、Dockerデーモンの再起動をすることなくすぐに使えるようです。

~# docker --help
Usage:  docker [OPTIONS] COMMAND
...
Management Commands:
...
  sbom*       View the packaged-based Software Bill Of Materials (SBOM) for an image (Anchore Inc., 0.6.1)
  scan*       Docker Scan (Docker Inc., v0.21.0)
...

触ってみる

インストール後はコンテナーイメージに含まれるバージョンを出力したり...

~# docker sbom neo4j:4.4.5
Syft v0.46.3
 ✔ Loaded image            
 ✔ Parsed image            
 ✔ Cataloged packages      [385 packages]
NAME                                VERSION                                    TYPE         
CodePointIM                         11.0.16                                    java-archive  
FastInfoset                         1.2.16                                     java-archive  
FileChooserDemo                     11.0.16                                    java-archive  
Font2DTest                          11.0.16                                    java-archive  
HdrHistogram                        2.1.9                                      java-archive  
J2Ddemo                             11.0.16                                    java-archive  
Metalworks                          11.0.16                                    java-archive  
Notepad                             11.0.16                                    java-archive  
...

SBOMメトリックを特定の形式で出力できるようです。

~# docker sbom --format spdx-json --output sbom.json neo4j:4.4.5
Syft v0.46.3
 ✔ Loaded image            
 ✔ Parsed image            
 ✔ Cataloged packages      [385 packages]

~# cat sbom.json
{
 "SPDXID": "SPDXRef-DOCUMENT",
 "name": "neo4j-4.4.5",
 "spdxVersion": "SPDX-2.2",
 "creationInfo": {
  "created": "2022-12-05T01:41:20.86505171Z",
  "creators": [
   "Organization: Anchore, Inc",
   "Tool: syft-v0.46.3"
  ],
  "licenseListVersion": "3.17"
 },
 "dataLicense": "CC0-1.0",
 "documentNamespace": "https://anchore.com/syft/image/neo4j-4.4.5-a9730bcd-d612-4282-a79c-d6974d3619d5",
 "packages": [
  {
   "SPDXID": "SPDXRef-8c7c2b46cfbdc7c2",
   "name": "CodePointIM",
   "licenseConcluded": "NONE",
   "checksums": [
    {
     "algorithm": "SHA1",
     "checksumValue": "1cf799374a682beba2766530c227b632f17a412e"
    }

現時点では日本ではまだまだSBOMが必須ではないものの、いずれ必要になってくる可能性もあることから注目しておきたいところです。 DevOps環境でも「コンテナ」は重要な要素であり、今後はコンテナイメージの脆弱性スキャンだけでなく、コンテナイメージに含まれるライブラリーの様々な情報(ライブラリーのバージョン、ライセンス)にも注目していきたいところです。