將已簽署的 SBOM 附加至容器映像
軟體材料帳單 (SBOM) 是組建指令清單,列出用來建置軟體的元件。 SBOM 可用來追蹤整個生命週期中的軟體來源,包括容器映像。 本文說明如何使用 CLI 工具建立容器映像的 SBOM、簽署它,並將它附加至映像。 其他方法可能,包括使用 CI/CD 管線將程式自動化。
必要條件
在進行之前,請確定您有下列專案:
- Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。
- 為訂用帳戶安裝並設定最新版的 Azure CLI 。
- 訂用帳戶中現有的 Azure Container Registry (ACR)。
- 已安裝表示法 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)
注意
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
後續步驟
如需詳細資訊,請參閱每個階段的概觀: