Udostępnij przez


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 zarejestrowane w ramach subskrypcji platformy Azure. Zarejestruj flagi funkcji przy użyciu następujących poleceń:

    1. Zarejestruj flagi EnableImageIntegrityPreview funkcji przy az feature register użyciu polecenia .

      # Register the EnableImageIntegrityPreview feature flag
      az feature register --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview"
      
      It may take a few minutes for the status to show as *Registered*.
      
      
    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"
      
      
    3. Gdy status pokazuje Zarejestrowane, odśwież rejestrację dostawcy zasobów Microsoft.ContainerService używając polecenia az provider register.

      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.
  • Audyt jest jedynym obsługiwanym efektem polityki 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 weryfikacji podpisanych obrazów przed ich wdrożeniem w klastrach AKS. Aktywacja integralności obrazu w klastrze wdraża Ratify pod. Ten Ratify pod 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, webhook kontrolera dostępu dla Open Policy Agent (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łącz integralność obrazów na klastrze AKS

Uwaga

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

  • Utwórz przypisanie zasad z inicjatywą zasad AKS [Preview]: Use Image Integrity to ensure only trusted images are deployed za pomocą polecenia az policy assignment create.

    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

Polityka wdraża funkcję integralności obrazu w klastrze, gdy wykrywa jakiekolwiek 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}

Ustawienie konfiguracji weryfikacji

Aby integralność obrazu mogła być prawidłowo zweryfikowana dla podpisanego obrazu docelowego, należy ustawić Ratify konfiguracje za pomocą K8s CRDs przy użyciu kubectl.

W tym artykule używamy certyfikatu CA z podpisem własnym z oficjalnej dokumentacji Ratify, aby skonfigurować weryfikację. Aby uzyskać więcej przykładów, zobacz 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: KeyManagementProvider
    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 VerifyConfig do swojego klastra, używając polecenia kubectl apply.

    kubectl apply -f verify-config.yaml
    

Wdróż przykładowe obrazy do klastra 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

Usunięcie inicjatywy politycznej

  • Najpierw należy usunąć inicjatywę polityki przy użyciu polecenia az policy assignment delete.

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

Dodatek do Diable

  • Następnie wyłącz dodatek Image Integrity na klastrze, używając polecenia az aks update z flagą --disable-image-integrity.

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

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