Containerinstallatiekopieën ondertekenen met Notatie en Azure Key Vault met behulp van een zelfondertekend certificaat
Het ondertekenen van containerinstallatiekopieën is een proces dat de authenticiteit en integriteit ervan garandeert. Dit wordt bereikt door een digitale handtekening toe te voegen aan de containerinstallatiekopieën, die tijdens de implementatie kunnen worden gevalideerd. Met de handtekening kunt u controleren of de installatiekopieën afkomstig zijn van een vertrouwde uitgever en niet zijn gewijzigd. Notatie is een opensource-toeleveringsketenprogramma dat is ontwikkeld door het Notary Project, dat ondersteuning biedt voor het ondertekenen en verifiëren van containerinstallatiekopieën en andere artefacten. De Azure Key Vault (AKV) wordt gebruikt om certificaten op te slaan met ondertekeningssleutels die kunnen worden gebruikt door Notation met de AKV-invoegtoepassing Notation (azure-kv) om containerinstallatiekopieën en andere artefacten te ondertekenen en te verifiëren. Met azure Container Registry (ACR) kunt u handtekeningen toevoegen aan containerinstallatiekopieën en andere artefacten en deze handtekeningen weergeven.
In deze zelfstudie:
- Notation CLI en AKV-invoegtoepassing installeren
- Een zelfondertekend certificaat maken in AKV
- Een containerinstallatiekopieën bouwen en pushen met ACR Tasks
- Een containerinstallatiekopieën ondertekenen met de Notation CLI en de AKV-invoegtoepassing
- Een containerinstallatiekopieën valideren op basis van de handtekening met notatie CLI
Vereisten
- Een Azure Container Registry maken of gebruiken voor het opslaan van containerinstallatiekopieën en handtekeningen
- Een Azure Key Vault maken of gebruiken voor het beheren van certificaten
- De nieuwste Azure CLI installeren en configureren of opdrachten uitvoeren in Azure Cloud Shell
Notation CLI en AKV-invoegtoepassing installeren
Installeer Notation v1.1.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.1.0/notation_1.1.0_linux_amd64.tar.gz tar xvzf notation.tar.gz # Copy the Notation binary to the desired bin directory in your $PATH, for example cp ./notation /usr/local/bin
Installeer de invoegtoepassing
azure-kv
Notation Azure Key Vault v1.0.2 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.0.2/notation-azure-kv_1.0.2_linux_amd64.tar.gz --sha256sum f2b2e131a435b6a9742c202237b9aceda81859e6d4bd6242c2568ba556cee20e
Vermeld de beschikbare invoegtoepassingen en controleer of de
azure-kv
invoegtoepassing met versie1.0.2
is opgenomen in de lijst.notation plugin ls
Omgevingsvariabelen configureren
Notitie
Voor een eenvoudige uitvoering van opdrachten in de zelfstudie geeft u waarden op voor de Azure-resources die overeenkomen met de bestaande ACR- en AKV-resources.
Configureer AKV-resourcenamen.
# Name of the existing AKV used to store the signing keys AKV_NAME=myakv # Name of the certificate created in AKV CERT_NAME=wabbit-networks-io CERT_SUBJECT="CN=wabbit-networks.io,O=Notation,L=Seattle,ST=WA,C=US" CERT_PATH=./${CERT_NAME}.pem
ACR- en afbeeldingsresourcenamen configureren.
# 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 IMAGE=$REGISTRY/${REPO}:$TAG # 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.
Toegangsbeleid toewijzen in AKV (Azure CLI)
Een gebruikersprincipaal met de juiste toegangsbeleidsmachtigingen is nodig om een zelfondertekend certificaat te maken en artefacten te ondertekenen. Deze principal kan een gebruikers-principal, service-principal of beheerde identiteit zijn. Deze principal heeft minimaal de volgende machtigingen nodig:
Create
machtigingen voor certificatenGet
machtigingen voor certificatenSign
machtigingen voor sleutels
In deze zelfstudie wordt het toegangsbeleid toegewezen aan een aangemelde Azure-gebruiker. Zie Toegangsbeleid toewijzen voor meer informatie over het toewijzen van beleid aan een principal.
Het abonnement instellen dat de AKV-resource bevat
az account set --subscription <your_subscription_id>
Het toegangsbeleid instellen in AKV
USER_ID=$(az ad signed-in-user show --query id -o tsv)
az keyvault set-policy -n $AKV_NAME --certificate-permissions create get --key-permissions sign --object-id $USER_ID
Belangrijk
In dit voorbeeld ziet u de minimale machtigingen die nodig zijn voor het maken van een certificaat en het ondertekenen van een containerinstallatiekopieën. Afhankelijk van uw vereisten moet u mogelijk extra machtigingen verlenen.
Een zelfondertekend certificaat maken in AKV (Azure CLI)
De volgende stappen laten zien hoe u een zelfondertekend certificaat maakt voor testdoeleinden.
Maak een certificaatbeleidsbestand.
Zodra het certificaatbeleidsbestand is uitgevoerd zoals hieronder, wordt er een geldig certificaat gemaakt dat compatibel is met de certificaatvereiste notary Project in AKV. De waarde voor
ekus
is bedoeld voor ondertekening van programmacode, maar is niet vereist voor notatie om artefacten te ondertekenen. Het onderwerp wordt later gebruikt als vertrouwensidentiteit die door de gebruiker wordt vertrouwd tijdens de verificatie.cat <<EOF > ./my_policy.json { "issuerParameters": { "certificateTransparency": null, "name": "Self" }, "keyProperties": { "exportable": false, "keySize": 2048, "keyType": "RSA", "reuseKey": true }, "secretProperties": { "contentType": "application/x-pem-file" }, "x509CertificateProperties": { "ekus": [ "1.3.6.1.5.5.7.3.3" ], "keyUsage": [ "digitalSignature" ], "subject": "$CERT_SUBJECT", "validityInMonths": 12 } } EOF
Maak het certificaat.
az keyvault certificate create -n $CERT_NAME --vault-name $AKV_NAME -p @my_policy.json
Een containerinstallatiekopieën ondertekenen met de Notation CLI en de AKV-invoegtoepassing
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.
Bouw en push een nieuwe installatiekopieën met ACR Tasks. Gebruik altijd de digest-waarde 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
Haal de sleutel-id van de ondertekeningssleutel op. Een certificaat in AKV kan meerdere versies hebben. De volgende opdracht haalt de sleutel-id van de nieuwste versie op.
KEY_ID=$(az keyvault certificate show -n $CERT_NAME --vault-name $AKV_NAME --query 'kid' -o tsv)
Onderteken de containerinstallatiekopieën met de COSE-handtekeningindeling met behulp van de ondertekeningssleutel-id. Als u zich wilt aanmelden met een zelfondertekend certificaat, moet u de configuratiewaarde
self_signed=true
van de invoegtoepassing instellen.notation sign --signature-format cose --id $KEY_ID --plugin azure-kv --plugin-config self_signed=true $IMAGE
Bekijk de grafiek met ondertekende afbeeldingen en bijbehorende handtekeningen.
notation ls $IMAGE
Een containerinstallatiekopieën controleren met de Notatie-CLI
Als u de containerinstallatiekopie wilt controleren, voegt u het basiscertificaat toe dat het certificaat ondertekent in het vertrouwensarchief en maakt u vertrouwensbeleid voor verificatie. Voor het zelfondertekende certificaat dat in deze zelfstudie wordt gebruikt, is het basiscertificaat het zelfondertekende certificaat zelf.
Download een openbaar certificaat.
az keyvault certificate download --name $CERT_NAME --vault-name $AKV_NAME --file $CERT_PATH
Voeg het gedownloade openbare certificaat toe aan het vertrouwensarchief met de naam voor handtekeningverificatie.
STORE_TYPE="ca" STORE_NAME="wabbit-networks.io" notation cert add --type $STORE_TYPE --store $STORE_NAME $CERT_PATH
Geef het certificaat weer om te bevestigen.
notation cert ls
Configureer vertrouwensbeleid vóór verificatie.
Met vertrouwensbeleid kunnen gebruikers een nauwkeurig verificatiebeleid opgeven. In het volgende voorbeeld wordt een vertrouwensbeleid geconfigureerd met de naam
wabbit-networks-images
, dat van toepassing is op alle artefacten in$REGISTRY/$REPO
en het benoemde vertrouwensarchief$STORE_NAME
van het type$STORE_TYPE
gebruikt. Ook wordt ervan uitgegaan dat de gebruiker een specifieke identiteit vertrouwt met het onderwerp$CERT_SUBJECT
X.509. Zie De specificatie van het vertrouwensarchief en het vertrouwensbeleid voor meer informatie.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
Hiermee
notation policy
importeert u de configuratie van het vertrouwensbeleid uit een JSON-bestand dat u eerder hebt gemaakt.notation policy import ./trustpolicy.json notation policy show
Gebruik
notation verify
dit om te controleren of de containerinstallatiekopieën sinds de buildtijd niet zijn gewijzigd.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.
Volgende stappen
Zie Afbeeldingsintegriteit gebruiken om ondertekende installatiekopieën te valideren voordat u ze implementeert in uw AKS-clusters (Azure Kubernetes Service) en Ratificeren in Azure om aan de slag te gaan met het verifiëren en controleren van ondertekende installatiekopieën voordat u ze implementeert op AKS.