Delen via


Afbeeldingsintegriteit gebruiken om ondertekende installatiekopieën te valideren voordat u ze implementeert in uw AKS-clusters (Azure Kubernetes Service) (preview)

Azure Kubernetes Service (AKS) en het onderliggende containermodel bieden een grotere schaalbaarheid en beheerbaarheid voor cloudtoepassingen. Met AKS kunt u flexibele softwaretoepassingen starten op basis van de runtimebehoeften van uw systeem. Deze flexibiliteit kan echter nieuwe uitdagingen opleveren.

In deze toepassingsomgevingen helpt het gebruik van ondertekende containerinstallatiekopieën te controleren of uw implementaties zijn gebouwd op basis van een vertrouwde entiteit en dat er sinds het maken van installatiekopieën niet met installatiekopieën is geknoeid. Afbeeldingsintegriteit is een service waarmee u een ingebouwde Definitie van Azure Policy kunt toevoegen om te controleren of alleen ondertekende installatiekopieën zijn geïmplementeerd in uw AKS-clusters.

Notitie

Integriteit van afbeeldingen is een functie op basis van Ratificeren. Op een AKS-cluster zijn ImageIntegrityde naam en eigenschapsnaam van de functie, terwijl de namen van de relevante pods voor afbeeldingsintegriteit de naam bevatten Ratify.

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals is' en 'als beschikbaar' en ze worden uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning op basis van best effort. Daarom zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

Vereisten

  • Een Azure-abonnement. Als u geen Azure-abonnement hebt, kunt u een gratis account maken.

  • Azure CLI of Azure PowerShell.

  • aks-preview CLI-extensie versie 0.5.96 of hoger.

  • Zorg ervoor dat de Azure Policy-invoegtoepassing voor AKS is ingeschakeld in uw cluster. Zie Azure Policy-invoegtoepassing installeren voor AKS als u deze invoegtoepassing niet hebt geïnstalleerd.

  • Een AKS-cluster ingeschakeld met OIDC Issuer. Zie Een AKS-cluster configureren met OIDC Issuer als u een nieuw cluster wilt maken of een bestaand cluster wilt bijwerken.

  • De EnableImageIntegrityPreview en AKS-AzurePolicyExternalData functievlagmen die zijn geregistreerd in uw Azure-abonnement. Registreer de functievlagmen met behulp van de volgende opdrachten:

    1. Registreer de EnableImageIntegrityPreview en AKS-AzurePolicyExternalData functievlagmen met behulp van de az feature register opdracht.

      # 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"
      

      Het kan enkele minuten duren voordat de status wordt weergegeven als Geregistreerd.

    2. Controleer de registratiestatus met behulp van de az feature show opdracht.

      # 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"
      
    3. Zodra de status Geregistreerd wordt weergegeven, vernieuwt u de registratie van de Microsoft.ContainerService resourceprovider met behulp van de az provider register opdracht.

      az provider register --namespace Microsoft.ContainerService
      

Overwegingen en beperkingen

  • Uw AKS-clusters moeten Kubernetes versie 1.26 of hoger uitvoeren.
  • Gebruik deze functie niet voor productieregisters of workloads van Azure Container Registry (ACR).
  • Afbeeldingsintegriteit ondersteunt maximaal 200 unieke handtekeningen tegelijk clusterbreed.
  • Notatie is de enige ondersteunde verificator.
  • Controle is het enige ondersteunde verificatiebeleidseffect.

Hoe afbeeldingsintegriteit werkt

Schermopname van de basisarchitectuur voor afbeeldingsintegriteit.

