Freigeben über


Signieren von Containerimages mithilfe von Notation und vertrauenswürdiger Signatur (Vorschau)

Dieser Artikel ist Teil einer Reihe zur Sicherstellung der Integrität und Authentizität von Containerimages und anderen Open Container Initiative (OCI)-Artefakten. Für einen vollständigen Überblick beginnen Sie mit der Übersicht, in der erklärt wird, warum das Signieren wichtig ist und die verschiedenen Szenarien skizziert werden.

Dieser Artikel konzentriert sich auf das Signieren mithilfe von Notarprojekttools, Notation und vertrauenswürdiger Signatur:

  • Was Sie hier erfahren: Erfahren Sie, wie Sie die Befehlszeilenschnittstelle (Notation Command-Line Interface, CLI) verwenden, um Artefakte mithilfe des Vertrauenswürdigen Signierens zu signieren.
  • Wo es passt: Die vertrauenswürdige Signatur ist eine Alternative zu Azure Key Vault. Obwohl Key Vault Organisationen die vollständige Kontrolle über die Verwaltung des Zertifikatlebenszyklus bietet, bietet vertrauenswürdige Signatur eine optimierte Signaturerfahrung mit der Zero-Touch-Zertifikatlebenszyklusverwaltung und kurzlebigen Zertifikaten.
  • Warum dies wichtig ist: Die vertrauenswürdige Signatur vereinfacht die Entwicklererfahrung und bietet gleichzeitig eine starke Identitätsüberprüfung. Es hilft Teams, die Betriebskomplexität zu reduzieren, ohne die Sicherheit zu beeinträchtigen.

Voraussetzungen

Bevor Sie Containerimages mit Notation und vertrauenswürdiger Signatur signieren und überprüfen können, müssen Sie die erforderlichen Azure-Ressourcen einrichten und die erforderlichen Tools installieren. Dieser Abschnitt führt Sie durch die Vorbereitung der Azure-Containerregistrierung, das Konfigurieren der vertrauenswürdigen Signatur und das Einrichten der Azure CLI als Entwicklungsumgebung.

Hinweis

Derzeit ist Trusted Signing nur für Organisationen verfügbar, die in den USA und Kanada ansässig sind und über eine nachweisbare Historie von drei Jahren oder mehr verfügen.

Vorbereiten von Containerimages in der Azure-Containerregistrierung

  1. Erstellen oder verwenden Sie eine Containerregistrierung zum Speichern von Containerimages, OCI-Artefakten und Signaturen.
  2. Pushen oder Verwenden eines Containerimages in Ihrer Containerregistrierung.

Einrichten der vertrauenswürdigen Signatur

Richten Sie ein vertrauenswürdiges Signaturkonto und ein Zertifikatprofil in Ihrem Azure-Abonnement ein.

Ihr Zertifikatprofil muss das Land/die Region (C), das Bundesland oder die Provinz (ST oder S) und die Organisation (O) im Zertifikatsbetreff enthalten. Für die Spezifikation des Notarprojekts sind diese Felder erforderlich.

Einrichten der Azure CLI

Installieren Sie die Azure CLI, oder verwenden Sie Azure Cloud Shell.

Installieren Sie das Notation CLI und das Plug-in für vertrauenswürdiges Signieren

In diesem Handbuch werden Befehle unter Linux AMD64 und Windows als Beispiele ausgeführt.

  1. Notation CLI v1.3.2 installieren:

    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
    

    Weitere Plattformen finden Sie im Notation-Installationshandbuch.

  2. Installieren Sie das Plug-In "Vertrauenswürdige Signatur":

    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
    

    Suchen Sie die neueste Plug-in-URL und Prüfsumme auf der Releaseseite.

  3. Überprüfen der Plug-In-Installation:

    notation plugin ls
    

    Beispielausgabe:

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

Umgebungsvariablen konfigurieren

Legen Sie die folgenden Umgebungsvariablen für die Verwendung in nachfolgenden Befehlen fest. Ersetzen Sie Platzhalter durch die tatsächlichen Werte.

Die erforderlichen Werte finden Sie im Azure-Portal:

  • Wechseln Sie für Informationen zum vertrauenswürdigen Signaturkonto zu Ihrem Konto, und wählen Sie dann "Übersicht" aus.
  • Für Zertifikatprofilinformationen wechseln Sie zu Ihrem Konto, und wählen Sie dann Objekte>Zertifikatsprofile aus.
# 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

Anmelden bei Azure

Verwenden Sie die Azure CLI, um sich mit Ihrer Benutzeridentität anzumelden:

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

Hinweis

In diesem Handbuch wird die Anmeldung mit einem Benutzerkonto veranschaulicht. Weitere Identitätsoptionen, einschließlich einer verwalteten Identität, finden Sie unter Authentifizieren bei Azure mithilfe der Azure CLI.

Zuweisen von Berechtigungen für die Azure-Containerregistrierung und die vertrauenswürdige Signatur

Gewähren Sie Ihrer Identität die erforderlichen Rollen für den Zugriff auf die Containerregistrierung:

  • Weisen Sie für Registrierungen, die mit attributbasierter Zugriffssteuerung (ABAC) aktiviert sind, Folgendes zu:
    • Container Registry Repository Reader
    • Container Registry Repository Writer
  • Weisen Sie für Nicht-ABAC-Registrierungen Folgendes zu:
    • 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"

Weisen Sie Ihrer Identität die Rolle Trusted Signing Certificate Profile Signer zu, damit Sie sich mit vertrauenswürdiger Signatur signieren können:

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"

Signieren eines Containerabbilds

# 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

Erläuterte Schlüsselkennzeichnungen:

  • --signature-format cose: Verwendet das CBOR-Objektsignatur- und -Verschlüsselungsformat (COSE) für Signaturen.
  • --timestamp-url: Verwendet den Zeitstempelserver, den Trusted Signing unterstützt.
  • --plugin-config: Übergibt die Konfiguration an das vertrauenswürdige Signatur-Plug-In.

Signierte Bilder und Signaturen auflisten:

notation ls $IMAGE

Beispielausgabe:

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

Überprüfen eines Containerimages

  1. Herunterladen und Hinzufügen von Stammzertifikaten:

    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. Erstellen Sie eine JSON-Datei für vertrauensbasierte Richtlinien:

    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
    

    Importieren und überprüfen Sie die Richtlinie:

    notation policy import trustpolicy.json
    notation policy show
    

  1. Überprüfen Sie das Bild:

    notation verify $IMAGE
    

    Beispielausgabe:

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

    Wenn die Überprüfung fehlschlägt, stellen Sie sicher, dass Ihre Vertrauensrichtlinie und Zertifikate ordnungsgemäß konfiguriert sind.