Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fa parte di una serie su come garantire l'integrità e l'autenticità delle immagini del contenitore e altri artefatti OCI (Open Container Initiative). Per un quadro completo, iniziare con la panoramica, che spiega perché la firma è importante e descrive i vari scenari.
Questo articolo è incentrato sulla firma usando gli strumenti Notary Project, Notation e Trusted Signing:
- Cosa si apprenderà qui: Come usare l'interfaccia della riga di comando Notation per firmare gli artefatti tramite Trusted Signing.
- Dove si adatta: la firma attendibile è un'alternativa ad Azure Key Vault. Anche se Key Vault offre alle organizzazioni il controllo completo della gestione del ciclo di vita dei certificati, la firma attendibile offre un'esperienza di firma semplificata con la gestione del ciclo di vita dei certificati zero-touch e i certificati di breve durata.
- Perché è importante: la firma attendibile semplifica l'esperienza di sviluppo offrendo al tempo stesso un'elevata garanzia di identità. Aiuta i team a ridurre la complessità operativa senza compromettere la sicurezza.
Prerequisiti
Prima di poter firmare e verificare le immagini del contenitore usando notazione e firma attendibile, è necessario configurare le risorse di Azure necessarie e installare gli strumenti necessari. Questa sezione illustra come preparare Registro Azure Container, configurare la firma attendibile e configurare l'interfaccia della riga di comando di Azure come ambiente di sviluppo.
Annotazioni
Attualmente, la firma attendibile è disponibile solo per le organizzazioni che si trovano negli Stati Uniti e in Canada che hanno una cronologia verificabile di tre anni o più.
Preparare le immagini del contenitore in Registro Azure Container
- Creare o utilizzare un registro di contenitori per archiviare immagini di contenitori, artefatti OCI e firme.
- Eseguire il push o utilizzare un'immagine del contenitore nel registro contenitori.
Configurare la firma attendibile
Configurare un account di firma attendibile e un profilo certificato nella sottoscrizione di Azure.
Il profilo certificato deve includere paese/area geografica (C), stato o provincia (ST o S) e organizzazione (O) nell'oggetto del certificato. La specificazione Notary Project richiede questi campi.
Configurare l'interfaccia della riga di comando di Azure
Installare l'interfaccia della riga di comando di Azure o usare Azure Cloud Shell.
Installare il CLI di Notation e il plug-in di firma attendibile
Questa guida esegue comandi in Linux AMD64 e Windows come esempi.
Installare Notation CLI v1.3.2:
curl -Lo notation.tar.gz https://github.com/notaryproject/notation/releases/download/v1.3.2/notation_1.3.2_linux_amd64.tar.gz # Validate the checksum EXPECTED_SHA256SUM="e1a0f060308086bf8020b2d31defb7c5348f133ca0dba6a1a7820ef3cbb6dfe5" echo "$EXPECTED_SHA256SUM notation.tar.gz" | sha256sum -c - # Continue if sha256sum matches tar xvzf notation.tar.gz cp ./notation /usr/local/binPer altre piattaforme, vedere la guida all'installazione della notazione.
Installare il plug-in di firma affidabile:
notation plugin install --url "https://github.com/Azure/trustedsigning-notation-plugin/releases/download/v1.0.0-beta.1/notation-azure-trustedsigning_1.0.0-beta.1_linux_amd64.tar.gz" --sha256sum 538b497be0f0b4c6ced99eceb2be16f1c4b8e3d7c451357a52aeeca6751ccb44Per trovare l'URL del plug-in più recente e il checksum, visita la pagina di rilascio.
Verificare l'installazione del plug-in:
Output di esempio:
NAME DESCRIPTION VERSION CAPABILITIES ERROR azure-trustedsigning Sign OCI artifacts using the Trusted Signing Service 0.3.0 [SIGNATURE_GENERATOR.RAW] <nil>
Configurare le variabili di ambiente
Impostare le variabili di ambiente seguenti da usare nei comandi successivi. Sostituisci i segnaposto con i valori effettivi.
È possibile trovare i valori obbligatori nel portale di Azure:
- Per Informazioni sull'account di Firma attendibile, accedere all'account, quindi selezionare Panoramica.
- Per informazioni sul profilo certificati, passare all'account e quindi selezionare Oggetti>Profili certificato.
# Trusted Signing environment variables
TS_SUB_ID="<subscription-id>"
TS_ACCT_RG=<ts-account-resource-group>
TS_ACCT_NAME=<ts-account-name>
TS_ACCT_URL=<ts-account-url>
TS_CERT_PROFILE=<ts-cert-profile>
TS_CERT_SUBJECT=<ts-cert-subject>
TS_SIGNING_ROOT_CERT="https://www.microsoft.com/pkiops/certs/Microsoft%20Enterprise%20Identity%20Verification%20Root%20Certificate%20Authority%202020.crt"
TS_TSA_URL="http://timestamp.acs.microsoft.com/"
TS_TSA_ROOT_CERT="http://www.microsoft.com/pkiops/certs/microsoft%20identity%20verification%20root%20certificate%20authority%202020.crt"
# Azure Container Registry and image environment variables
ACR_SUB_ID="<acr-subscription-id>"
ACR_RG=<acr-resource-group>
ACR_NAME=<registry-name>
ACR_LOGIN_SERVER=$ACR_NAME.azurecr.io
REPOSITORY=<repository>
TAG=<tag>
IMAGE=$ACR_LOGIN_SERVER/${REPOSITORY}:$TAG
Accedere ad Azure
Usare l'interfaccia della riga di comando di Azure per accedere con l'identità utente:
Annotazioni
Questa guida illustra l'accesso con un account utente. Per altre opzioni di identità, tra cui un'identità gestita, vedere Eseguire l'autenticazione ad Azure usando l'interfaccia della riga di comando di Azure.
Assegnare le autorizzazioni per Registro Azure Container e firma attendibile
Assegnare all'identità i ruoli necessari per accedere al Registro Container:
- Per i registri abilitati con il controllo degli accessi in base all'attributo assegnare:
Container Registry Repository ReaderContainer Registry Repository Writer
- Per i registri non ABAC, assegnare:
AcrPullAcrPush
az role assignment create --role "Container Registry Repository Reader" --assignee $USER_ID --scope "/subscriptions/$ACR_SUB_ID/resourceGroups/$ACR_RG/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"
az role assignment create --role "Container Registry Repository Writer" --assignee $USER_ID --scope "/subscriptions/$ACR_SUB_ID/resourceGroups/$ACR_RG/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"
Assegnare il ruolo Trusted Signing Certificate Profile Signer all'identità per poter firmare usando Firma attendibile:
az role assignment create --assignee $USER_ID --role "Trusted Signing Certificate Profile Signer" --scope "/subscriptions/$TS_SUB_ID/resourceGroups/$TS_ACCT_RG/providers/Microsoft.CodeSigning/codeSigningAccounts/$TS_ACCT_NAME/certificateProfiles/$TS_CERT_PROFILE"
Firmare un'immagine del contenitore
# Authenticate to Azure Container Registry
az acr login --name $ACR_NAME
# Download the timestamping root certificate
curl -o msft-tsa-root-certificate-authority-2020.crt $TS_TSA_ROOT_CERT
# Sign the image
notation sign --signature-format cose --timestamp-url $TS_TSA_URL --timestamp-root-cert "msft-tsa-root-certificate-authority-2020.crt" --id $TS_CERT_PROFILE --plugin azure-trustedsigning --plugin-config accountName=$TS_ACCT_NAME --plugin-config baseUrl=$TS_ACCT_URL --plugin-config certProfile=$TS_CERT_PROFILE $IMAGE
Spiegazione dei flag chiave:
-
--signature-format cose: usa il formato CBOR Object Signing and Encryption (COSE) per le firme. -
--timestamp-url: usa il server di timestamp supportato dalla firma attendibile. -
--plugin-config: passa la configurazione al plug-in Firma attendibile.
Elencare immagini e firme firmate:
Output di esempio:
myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55
└── application/vnd.cncf.notary.signature
└── sha256:d3a4c9fbc17e27b19a0b28e7b6a33f2c0f541dbdf8d2e5e8d0d79a835e8a76f2a
Verificare un'immagine del contenitore
Scaricare e aggiungere i certificati radice:
curl -o msft-root-certificate-authority-2020.crt $TS_SIGNING_ROOT_CERT SIGNING_TRUST_STORE="myRootCerts" notation cert add --type ca --store $SIGNING_TRUST_STORE msft-root-certificate-authority-2020.crt curl -o msft-tsa-root-certificate-authority-2020.crt $TS_TSA_ROOT_CERT TSA_TRUST_STORE="myTsaRootCerts" notation cert add -t tsa -s $TSA_TRUST_STORE msft-tsa-root-certificate-authority-2020.crt notation cert ls
Creare un file JSON dei criteri di attendibilità:
cat <<EOF > trustpolicy.json { "version": "1.0", "trustPolicies": [ { "name": "myPolicy", "registryScopes": [ "$ACR_LOGIN_SERVER/$REPOSITORY" ], "signatureVerification": { "level" : "strict" }, "trustStores": [ "ca:$SIGNING_TRUST_STORE", "tsa:$TSA_TRUST_STORE" ], "trustedIdentities": [ "x509.subject: $TS_CERT_SUBJECT" ] } ] } EOFImportare e controllare la politica:
notation policy import trustpolicy.json notation policy show
Verificare l'immagine:
Output di esempio:
Successfully verified signature for myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55Se la verifica ha esito negativo, assicurarsi che i criteri di attendibilità e i certificati siano configurati correttamente.
Contenuti correlati
- Per la firma di un flusso di lavoro GitHub, fare riferimento a Firmare immagini del container in un flusso di lavoro GitHub utilizzando Notation e Trusted Signing (anteprima).
- Per la verifica in un flusso di lavoro GitHub, vedere Verificare le immagini dei contenitori in un flusso di lavoro GitHub usando notazione e firma attendibile (anteprima).
- Per la verifica su Azure Kubernetes Service (AKS), vedere Verificare le firme dell'immagine del contenitore con Ratify e Azure Policy.