共用方式為


將已簽署的 SBOM 附加至容器映像

軟體材料帳單 (SBOM) 是組建指令清單,列出用來建置軟體的元件。 SBOM 可用來追蹤整個生命週期中的軟體來源,包括容器映像。 本文說明如何使用 CLI 工具建立容器映像的 SBOM、簽署它,並將它附加至映像。 其他方法可能,包括使用 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)

注意

ACR 和 ORAS 支援使用者和系統自動化的多個驗證選項。 本文使用個別身分識別,並使用 Azure 令牌。 如需更多驗證選項,請參閱 使用 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

使用表示法 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 建置、簽署和驗證容器映射,金鑰保存庫 示範如何使用 Azure 金鑰保存庫 來建立簽署憑證和密鑰組。

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-tool 建立映像的 SBOM。 例如,下列命令會建立映像的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 附加至映像

使用 oras attach 將SBOM附加至映像。 例如,下列命令會將 manifest.spdx.json 檔案附加至映像。

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

簽署 SBOM

使用 oras discover 取得 SBOM 的摘要。

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

使用 notation sign 從上一個命令使用 SBOM 的摘要值簽署 SBOM。

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

用來 notation ls 列出 SBOM 上的簽章。

notation ls $SBOM

下列範例顯示 SBOM 上的簽章。

$ notation ls $SBOM

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

後續步驟

如需詳細資訊,請參閱每個階段的概觀: