Delen via


Containerinstallatiekopieën ondertekenen met Notatie en Azure Key Vault met behulp van een door een CA uitgegeven certificaat

Het ondertekenen en verifiëren van containerinstallatiekopieën met een certificaat dat is uitgegeven door een vertrouwde certificeringsinstantie (CA) is een waardevolle beveiligingspraktijk. Deze beveiligingsmaatregel helpt u bij het op verantwoorde wijze identificeren, autoriseren en valideren van de identiteit van zowel de uitgever van de containerinstallatiekopie als de containerinstallatiekopie zelf. De vertrouwde certificeringsinstanties (CA's), zoals GlobalSign, DigiCert en anderen, spelen een cruciale rol bij de validatie van de identiteit van een gebruiker of organisatie, het handhaven van de beveiliging van digitale certificaten en het intrekken van het certificaat onmiddellijk na elk risico of misbruik.

Hier volgen enkele essentiële onderdelen waarmee u containerinstallatiekopieën kunt ondertekenen en verifiëren met een certificaat dat is uitgegeven door een vertrouwde CERTIFICERINGsinstantie:

  • De notatie is een opensource-toeleveringsketenbeveiligingsprogramma dat is ontwikkeld door de Notary Project-community en wordt ondersteund door Microsoft, dat ondersteuning biedt voor het ondertekenen en verifiëren van containerinstallatiekopieën en andere artefacten.
  • De Azure Key Vault (AKV), een cloudservice voor het beheren van cryptografische sleutels, geheimen en certificaten, helpt u ervoor te zorgen dat u een certificaat veilig opslaat en beheert met een ondertekeningssleutel.
  • De AKV-invoegtoepassing Notation azure-kv, de extensie van Notation gebruikt de sleutels die zijn opgeslagen in Azure Key Vault voor het ondertekenen en verifiëren van de digitale handtekeningen van containerinstallatiekopieën en artefacten.
  • Met azure Container Registry (ACR) kunt u deze handtekeningen toevoegen aan de ondertekende installatiekopieën en kunt u deze containerinstallatiekopieën opslaan en beheren.

Wanneer u de afbeelding verifieert, wordt de handtekening gebruikt om de integriteit van de afbeelding en de identiteit van de ondertekenaar te valideren. Dit helpt ervoor te zorgen dat de containerinstallatiekopieën niet worden gemanipuleerd en afkomstig zijn van een vertrouwde bron.

In dit artikel:

  • De notatie-CLI en DE AKV-invoegtoepassing installeren
  • Een certificaat maken of importeren dat is uitgegeven door een CA in AKV
  • Een containerinstallatiekopieën bouwen en pushen met ACR-taak
  • Een containerinstallatiekopie ondertekenen met de Notation CLI en de AKV-invoegtoepassing
  • Een handtekening voor een containerinstallatiekopieën controleren met de Notatie-CLI
  • Tijdstempel

Vereisten

  • Een Azure Container Registry maken of gebruiken voor het opslaan van containerinstallatiekopieën en handtekeningen
  • Een Azure Key Vault maken of gebruiken .
  • De nieuwste Azure CLI installeren en configureren of opdrachten uitvoeren in Azure Cloud Shell

Notitie

U wordt aangeraden alleen een nieuwe Azure Key Vault te maken voor het opslaan van certificaten.

De notatie-CLI en DE AKV-invoegtoepassing installeren

  1. Installeer Notation v1.2.0 in een Linux amd64-omgeving. Volg de installatiehandleiding voor notatie om het pakket voor andere omgevingen te downloaden.

    # Download, extract and install
    curl -Lo notation.tar.gz https://github.com/notaryproject/notation/releases/download/v1.2.0/notation_1.2.0_linux_amd64.tar.gz
    tar xvzf notation.tar.gz
    
    # Copy the notation cli to the desired bin directory in your PATH, for example
    cp ./notation /usr/local/bin
    
  2. Installeer de invoegtoepassing azure-kv Notation Azure Key Vault v1.2.0 in een Linux amd64-omgeving.

    Notitie

    De URL en SHA256-controlesom voor de Azure Key Vault-invoegtoepassing notatie vindt u op de releasepagina van de invoegtoepassing.

    notation plugin install --url https://github.com/Azure/notation-azure-kv/releases/download/v1.2.0/notation-azure-kv_1.2.0_linux_amd64.tar.gz --sha256sum 06bb5198af31ce11b08c4557ae4c2cbfb09878dfa6b637b7407ebc2d57b87b34
    
  3. Vermeld de beschikbare invoegtoepassingen en controleer of de azure-kv invoegtoepassing met versie 1.2.0 is opgenomen in de lijst.

    notation plugin ls
    

Omgevingsvariabelen configureren

Notitie

In deze handleiding worden omgevingsvariabelen gebruikt voor het gemak bij het configureren van de AKV en ACR. Werk de waarden van deze omgevingsvariabelen voor uw specifieke resources bij.

  1. Omgevingsvariabelen configureren voor AKV en certificaten

    AKV_SUB_ID=myAkvSubscriptionId
    AKV_RG=myAkvResourceGroup
    AKV_NAME=myakv 
    
    # Name of the certificate created or imported in AKV 
    CERT_NAME=wabbit-networks-io 
    
    # X.509 certificate subject
    CERT_SUBJECT="CN=wabbit-networks.io,O=Notation,L=Seattle,ST=WA,C=US"
    
  2. Configureer omgevingsvariabelen voor ACR en installatiekopieën.

    ACR_SUB_ID=myAcrSubscriptionId
    ACR_RG=myAcrResourceGroup
    # Name of the existing registry example: myregistry.azurecr.io 
    ACR_NAME=myregistry 
    # Existing full domain of the ACR 
    REGISTRY=$ACR_NAME.azurecr.io 
    # Container name inside ACR where image will be stored 
    REPO=net-monitor 
    TAG=v1 
    # Source code directory containing Dockerfile to build 
    IMAGE_SOURCE=https://github.com/wabbit-networks/net-monitor.git#main  
    

Aanmelden met Azure CLI

az login

Zie Aanmelden met Azure CLI voor meer informatie over Azure CLI en hoe u zich hiermee kunt aanmelden.

Een certificaat maken of importeren dat is uitgegeven door een CA in AKV

Certificaatvereisten

Bij het maken van certificaten voor ondertekening en verificatie moeten de certificaten voldoen aan de certificaatvereiste voor notarisproject.

Dit zijn de vereisten voor basis- en tussencertificaten:

  • De basicConstraints extensie moet aanwezig zijn en als kritiek zijn gemarkeerd. Het CA veld moet worden ingesteld true.
  • De keyUsage extensie moet aanwezig en gemarkeerd criticalzijn. Bitposities voor keyCertSign MUST moeten worden ingesteld.

Dit zijn de vereisten voor certificaten die zijn uitgegeven door een CA:

  • X.509-certificaateigenschappen:
    • Onderwerp moet algemene naam (), land (CNC), staat of provincie (ST) en organisatie (O) bevatten. In deze zelfstudie $CERT_SUBJECT wordt het onderwerp gebruikt.
    • De vlag voor het gebruik van X.509-sleutels mag alleen zijn DigitalSignature .
    • Uitgebreide-sleutelgebruiken (EKU's) moeten leeg zijn of 1.3.6.1.5.5.7.3.3 (voor codesigning).
  • Belangrijkste eigenschappen:
    • De exportable eigenschap moet worden ingesteld op false.
    • Selecteer een ondersteund sleuteltype en een ondersteunde grootte in de specificatie van het Notary Project.

Belangrijk

Om ervoor te zorgen dat de integratie met afbeeldingsintegriteit is geslaagd, moet het inhoudstype van het certificaat worden ingesteld op PEM.

Notitie

In deze handleiding wordt versie 1.0.1 van de AKV-invoegtoepassing gebruikt. Eerdere versies van de invoegtoepassing hadden een beperking die een specifieke certificaatvolgorde in een certificaatketen vereist. Versie 1.0.1 van de invoegtoepassing heeft deze beperking niet. Het is daarom raadzaam om versie 1.0.1 of hoger te gebruiken.

Een certificaat maken dat is uitgegeven door een CA

Maak een aanvraag voor certificaatondertekening (CSR) door de instructies in het maken van een aanvraag voor certificaatondertekening te volgen.

Belangrijk

Wanneer u de CSR samenvoegt, moet u ervoor zorgen dat u de hele keten die terug is gebracht van de CA-leverancier, samenvoegt.

Het certificaat importeren in AKV

Het certificaat importeren:

  1. Haal het certificaatbestand op van de CA-leverancier met volledige certificaatketen.
  2. Importeer het certificaat in Azure Key Vault door de instructies in het importeren van een certificaat te volgen.

Notitie

Als het certificaat geen certificaatketen bevat na het maken of importeren, kunt u de tussenliggende en basiscertificaten van uw CA-leverancier verkrijgen. U kunt uw leverancier vragen u een PEM-bestand te verstrekken dat de tussenliggende certificaten (indien van toepassing) en het basiscertificaat bevat. Dit bestand kan vervolgens worden gebruikt bij stap 5 van het ondertekenen van containerinstallatiekopieën.

Een containerinstallatiekopie ondertekenen met de Notation CLI en de AKV-invoegtoepassing

Wanneer u met ACR en AKV werkt, is het essentieel om de juiste machtigingen te verlenen om veilige en gecontroleerde toegang te garanderen. U kunt toegang verlenen voor verschillende entiteiten, zoals gebruikers-principals, service-principals of beheerde identiteiten, afhankelijk van uw specifieke scenario's. In deze zelfstudie is de toegang gemachtigd voor een aangemelde Azure-gebruiker.

Toegang tot ACR ontwerpen

De AcrPull en AcrPush rollen zijn vereist voor het bouwen en ondertekenen van containerinstallatiekopieën in ACR.

  1. Het abonnement instellen dat de ACR-resource bevat

    az account set --subscription $ACR_SUB_ID
    
  2. De rollen toewijzen

    USER_ID=$(az ad signed-in-user show --query id -o tsv)
    az role assignment create --role "AcrPull" --role "AcrPush" --assignee $USER_ID --scope "/subscriptions/$ACR_SUB_ID/resourceGroups/$ACR_RG/providers/Microsoft.ContainerRegistry/registries/$ACR_NAME"
    

Containerinstallatiekopieën bouwen en pushen naar ACR

  1. Verifieer bij uw ACR met behulp van uw afzonderlijke Azure-identiteit.

    az acr login --name $ACR_NAME
    

Belangrijk

Als Docker op uw systeem is geïnstalleerd en gebruikt az acr login of docker login om te verifiëren bij uw ACR, worden uw referenties al opgeslagen en beschikbaar voor notatie. In dit geval hoeft u niet opnieuw uit te voeren notation login om te verifiëren bij uw ACR. Zie Verifiëren met OCI-compatibele registers voor meer informatie over verificatieopties voor notatie.

  1. Bouw en push een nieuwe installatiekopieën met ACR Tasks. digest Gebruik altijd om de afbeelding te identificeren voor ondertekening, omdat tags veranderlijk zijn en kunnen worden overschreven.

    DIGEST=$(az acr build -r $ACR_NAME -t $REGISTRY/${REPO}:$TAG $IMAGE_SOURCE --no-logs --query "outputImages[0].digest" -o tsv)
    IMAGE=$REGISTRY/${REPO}@$DIGEST
    

In deze zelfstudie, als de installatiekopie al is gemaakt en is opgeslagen in het register, fungeert de tag als een id voor die installatiekopie voor het gemak.

IMAGE=$REGISTRY/${REPO}@$TAG

Toegang tot AKV ontwerpen

  1. Het abonnement instellen dat de AKV-resource bevat

    az account set --subscription $AKV_SUB_ID
    
  2. De rollen toewijzen

    Als het certificaat de volledige certificaatketen bevat, moet de principal worden toegewezen met de volgende rollen:

    • Key Vault Secrets User voor het lezen van geheimen
    • Key Vault Certificates Uservoor het lezen van certificaten
    • Key Vault Crypto User voor ondertekeningsbewerkingen
    USER_ID=$(az ad signed-in-user show --query id -o tsv)
    az role assignment create --role "Key Vault Secrets User" --role "Key Vault Certificates User" --role "Key Vault Crypto User" --assignee $USER_ID --scope "/subscriptions/$AKV_SUB_ID/resourceGroups/$AKV_RG/providers/Microsoft.KeyVault/vaults/$AKV_NAME"
    

    Als het certificaat de keten niet bevat, moet de principal worden toegewezen met de volgende rollen:

    • Key Vault Certificates Uservoor het lezen van certificaten
    • Key Vault Crypto User voor ondertekeningsbewerkingen
    USER_ID=$(az ad signed-in-user show --query id -o tsv)
    az role assignment create --role "Key Vault Certificates User" --role "Key Vault Crypto User" --assignee $USER_ID --scope "/subscriptions/$AKV_SUB_ID/resourceGroups/$AKV_RG/providers/Microsoft.KeyVault/vaults/$AKV_NAME"
    

Zie Een Azure RBAC gebruiken om toegang te beheren voor meer informatie over Key Vault-toegang met Azure RBAC.

Toegangsbeleid gebruiken (verouderd)

Voer de volgende opdracht uit om het abonnement in te stellen dat de AKV-resources bevat:

az account set --subscription $AKV_SUB_ID

Als het certificaat de hele certificaatketen bevat, moet de principal sleutelmachtigingen, geheime machtigingen SignGeten certificaatmachtigingen Getworden verleend. Ga als volgt te werk om deze machtigingen aan de principal te verlenen:

USER_ID=$(az ad signed-in-user show --query id -o tsv)
az keyvault set-policy -n $AKV_NAME --key-permissions sign --secret-permissions get --certificate-permissions get --object-id $USER_ID

Als het certificaat de keten niet bevat, moet de principal sleutelmachtigingen en certificaatmachtigingen SignGetworden verleend. Ga als volgt te werk om deze machtigingen aan de principal te verlenen:

USER_ID=$(az ad signed-in-user show --query id -o tsv)
az keyvault set-policy -n $AKV_NAME --key-permissions sign --certificate-permissions get --object-id $USER_ID

Zie Toegangsbeleid toewijzen voor meer informatie over het toewijzen van beleid aan een principal.

Containerinstallatiekopieën ondertekenen met behulp van het certificaat in AKV

  1. Haal de sleutel-id voor een certificaat op. Een certificaat in AKV kan meerdere versies hebben. De volgende opdracht haalt de sleutel-id op voor de nieuwste versie van het $CERT_NAME certificaat.

    KEY_ID=$(az keyvault certificate show -n $CERT_NAME --vault-name $AKV_NAME --query 'kid' -o tsv) 
    
  2. Onderteken de containerinstallatiekopieën met de COSE-handtekeningindeling met behulp van de sleutel-id.

    Als het certificaat de hele certificaatketen bevat, voert u de volgende opdracht uit:

    notation sign --signature-format cose $IMAGE --id $KEY_ID --plugin azure-kv 
    

    Als het certificaat de keten niet bevat, gebruikt u de --plugin-config ca_certs=<ca_bundle_file> parameter om de CA-certificaten in een PEM-bestand door te geven aan de AKV-invoegtoepassing, voert u de volgende opdracht uit:

    notation sign --signature-format cose $IMAGE --id $KEY_ID --plugin azure-kv --plugin-config ca_certs=<ca_bundle_file> 
    

    Voor verificatie met AKV worden standaard de volgende referentietypen geprobeerd als deze optie is ingeschakeld:

    Als u een referentietype wilt opgeven, gebruikt u een extra configuratie van de invoegtoepassing met de naam credential_type. U kunt bijvoorbeeld expliciet instellen credential_type op azurecli het gebruik van Azure CLI-referenties, zoals hieronder wordt weergegeven:

    notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config credential_type=azurecli $IMAGE
    

    Zie de onderstaande tabel voor de waarden voor credential_type verschillende referentietypen.

    Referentietype Waarde voor credential_type
    Omgevingsreferenties environment
    Referentie voor workloadidentiteit workloadid
    Referenties voor beheerde identiteit managedid
    Azure CLI-referentie azurecli
  3. Bekijk de grafiek met ondertekende afbeeldingen en bijbehorende handtekeningen.

    notation ls $IMAGE
    

    In het volgende voorbeeld van uitvoer wordt een handtekening van het type application/vnd.cncf.notary.signature geïdentificeerd door digest sha256:d7258166ca820f5ab7190247663464f2dcb149df4d1b6c4943dcaac59157de8e gekoppeld aan de $IMAGE.

    myregistry.azurecr.io/net-monitor@sha256:17cc5dd7dfb8739e19e33e43680e43071f07497ed716814f3ac80bd4aac1b58f
    └── application/vnd.cncf.notary.signature
        └── sha256:d7258166ca820f5ab7190247663464f2dcb149df4d1b6c4943dcaac59157de8e
    

Een containerinstallatiekopie controleren met de Notatie-CLI

  1. Voeg het basiscertificaat toe aan een benoemd vertrouwensarchief voor handtekeningverificatie. Als u het basiscertificaat niet hebt, kunt u het verkrijgen via uw CA. In het volgende voorbeeld wordt het basiscertificaat $ROOT_CERT toegevoegd aan het $STORE_NAME vertrouwensarchief.

    STORE_TYPE="ca" 
    STORE_NAME="wabbit-networks.io" 
    notation cert add --type $STORE_TYPE --store $STORE_NAME $ROOT_CERT  
    
  2. Geef het basiscertificaat weer om te bevestigen dat het $ROOT_CERT is toegevoegd.

    notation cert ls 
    
  3. Configureer vertrouwensbeleid vóór verificatie.

    Met vertrouwensbeleid kunnen gebruikers een nauwkeurig verificatiebeleid opgeven. Gebruik de volgende opdracht om vertrouwensbeleid te configureren.

    cat <<EOF > ./trustpolicy.json
    {
        "version": "1.0",
        "trustPolicies": [
            {
                "name": "wabbit-networks-images",
                "registryScopes": [ "$REGISTRY/$REPO" ],
                "signatureVerification": {
                    "level" : "strict" 
                },
                "trustStores": [ "$STORE_TYPE:$STORE_NAME" ],
                "trustedIdentities": [
                    "x509.subject: $CERT_SUBJECT"
                ]
            }
        ]
    }
    EOF
    

    Het bovenstaande trustpolicy.json bestand definieert één vertrouwensbeleid met de naam wabbit-networks-images. Dit vertrouwensbeleid is van toepassing op alle artefacten die zijn opgeslagen in de $REGISTRY/$REPO opslagplaatsen. Het benoemde vertrouwensarchief $STORE_NAME van het type $STORE_TYPE bevat de basiscertificaten. Ook wordt ervan uitgegaan dat de gebruiker een specifieke identiteit vertrouwt met het onderwerp $CERT_SUBJECTX.509. Zie De specificatie van het vertrouwensarchief en het vertrouwensbeleid voor meer informatie.

  4. Hiermee notation policy importeert u de configuratie van het vertrouwensbeleid uit trustpolicy.json.

    notation policy import ./trustpolicy.json
    
  5. Geef de configuratie van het vertrouwensbeleid weer om te bevestigen dat het importeren is geslaagd.

    notation policy show
    
  6. Gebruik notation verify dit om de integriteit van de afbeelding te controleren:

    notation verify $IMAGE
    

    Na een geslaagde verificatie van de installatiekopie met behulp van het vertrouwensbeleid wordt de sha256-samenvatting van de geverifieerde installatiekopie geretourneerd in een geslaagd uitvoerbericht. Een voorbeeld van uitvoer:

    Successfully verified signature for myregistry.azurecr.io/net-monitor@sha256:17cc5dd7dfb8739e19e33e43680e43071f07497ed716814f3ac80bd4aac1b58f

Tijdstempel

Sinds de release van Notation v1.2.0 ondersteunt Notation RFC 3161-compatibele tijdstempels. Deze verbetering breidt het vertrouwen uit van handtekeningen die zijn gemaakt binnen de geldigheidsperiode van het certificaat door een TSA (Timestamping Authority) te vertrouwen, waardoor een geslaagde handtekeningverificatie mogelijk is, zelfs nadat de certificaten zijn verlopen. Als ondertekenaar van een installatiekopie moet u ervoor zorgen dat u containerinstallatiekopieën ondertekent met tijdstempels die zijn gegenereerd door een vertrouwde TSA. Als afbeeldingscontrole moet u ervoor zorgen dat u zowel de ondertekenaar van de installatiekopie als de bijbehorende TSA vertrouwt en een vertrouwensrelatie tot stand brengt via vertrouwensarchieven en vertrouwensbeleid. Tijdstempel vermindert de kosten door het periodiek opnieuw ondertekenen van installatiekopieën vanwege het verlopen van certificaten, wat met name essentieel is bij het gebruik van kortstondige certificaten. Raadpleeg de handleiding voor tijdstempels van Notary Project voor gedetailleerde instructies voor het ondertekenen en verifiëren van tijdstempels.

Veelgestelde vragen

  • Wat moet ik doen als het certificaat is verlopen?

    Als uw certificaat is verlopen, moet u een nieuwe verkrijgen van een vertrouwde CA-leverancier, samen met een nieuwe persoonlijke sleutel. Een verlopen certificaat kan niet worden gebruikt om containerinstallatiekopieën te ondertekenen. Voor installatiekopieën die zijn ondertekend voordat het certificaat is verlopen, kunnen ze nog steeds worden gevalideerd als ze zijn ondertekend met tijdstempel. Zonder tijdstempel mislukt de verificatie van de handtekening en moet u deze installatiekopieën opnieuw ondertekenen met het nieuwe certificaat voor een geslaagde verificatie.

  • Wat moet ik doen als het certificaat is ingetrokken?

    Als uw certificaat is ingetrokken, wordt de handtekening ongeldig gemaakt. Dit kan om verschillende redenen gebeuren, zoals de persoonlijke sleutel die wordt aangetast of wijzigingen in de lidmaatschap van de certificaathouder. U kunt dit probleem oplossen door ervoor te zorgen dat uw broncode en buildomgeving up-to-date en veilig zijn. Bouw vervolgens containerinstallatiekopieën van de broncode, haal een nieuw certificaat op bij een vertrouwde CA-leverancier, samen met een nieuwe persoonlijke sleutel en onderteken nieuwe containerinstallatiekopieën met het nieuwe certificaat door deze handleiding te volgen.

Volgende stappen

Notatie biedt ook CI/CD-oplossingen in Azure Pipeline en GitHub Actions Workflow:

De implementatie van ondertekende installatiekopieën valideren in AKS of Kubernetes: