Dela via


Signera containeravbildningar med notation och betrodd signering (förhandsversion)

Den här artikeln är en del av en serie om att säkerställa integritet och äkthet för containeravbildningar och andra OCI-artefakter (Open Container Initiative). För den fullständiga bilden börjar du med översikten, som förklarar varför signering är viktigt och beskriver de olika scenarierna.

Den här artikeln fokuserar på signering med hjälp av notarieprojektverktyg, notation och betrodd signering:

  • Vad du lär dig här: Så här använder du kommandoradsgränssnittet Notation (CLI) för att signera artefakter med hjälp av betrodd signering.
  • Där den passar: Betrodd signering är ett alternativ till Azure Key Vault. Även om Key Vault ger organisationer fullständig kontroll över certifikats livscykelhantering, erbjuder Trusted Signing en smidig signeringsupplevelse med automatisk livscykelhantering av certifikat och kortlivade certifikat.
  • Varför det spelar roll: Betrodd signering förenklar utvecklarupplevelsen och ger en stark identitetsgaranti. Det hjälper teamen att minska driftskomplexiteten utan att äventyra säkerheten.

Förutsättningar

Innan du kan signera och verifiera containeravbildningar med notation och betrodd signering måste du konfigurera nödvändiga Azure-resurser och installera de verktyg som krävs. Det här avsnittet beskriver hur du förbereder Azure Container Registry, konfigurerar betrodd signering och konfigurerar Azure CLI som utvecklingsmiljö.

Anmärkning

För närvarande är betrodd signering endast tillgängligt för organisationer baserade i USA och Kanada som har en verifierbar historik på tre år eller mer.

Förbereda containeravbildningar i Azure Container Registry

  1. Skapa eller använd ett containerregister för att lagra containeravbildningar, OCI-artefakter och signaturer.
  2. Skicka eller använd en containerbild i ditt containerregister.

Konfigurera betrodda signering

Konfigurera ett konto för betrodd signering och certifikatprofil i din Azure-prenumeration.

Certifikatprofilen måste innehålla land/region (C), delstat eller provins (ST eller S) och organisation (O) i certifikatämnet. Notarieprojektspecifikationen kräver dessa fält.

Konfigurera Azure CLI

Installera Azure CLI eller använd Azure Cloud Shell.

Installera plugin-programmet Notation CLI och Trusted Signing

Den här guiden kör kommandon på Linux AMD64 och Windows som exempel.

  1. Installera 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/bin
    

    Andra plattformar finns i installationsguiden för Notation.

  2. Installera plugin-programmet För betrodd signering:

    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 538b497be0f0b4c6ced99eceb2be16f1c4b8e3d7c451357a52aeeca6751ccb44
    

    Hitta den senaste plugin-url:en och kontrollsumman på versionssidan.

  3. Kontrollera installationen av plugin-programmet:

    notation plugin ls
    

    Exempel på utdata:

    NAME                   DESCRIPTION                                            VERSION   CAPABILITIES                ERROR
    azure-trustedsigning   Sign OCI artifacts using the Trusted Signing Service   0.3.0     [SIGNATURE_GENERATOR.RAW]   <nil>
    

Konfigurera miljövariabler

Ange följande miljövariabler för användning i efterföljande kommandon. Ersätt platshållarna med dina faktiska värden.

Du hittar de värden som krävs i Azure-portalen:

  • Om du vill ha information om ett betrott signeringskonto går du till ditt konto och väljer sedan Översikt.
  • För information om certifikatprofil går du till ditt konto och väljer sedanObjektcertifikatprofiler>.
# 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

Logga in på Azure

Använd Azure CLI för att logga in med din användaridentitet:

az login
USER_ID=$(az ad signed-in-user show --query id -o tsv)

Anmärkning

Den här guiden visar inloggning med ett användarkonto. Andra identitetsalternativ, inklusive en hanterad identitet, finns i Autentisera till Azure med hjälp av Azure CLI.

Tilldela behörigheter för Azure Container Registry och betrodd signering

Ge din identitet de roller som krävs för att få åtkomst till Container Registry:

  • För register som är aktiverade med attributbaserad åtkomstkontroll (ABAC) tilldelar du:
    • Container Registry Repository Reader
    • Container Registry Repository Writer
  • För icke-ABAC-register tilldelar du:
    • AcrPull
    • AcrPush
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"

Tilldela rollen Trusted Signing Certificate Profile Signer till din identitet så att du kan signera med hjälp av betrodd signering:

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"

Signera en behållaravbildning

# 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

Förklaring av nyckelflaggor:

  • --signature-format cose: Använder COSE-format (CBOR Object Signing and Encryption) för signaturer.
  • --timestamp-url: Använder den tidsstämplingsserver som betrodd signering stöder.
  • --plugin-config: Skickar konfigurationen till plugin-programmet Betrodd signering.

Lista signerade bilder och signaturer:

notation ls $IMAGE

Exempel på utdata:

myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55
└── application/vnd.cncf.notary.signature
    └── sha256:d3a4c9fbc17e27b19a0b28e7b6a33f2c0f541dbdf8d2e5e8d0d79a835e8a76f2a

Verifiera en containerbild

  1. Ladda ned och lägg till rotcertifikat:

    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
    

  1. Skapa en JSON-fil för förtroendeprincip:

    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"
                ]
            }
        ]
    }
    EOF
    

    Importera och kontrollera policyn:

    notation policy import trustpolicy.json
    notation policy show
    

  1. Verifiera bilden:

    notation verify $IMAGE
    

    Exempel på utdata:

    Successfully verified signature for myregistry.azurecr.io/myrepo@sha256:5d0bf1e8f5a0c74a4c22d8c0f962a7cfa06a4f9d8423b196e482df8af23b5d55
    

    Om verifieringen misslyckas kontrollerar du att din förtroendeprincip och dina certifikat är korrekt konfigurerade.