署名済み SBOM をコンテナー イメージにアタッチする
ソフトウェア部品表 (SBOM) は、ソフトウェアのビルドに使用されるコンポーネントを一覧表示するビルド マニフェストです。 SBOM を使用すると、ライフサイクル全体を通じて、コンテナー イメージを含むソフトウェアの一部の実績を追跡できます。 この記事では、コンテナー イメージの SBOM を作成し、署名し、CLI ツールを使用してイメージにアタッチする方法について説明します。 CI/CD パイプラインを使用してプロセスを自動化するなど、他のアプローチも可能です。
前提条件
作業を開始する前に、次の内容を確認してください。
- Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
- サブスクリプション用に インストールおよび構成された最新バージョンの Azure CLI 。
- サブスクリプション内の既存の Azure Container Registry (ACR)。
- Notation CLI がインストールされています。
- ORAS CLI がインストールされています。
- sbom-tool がインストールされています。
レジストリにサインインする
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
次のステップ
詳細については、各ステージの概要を参照してください。