Udostępnij za pośrednictwem


Użyj integralności obrazu, aby zweryfikować podpisane obrazy przed wdrożeniem ich w klastrach usługi Azure Kubernetes Service (AKS) (wersja zapoznawcza)

Usługa Azure Kubernetes Service (AKS) i jej bazowy model kontenera zapewniają zwiększoną skalowalność i możliwości zarządzania dla aplikacji natywnych dla chmury. Usługa AKS umożliwia uruchamianie elastycznych aplikacji oprogramowania zgodnie z potrzebami środowiska uruchomieniowego systemu. Jednak ta elastyczność może powodować nowe wyzwania.

W tych środowiskach aplikacji użycie podpisanych obrazów kontenerów pomaga sprawdzić, czy wdrożenia zostały skompilowane na podstawie zaufanej jednostki i że obrazy nie zostały naruszone od czasu ich utworzenia. Integralność obrazu to usługa, która umożliwia dodanie wbudowanej definicji usługi Azure Policy w celu sprawdzenia, czy tylko podpisane obrazy są wdrażane w klastrach usługi AKS.

Uwaga

Integralność obrazu jest funkcją opartą na Ratify. W klastrze usługi AKS nazwa funkcji i nazwa właściwości to ImageIntegrity, a odpowiednie nazwy zasobników integralności obrazów zawierają Ratifywartość .

Ważne

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Wymagania wstępne

  • Subskrypcja platformy Azure. Jeśli nie masz subskrypcji Azure, możesz utworzyć bezpłatne konto Azure.

  • Interfejs wiersza polecenia platformy Azure lub program Azure PowerShell.

  • aks-preview Rozszerzenie interfejsu wiersza polecenia w wersji 0.5.96 lub nowszej.

  • Upewnij się, że dodatek usługi Azure Policy dla usługi AKS jest włączony w klastrze. Jeśli nie masz zainstalowanego dodatku, zobacz Instalowanie dodatku usługi Azure Policy dla usługi AKS.

  • Klaster usługi AKS z włączonym wystawcą OIDC. Aby utworzyć nowy klaster lub zaktualizować istniejący klaster, zobacz Konfigurowanie klastra usługi AKS za pomocą wystawcy OIDC.

  • Flagi EnableImageIntegrityPreview funkcji i AKS-AzurePolicyExternalData zarejestrowane w ramach subskrypcji platformy Azure. Zarejestruj flagi funkcji przy użyciu następujących poleceń:

    1. Zarejestruj flagi EnableImageIntegrityPreview funkcji i AKS-AzurePolicyExternalData przy użyciu az feature register polecenia .

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

      Wyświetlenie stanu jako Zarejestrowane może potrwać kilka minut.

    2. Sprawdź stan rejestracji przy użyciu az feature show polecenia .

      # 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. Po wybraniu stanu Zarejestrowane odśwież rejestrację dostawcy Microsoft.ContainerService zasobów przy użyciu az provider register polecenia .

      az provider register --namespace Microsoft.ContainerService
      

Rozważania i ograniczenia

  • Klastry usługi AKS muszą uruchamiać platformę Kubernetes w wersji 1.26 lub nowszej.
  • Nie należy używać tej funkcji do produkcyjnych rejestrów ani obciążeń usługi Azure Container Registry (ACR).
  • Integralność obrazu obsługuje maksymalnie 200 unikatowych podpisów jednocześnie w całym klastrze.
  • Notacja jest jedynym obsługiwanym weryfikatorem.
  • Inspekcja jest jedynym obsługiwanym efektem zasad weryfikacji.

Jak działa integralność obrazu

Zrzut ekranu przedstawiający podstawową architekturę integralności obrazu.