Afbeeldingsintegriteit maakt gebruik van Ratificeren, Azure Policy en Gatekeeper om ondertekende installatiekopieën te valideren voordat ze in uw AKS-clusters worden geïmplementeerd. Als u afbeeldingsintegriteit inschakelt in uw cluster, wordt een Ratify pod geïmplementeerd. Deze Ratify pod voert de volgende taken uit:

  1. Hiermee worden certificaten van Azure Key Vault afgestemd op de configuratie die u hebt ingesteld via Ratify CRD's.
  2. Toegang tot installatiekopieën die zijn opgeslagen in ACR wanneer validatieaanvragen afkomstig zijn van Azure Policy. Om deze ervaring mogelijk te maken, breidt Azure Policy Gatekeeper uit, een toegangscontrollerwebhook voor Open Policy Agent (OPA).
  3. Bepaalt of de doelinstallatiekopieën zijn ondertekend met een vertrouwd certificaat en daarom als vertrouwd worden beschouwd.
  4. AzurePolicy en Gatekeeper verbruik de validatieresultaten als de nalevingsstatus om te bepalen of de implementatieaanvraag moet worden toegestaan.

Afbeeldingsintegriteit inschakelen op uw AKS-cluster

Notitie

Verificatie van afbeeldingshandtekening is een beheerscenario en maakt gebruik van Azure Policy om afbeeldingshandtekeningen op AKS-clusters op schaal te controleren. We raden u aan het ingebouwde Azure Policy-initiatief voor afbeeldingsintegriteit van AKS te gebruiken, dat beschikbaar is in de ingebouwde definitiebibliotheek van Azure Policy.

  • Maak een beleidstoewijzing met het AKS-beleidsinitiatief [Preview]: Use Image Integrity to ensure only trusted images are deployed met behulp van de az policy assignment create opdracht.

    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}
    

    De Ratify pod wordt geïmplementeerd nadat u de functie hebt ingeschakeld.

Notitie

Het beleid implementeert de functie Integriteit van installatiekopieën in uw cluster wanneer er een updatebewerking in het cluster wordt gedetecteerd. Als u de functie onmiddellijk wilt inschakelen, moet u een beleidsherstel maken met behulp van de az policy remediation create opdracht.

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}

Verificatieconfiguraties instellen

Om de integriteit van de installatiekopieën correct te verifiëren, moet u configuraties instellen Ratify via K8s CRD's met behulp van kubectl.

In dit artikel gebruiken we een zelfondertekend CA-certificaat uit de officiële ratificatiedocumentatie voor het instellen van verificatieconfiguraties. Zie Ratificeren CRD's voor meer voorbeelden.

  1. Maak een VerifyConfig bestand met de naam verify-config.yaml en kopieer in de volgende 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:
                - "*"
    
  2. Pas het VerifyConfig cluster toe met behulp van de kubectl apply opdracht.

    kubectl apply -f verify-config.yaml
    

Voorbeeldinstallatiekopieën implementeren in uw AKS-cluster

  • Implementeer een ondertekende installatiekopieën met behulp van de kubectl run demo opdracht.

    kubectl run demo-signed --image=ghcr.io/deislabs/ratify/notary-image:signed 
    

    In de volgende voorbeelduitvoer ziet u dat afbeeldingsintegriteit de implementatie toestaat:

    ghcr.io/deislabs/ratify/notary-image:signed
    pod/demo-signed created
    

Als u uw eigen afbeeldingen wilt gebruiken, raadpleegt u de richtlijnen voor het ondertekenen van afbeeldingen.

Afbeeldingsintegriteit uitschakelen

  • Schakel Integriteit van installatiekopieën in uw cluster uit met behulp van de az aks update opdracht met de --disable-image-integrity vlag.

    az aks update --resource-group myResourceGroup --name MyManagedCluster --disable-image-integrity
    

Beleidsinitiatief verwijderen

  • Verwijder het beleidsinitiatief met behulp van de az policy assignment delete opdracht.

    az policy assignment delete --name 'deploy-trustedimages'
    

Volgende stappen

In dit artikel hebt u geleerd hoe u Image Integrity kunt gebruiken om ondertekende installatiekopieën te valideren voordat u ze implementeert in uw AKS-clusters (Azure Kubernetes Service). Als u wilt weten hoe u uw eigen containers kunt ondertekenen, raadpleegt u Build, sign and verify container images using Notary and Azure Key Vault (preview).