Dela via


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 ImageIntegrityfunktionsnamnet 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 och AKS-AzurePolicyExternalData som registrerats i din Azure-prenumeration. Registrera funktionsflaggor med hjälp av följande kommandon:

    1. Registrera funktionsflaggor och EnableImageIntegrityPreview AKS-AzurePolicyExternalData med kommandot az 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.

    2. 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"
      
    3. 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

Skärmbild som visar den grundläggande arkitekturen för 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:

  1. Avstäm certifikat från Azure Key Vault enligt den konfiguration som du har konfigurerat via Ratify CRD.
  2. Å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)..
  3. Avgör om målbilden är signerad med ett betrott certifikat och därför betraktas som betrodd.
  4. AzurePolicy och Gatekeeper 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.

  1. Skapa en VerifyConfig fil med namnet verify-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:
                - "*"
    
  2. Använd på VerifyConfig klustret med hjälp av kubectl 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

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).