Anexar uma SBOM assinada a uma imagem de contêiner
Uma Lista de Materiais de Software (SBOM) é um manifesto de compilação que lista os componentes usados para construir um software. Um SBOM pode ser usado para rastrear a procedência de um software, incluindo imagens de contêiner, durante todo o seu ciclo de vida. Este artigo mostra como criar um SBOM para uma imagem de contêiner, assiná-lo e anexá-lo à imagem usando as ferramentas da CLI. Outras abordagens são possíveis, incluindo o uso de um pipeline de CI/CD para automatizar o processo.
Pré-requisitos
Antes de estar, certifique-se de ter o seguinte:
- Uma assinatura do Azure. Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
- A versão mais recente da CLI do Azure instalada e configurada para sua assinatura.
- Um Registro de Contêiner do Azure (ACR) existente em sua assinatura.
- CLI de notação instalada.
- CLI do ORAS instalada.
- sbom-tool instalado.
Inicie sessão no seu registo
Inicie sessão no seu ACR e obtenha o token de acesso para o seu registo. Por exemplo, os comandos a seguir usam a CLI do Azure para entrar no Registro e define o token de acesso desse Registro para a PASSWORD
variável de ambiente.
# 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)
Observação
O ACR e o ORAS dão suporte a várias opções de autenticação para usuários e automação do sistema. Este artigo usa uma identidade individual, com um token do Azure. Para obter mais opções de autenticação, consulte Autenticar com um registro de contêiner do Azure.
Criar e enviar por push uma imagem de contêiner
Use az acr build
para criar e enviar uma imagem de contêiner para o registro.
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
Entrar com a CLI de Notação
Use notation login
para entrar no registro.
Importante
Ao usar o token de acesso para seu ACR, você deve usar 00000000-0000-0000-0000-000000000000
como o nome de usuário.
export USER_NAME="00000000-0000-0000-0000-000000000000"
notation login -u $USER_NAME -p $PASSWORD $REGISTRY
Assine a imagem
Use notation sign
para assinar a imagem.
Importante
Você deve ter um certificado de assinatura e um par de chaves para assinar a imagem. Por exemplo, Criar, assinar e verificar imagens de contêiner usando o Tabelião e o Cofre de Chaves do Azure mostra como usar o Cofre de Chaves do Azure para criar um certificado de assinatura e um par de chaves.
notation sign $IMAGE
Use notation ls
para listar as assinaturas na imagem.
notation ls $IMAGE
A saída de exemplo a seguir mostra a assinatura na imagem.
<acr-name>.azurecr.io/net-monitor@sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
└── application/vnd.cncf.notary.signature
└── sha256:111222333444555666777888999000aaabbbcccdddeeefff1112223334445556
Criar um SBOM
Use sbom-tool
para criar um SBOM para a imagem. Por exemplo, os comandos a seguir criam um SBOM para a imagem e o armazenam no ./sbom
diretório.
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
Anexar o SBOM à imagem
Use oras attach
para anexar o SBOM à imagem. Por exemplo, o comando a seguir anexa o manifest.spdx.json
arquivo à imagem.
SBOM_FILE=$SBOM_DIR/_manifest/spdx_2.2/manifest.spdx.json
oras attach $IMAGE $SBOM_FILE --artifact-type example/sbom
Assinar a SBOM
Use oras discover
para obter o resumo para o SBOM.
oras discover $IMAGE -o tree
A saída de exemplo a seguir mostra resumos para a assinatura e a imagem.
$ oras discover $IMAGE -o tree
<acr-name>.azurecr.io/net-monitor@sha256:1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
├── example/sbom
│ └── sha256:fffeeedddcccbbbaaa000999888777666555444333222111fffeeedddcccbbba
└── application/vnd.cncf.notary.signature
└── sha256:111222333444555666777888999000aaabbbcccdddeeefff1112223334445556
Use notation sign
para assinar o SBOM usando o valor digest do SBOM do comando anterior.
SBOM=$REGISTRY/${REPO}@sha256:fffeeedddcccbbbaaa000999888777666555444333222111fffeeedddcccbbba
notation sign $SBOM
Use notation ls
para listar as assinaturas no SBOM.
notation ls $SBOM
O exemplo a seguir mostra a assinatura no SBOM.
$ notation ls $SBOM
<acr-name>.azurecr.io/net-monitor@sha256:fffeeedddcccbbbaaa000999888777666555444333222111fffeeedddcccbbba
└── application/vnd.cncf.notary.signature
└── sha256:fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321
Próximas etapas
Veja a visão geral de cada etapa para obter mais informações: