将签名的 SBOM 附加到容器映像
软件材料清单(SBOM)是一个生成清单,列出用于生成软件的组件。 SBOM 可用于跟踪整个生命周期内一段软件(包括容器映像)的出处。 本文介绍如何使用 CLI 工具为容器映像创建 SBOM、对其进行签名并将其附加到映像。 可以采用其他方法,包括使用 CI/CD 管道自动执行该过程。
先决条件
在进行之前,请确保具有以下各项:
- Azure 订阅。 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- 为订阅安装和配置最新版本的 Azure CLI 。
- 订阅中的现有Azure 容器注册表(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
后续步骤
有关详细信息,请参阅每个阶段的概述: