Använd bildintegritet för att verifiera signerade avbildningar innan du distribuerar dem till dina AKS-kluster (Azure Kubernetes Service) (förhandsversion)
Azure Kubernetes Service (AKS) och dess underliggande containermodell ger ökad skalbarhet och hanterbarhet för molnbaserade program. Med AKS kan du starta flexibla program enligt systemets körningsbehov. Den här flexibiliteten kan dock medföra nya utmaningar.
I dessa programmiljöer hjälper användning av signerade containeravbildningar till att verifiera att dina distributioner har skapats från en betrodd entitet och att avbildningarna inte har manipulerats sedan de skapades. Bildintegritet är en tjänst som gör att du kan lägga till en inbyggd Azure Policy-definition för att verifiera att endast signerade avbildningar distribueras till dina AKS-kluster.
Kommentar
Bildintegritet är en funktion som baseras på Ratify. I ett AKS-kluster är ImageIntegrity
funktionsnamnet och egenskapsnamnet , medan relevanta bildintegritetspoddars namn innehåller Ratify
.
Viktigt!
AKS-förhandsversionsfunktioner är tillgängliga via självbetjäning och anmäl dig. Förhandsversioner tillhandahålls "som är" och "som tillgängliga", och de undantas från serviceavtalen och den begränsade garantin. AKS-förhandsversioner omfattas delvis av kundsupport på bästa sätt. Därför är dessa funktioner inte avsedda för produktionsanvändning. Mer information finns i följande supportartiklar:
Förutsättningar
En Azure-prenumeration. Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto.
Azure CLI eller Azure PowerShell.
aks-preview
CLI-tillägg version 0.5.96 eller senare.Kontrollera att Azure Policy-tillägget för AKS är aktiverat i klustret. Om du inte har det här tillägget installerat läser du Installera Azure Policy-tillägg för AKS.
Ett AKS-kluster aktiverat med OIDC Issuer. Information om hur du skapar ett nytt kluster eller uppdaterar ett befintligt kluster finns i Konfigurera ett AKS-kluster med OIDC-utfärdare.
Funktionsflaggorna
EnableImageIntegrityPreview
ochAKS-AzurePolicyExternalData
som registrerats i din Azure-prenumeration. Registrera funktionsflaggor med hjälp av följande kommandon:Registrera funktionsflaggor och
EnableImageIntegrityPreview
AKS-AzurePolicyExternalData
med kommandotaz feature register
.# Register the EnableImageIntegrityPreview feature flag az feature register --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview" # Register the AKS-AzurePolicyExternalData feature flag az feature register --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
Det kan ta några minuter innan statusen visas som Registrerad.
Kontrollera registreringsstatusen
az feature show
med kommandot .# Verify the EnableImageIntegrityPreview feature flag registration status az feature show --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview" # Verify the AKS-AzurePolicyExternalData feature flag registration status az feature show --namespace "Microsoft.ContainerService" --name "AKS-AzurePolicyExternalData"
När statusen har registrerats uppdaterar du registreringen av resursprovidern med hjälp av
Microsoft.ContainerService
az provider register
kommandot .az provider register --namespace Microsoft.ContainerService
Beaktanden och begränsningar
- Dina AKS-kluster måste köra Kubernetes version 1.26 eller senare.
- Du bör inte använda den här funktionen för ACR-register (production Azure Container Registry) eller arbetsbelastningar.
- Bildintegritet stöder högst 200 unika signaturer samtidigt i hela klustret.
- Notation är den enda kontrollant som stöds.
- Granskning är den enda verifieringsprincipeffekt som stöds.
Så här fungerar bildintegritet
Bildintegritet använder Ratify, Azure Policy och Gatekeeper för att verifiera signerade avbildningar innan de distribueras till dina AKS-kluster. När du aktiverar avbildningsintegritet i klustret distribueras en Ratify
podd. Den här Ratify
podden utför följande uppgifter:
- Avstäm certifikat från Azure Key Vault enligt den konfiguration som du har konfigurerat via
Ratify
CRD. - Åtkomst till avbildningar som lagras i ACR när valideringsbegäranden kommer från Azure Policy. För att aktivera den här upplevelsen utökar Azure Policy Gatekeeper, en webhook för antagningskontrollant för Open Policy Agent (OPA)..
- Avgör om målbilden är signerad med ett betrott certifikat och därför betraktas som betrodd.
AzurePolicy
ochGatekeeper
använda valideringsresultatet som kompatibilitetstillstånd för att avgöra om distributionsbegäran ska tillåtas.
Aktivera bildintegritet i ditt AKS-kluster
Kommentar
Verifiering av bildsignatur är ett styrningsorienterat scenario och använder Azure Policy för att verifiera bildsignaturer i AKS-kluster i stor skala. Vi rekommenderar att du använder AKS inbyggda Azure Policy-initiativ för bildintegritet, som är tillgängligt i Azure Policys inbyggda definitionsbibliotek.
Skapa en principtilldelning med AKS-principinitiativet
[Preview]: Use Image Integrity to ensure only trusted images are deployed
az policy assignment create
med kommandot .export SCOPE="/subscriptions/${SUBSCRIPTION}/resourceGroups/${RESOURCE_GROUP}" export LOCATION=$(az group show --name ${RESOURCE_GROUP} --query location -o tsv) az policy assignment create --name 'deploy-trustedimages' --policy-set-definition 'af28bf8b-c669-4dd3-9137-1e68fdc61bd6' --display-name 'Audit deployment with unsigned container images' --scope ${SCOPE} --mi-system-assigned --role Contributor --identity-scope ${SCOPE} --location ${LOCATION}
Podden
Ratify
distribueras när du har aktiverat funktionen.
Kommentar
Principen distribuerar funktionen Bildintegritet i klustret när den identifierar en uppdateringsåtgärd i klustret. Om du vill aktivera funktionen omedelbart måste du skapa en principreparation med kommandot az policy remediation create
.
assignment_id=$(az policy assignment show --name 'deploy-trustedimages' --scope ${SCOPE} --query id -o tsv)
az policy remediation create --policy-assignment "$assignment_id" --definition-reference-id deployAKSImageIntegrity --name remediation --resource-group ${RESOURCE_GROUP}
Konfigurera verifieringskonfigurationer
För att bildintegritet ska kunna verifiera målsignerad avbildning korrekt måste du konfigurera Ratify
konfigurationer via K8s CRD med hjälp av kubectl
.
I den här artikeln använder vi ett självsignerat CA-certifikat från den officiella Ratificeringsdokumentationen för att konfigurera verifieringskonfigurationer. Fler exempel finns i Ratificera CRD:er.
Skapa en
VerifyConfig
fil med namnetverify-config.yaml
och kopiera i följande YAML:apiVersion: config.ratify.deislabs.io/v1beta1 kind: CertificateStore metadata: name: certstore-inline spec: provider: inline parameters: value: | -----BEGIN CERTIFICATE----- MIIDQzCCAiugAwIBAgIUDxHQ9JxxmnrLWTA5rAtIZCzY8mMwDQYJKoZIhvcNAQEL BQAwKTEPMA0GA1UECgwGUmF0aWZ5MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMB4X DTIzMDYyOTA1MjgzMloXDTMzMDYyNjA1MjgzMlowKTEPMA0GA1UECgwGUmF0aWZ5 MRYwFAYDVQQDDA1SYXRpZnkgU2FtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAshmsL2VM9ojhgTVUUuEsZro9jfI27VKZJ4naWSHJihmOki7IoZS8 3/3ATpkE1lGbduJ77M9UxQbEW1PnESB0bWtMQtjIbser3mFCn15yz4nBXiTIu/K4 FYv6HVdc6/cds3jgfEFNw/8RVMBUGNUiSEWa1lV1zDM2v/8GekUr6SNvMyqtY8oo ItwxfUvlhgMNlLgd96mVnnPVLmPkCmXFN9iBMhSce6sn6P9oDIB+pr1ZpE4F5bwa gRBg2tWN3Tz9H/z2a51Xbn7hCT5OLBRlkorHJl2HKKRoXz1hBgR8xOL+zRySH9Qo 3yx6WvluYDNfVbCREzKJf9fFiQeVe0EJOwIDAQABo2MwYTAdBgNVHQ4EFgQUKzci EKCDwPBn4I1YZ+sDdnxEir4wHwYDVR0jBBgwFoAUKzciEKCDwPBn4I1YZ+sDdnxE ir4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAgQwDQYJKoZIhvcNAQEL BQADggEBAGh6duwc1MvV+PUYvIkDfgj158KtYX+bv4PmcV/aemQUoArqM1ECYFjt BlBVmTRJA0lijU5I0oZje80zW7P8M8pra0BM6x3cPnh/oZGrsuMizd4h5b5TnwuJ hRvKFFUVeHn9kORbyQwRQ5SpL8cRGyYp+T6ncEmo0jdIOM5dgfdhwHgb+i3TejcF 90sUs65zovUjv1wa11SqOdu12cCj/MYp+H8j2lpaLL2t0cbFJlBY6DNJgxr5qync cz8gbXrZmNbzC7W5QK5J7fcx6tlffOpt5cm427f9NiK2tira50HU7gC3HJkbiSTp Xw10iXXMZzSbQ0/Hj2BF4B40WfAkgRg= -----END CERTIFICATE----- --- apiVersion: config.ratify.deislabs.io/v1beta1 kind: Store metadata: name: store-oras spec: name: oras # If you want to you use Workload Identity for Ratify to access Azure Container Registry, # uncomment the following lines, and fill the proper ClientID: # See more: https://ratify.dev/docs/reference/oras-auth-provider # parameters: # authProvider: # name: azureWorkloadIdentity # clientID: XXX --- apiVersion: config.ratify.deislabs.io/v1beta1 kind: Verifier metadata: name: verifier-notary-inline spec: name: notation artifactTypes: application/vnd.cncf.notary.signature parameters: verificationCertStores: # certificates for validating signatures certs: # name of the trustStore - certstore-inline # name of the certificate store CRD to include in this trustStore trustPolicyDoc: # policy language that indicates which identities are trusted to produce artifacts version: "1.0" trustPolicies: - name: default registryScopes: - "*" signatureVerification: level: strict trustStores: - ca:certs trustedIdentities: - "*"
Använd på
VerifyConfig
klustret med hjälp avkubectl apply
kommandot .kubectl apply -f verify-config.yaml
Distribuera exempelavbildningar till ditt AKS-kluster
Distribuera en signerad avbildning med kommandot
kubectl run demo
.kubectl run demo-signed --image=ghcr.io/deislabs/ratify/notary-image:signed
Följande exempelutdata visar att Bildintegritet tillåter distributionen:
ghcr.io/deislabs/ratify/notary-image:signed pod/demo-signed created
Om du vill använda dina egna bilder kan du läsa vägledningen för bildsignering.
Inaktivera bildintegritet
Inaktivera avbildningsintegritet i klustret med kommandot
az aks update
med--disable-image-integrity
flaggan .az aks update --resource-group myResourceGroup --name MyManagedCluster --disable-image-integrity
Ta bort principinitiativ
Ta bort principinitiativet
az policy assignment delete
med kommandot .az policy assignment delete --name 'deploy-trustedimages'
Nästa steg
I den här artikeln har du lärt dig hur du använder bildintegritet för att verifiera signerade avbildningar innan du distribuerar dem till dina Aks-kluster (Azure Kubernetes Service). Om du vill lära dig hur du signerar dina egna containrar kan du läsa Skapa, signera och verifiera containeravbildningar med Notary och Azure Key Vault (förhandsversion).
Azure Kubernetes Service