次の方法で共有


署名済み SBOM をコンテナー イメージにアタッチする

ソフトウェア部品表 (SBOM) は、ソフトウェアのビルドに使用されるコンポーネントを一覧表示するビルド マニフェストです。 SBOM を使用すると、ライフサイクル全体を通じて、コンテナー イメージを含むソフトウェアの一部の実績を追跡できます。 この記事では、コンテナー イメージの SBOM を作成し、署名し、CLI ツールを使用してイメージにアタッチする方法について説明します。 CI/CD パイプラインを使用してプロセスを自動化するなど、他のアプローチも可能です。

前提条件

作業を開始する前に、次の内容を確認してください。

レジストリにサインインする

ACR にサインインし、レジストリのアクセス トークンを取得します。 たとえば、次のコマンドでは、Azure CLI を使用してレジストリにサインインし、そのレジストリのアクセス トークンを環境変数に PASSWORD 設定します。

# Update the ACR_NAME variable with the name of your registry
ACR_NAME=<acr-name>
PASSWORD=$(az acr login --name $ACR_NAME --expose-token --output tsv --query accessToken)

Note

ACR と ORAS では、ユーザーとシステム自動化のための複数の認証オプションがサポートされています。 この記事では、Azure トークンを使って、個々の ID を使います。 その他の認証オプションについては、「Azure コンテナー レジストリを使用した認証」を参照してください

コンテナー イメージをビルドしてプッシュする

コンテナー イメージをビルドしてレジストリにプッシュするために使用 az acr build します。

REPO=net-monitor
TAG=v1
REGISTRY=$ACR_NAME.azurecr.io
IMAGE=$REGISTRY/${REPO}:$TAG
IMAGE_SOURCE=https://github.com/wabbit-networks/net-monitor.git#main

az acr build -r $ACR_NAME -t $IMAGE $IMAGE_SOURCE

Notation CLI を使用してサインインする

レジストリにサインインするために使用 notation login します。

重要

ACR のアクセス トークンを使用する場合は、ユーザー名として使用 00000000-0000-0000-0000-000000000000 する必要があります。

export USER_NAME="00000000-0000-0000-0000-000000000000"
notation login -u $USER_NAME -p $PASSWORD $REGISTRY

イメージに署名する

イメージに署名するために使用 notation sign します。

重要

イメージに署名するには、署名証明書とキーのペアが必要です。 たとえば、 Notary と Azure Key Vault を使用してコンテナー イメージをビルド、署名、検証すると、Azure Key Vault を使用して署名証明書とキー ペアを作成する方法が示されます。

notation sign $IMAGE

イメージの署名を一覧表示するために使用 notation ls します。

notation ls $IMAGE

次の出力例は、画像の署名を示しています。

<acr-name>.azurecr.io/net-monitor@sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
└── application/vnd.cncf.notary.signature
    └── sha256:111222333444555666777888999000aaabbbcccdddeeefff1112223334445556

SBOM を作成する

イメージの SBOM を作成するために使用 sbom-tool します。 たとえば、次のコマンドは、イメージの SBOM を作成し、ディレクトリに ./sbom 格納します。

SBOM_DIR=./sbom
PACKAGE_SUPPLIER=MyCompany
PACKAGE_NAME=TestProject
PACKAGE_VERSION=1.0.0
mkdir $SBOM_DIR
sbom-tool generate -m $SBOM_DIR -di $IMAGE -ps $PACKAGE_SUPPLIER -pn $PACKAGE_NAME -pv $PACKAGE_VERSION

SBOM をイメージにアタッチする

SBOM をイメージにアタッチするために使用 oras attach します。 たとえば、次のコマンドを実行すると、ファイルが manifest.spdx.json イメージにアタッチされます。

SBOM_FILE=$SBOM_DIR/_manifest/spdx_2.2/manifest.spdx.json
oras attach $IMAGE $SBOM_FILE --artifact-type example/sbom

SBOM に署名する

SBOM のダイジェストを取得するために使用 oras discover します。

oras discover $IMAGE -o tree

次の出力例は、署名とイメージの両方のダイジェストを示しています。

$ oras discover $IMAGE -o tree

<acr-name>.azurecr.io/net-monitor@sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
├── example/sbom
│   └── sha256:fffeeedddcccbbbaaa000999888777666555444333222111fffeeedddcccbbba
└── application/vnd.cncf.notary.signature
    └── sha256:111222333444555666777888999000aaabbbcccdddeeefff1112223334445556

前のコマンドの SBOM のダイジェスト値を使用して SBOM に署名するために使用 notation sign します。

SBOM=$REGISTRY/${REPO}@sha256:fffeeedddcccbbbaaa000999888777666555444333222111fffeeedddcccbbba
notation sign $SBOM

SBOM の署名を一覧表示するために使用 notation ls します。

notation ls $SBOM

次の例は、SBOM の署名を示しています。

$ notation ls $SBOM

<acr-name>.azurecr.io/net-monitor@sha256:fffeeedddcccbbbaaa000999888777666555444333222111fffeeedddcccbbba
└── application/vnd.cncf.notary.signature
    └── sha256:fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321

次のステップ

詳細については、各ステージの概要を参照してください。