Integralność obrazu używa rozwiązania Ratify, usługi Azure Policy i gatekeeper do weryfikowania podpisanych obrazów przed wdrożeniem ich w klastrach usługi AKS. Włączenie integralności obrazu w klastrze umożliwia wdrożenie Ratify zasobnika. Ten Ratify zasobnik wykonuje następujące zadania:

  1. Uzgadnia certyfikaty z usługi Azure Key Vault zgodnie z konfiguracją skonfigurowaną za pomocą Ratify identyfikatorów CRD.
  2. Uzyskuje dostęp do obrazów przechowywanych w usłudze ACR, gdy żądania weryfikacji pochodzą z usługi Azure Policy. Aby włączyć to środowisko, usługa Azure Policy rozszerza program Gatekeeper, element webhook kontrolera dostępu dla agenta zasad open policy (OPA).
  3. Określa, czy obraz docelowy jest podpisany przy użyciu zaufanego certyfikatu i dlatego jest uznawany za zaufany.
  4. AzurePolicy i Gatekeeper używają wyników weryfikacji jako stanu zgodności, aby zdecydować, czy zezwolić na żądanie wdrożenia.

Włączanie integralności obrazów w klastrze usługi AKS

Uwaga

Weryfikacja podpisu obrazu jest scenariuszem zorientowanym na ład i wykorzystuje usługę Azure Policy do weryfikowania podpisów obrazów w klastrach usługi AKS na dużą skalę. Zalecamy użycie wbudowanej inicjatywy usługi Azure Policy integralności obrazów usługi AKS, która jest dostępna w wbudowanej bibliotece definicji usługi Azure Policy.

  • Utwórz przypisanie zasad z inicjatywą [Preview]: Use Image Integrity to ensure only trusted images are deployed zasad usługi AKS przy użyciu az policy assignment create polecenia .

    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}
    

    Zasobnik Ratify zostanie wdrożony po włączeniu tej funkcji.

Uwaga

Zasady wdrażają funkcję Integralność obrazu w klastrze, gdy wykrywa ona wszelkie operacje aktualizacji w klastrze. Jeśli chcesz natychmiast włączyć tę funkcję, musisz utworzyć korygowanie zasad przy użyciu az policy remediation create polecenia .

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}

Konfigurowanie konfiguracji weryfikacji

Aby integralność obrazu została prawidłowo zweryfikowana z podpisem docelowym obrazu, należy skonfigurować Ratify konfiguracje za pomocą K8s CRDs przy użyciu polecenia kubectl.

W tym artykule użyjemy certyfikatu urzędu certyfikacji z podpisem własnym z oficjalnej dokumentacji usługi Ratify w celu skonfigurowania konfiguracji weryfikacji. Aby uzyskać więcej przykładów, zobacz Ratify CRDs (Ratify CRDs).

  1. VerifyConfig Utwórz plik o nazwie verify-config.yaml i skopiuj go w następującym pliku 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. Zastosuj element do klastra VerifyConfig kubectl apply przy użyciu polecenia .

    kubectl apply -f verify-config.yaml
    

Wdrażanie przykładowych obrazów w klastrze usługi AKS

  • Wdróż podpisany obraz przy użyciu kubectl run demo polecenia .

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

    Następujące przykładowe dane wyjściowe pokazują, że integralność obrazu umożliwia wdrożenie:

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

Jeśli chcesz używać własnych obrazów, zapoznaj się ze wskazówkami dotyczącymi podpisywania obrazów.

Wyłącz integralność obrazu

  • Wyłącz integralność obrazu w klastrze przy użyciu az aks update polecenia z flagą --disable-image-integrity .

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

Usuwanie inicjatywy zasad

  • Usuń inicjatywę zasad przy użyciu az policy assignment delete polecenia .

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

Następne kroki

W tym artykule przedstawiono sposób używania integralności obrazu do weryfikowania podpisanych obrazów przed wdrożeniem ich w klastrach usługi Azure Kubernetes Service (AKS). Jeśli chcesz dowiedzieć się, jak podpisać własne kontenery, zobacz Kompilowanie, podpisywanie i weryfikowanie obrazów kontenerów przy użyciu notary i usługi Azure Key Vault (wersja zapoznawcza).