今年の4月にリリースされたDocker Desktop 4.7.0でSBOMが普通に使えるようになり、Docker DesktopユーザーはDocker単体でSBOMの調査やSBOMファイル作成が可能になっていました。
筆者はこの機能は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がインストールされているかいないかを判断しているようです。
- https://github.com/docker/sbom-cli-plugin/issues/25
- https://github.com/docker/sbom-cli-plugin/pull/28
というわけで、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環境でも「コンテナ」は重要な要素であり、今後はコンテナイメージの脆弱性スキャンだけでなく、コンテナイメージに含まれるライブラリーの様々な情報(ライブラリーのバージョン、ライセンス)にも注目していきたいところです。