İmzalı görüntüleri Azure Kubernetes Service (AKS) kümelerinize dağıtmadan önce doğrulamak için Görüntü Bütünlüğünü kullanma (Önizleme)

Azure Kubernetes Service (AKS) ve temel kapsayıcı modeli, buluta özel uygulamalar için daha fazla ölçeklenebilirlik ve yönetilebilirlik sağlar. AKS ile sisteminizin çalışma zamanı gereksinimlerine göre esnek yazılım uygulamaları başlatabilirsiniz. Ancak bu esneklik yeni zorluklara neden olabilir.

Bu uygulama ortamlarında, imzalı kapsayıcı görüntülerinin kullanılması, dağıtımlarınızın güvenilir bir varlıktan oluşturulduğundan ve görüntülerin oluşturulduktan sonra değiştirilmediğini doğrulamaya yardımcı olur. Görüntü Bütünlüğü, AKS kümelerinize yalnızca imzalı görüntülerin dağıtıldığını doğrulamak için Azure İlkesi yerleşik bir tanım eklemenize olanak tanıyan bir hizmettir.

Not

Görüntü Bütünlüğü, Ratify temel alan bir özelliktir. Bir AKS kümesinde özellik adı ve özellik adı ImageIntegrity’dir; ilgili Image Integrity podlarının adlarında Ratify bulunur.

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği kapsamında kısmen, mümkün olan en iyi çaba esasıyla desteklenir. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

Önkoşullar

  • Azure aboneliği. Azure aboneliğiniz yoksa ücretsiz hesap oluşturabilirsiniz.

  • Azure CLI veya Azure PowerShell.

  • aks-preview CLI uzantısı sürüm 0.5.96 veya üzeri.

  • KÜMEnizde AKS için Azure İlkesi eklentisinin etkinleştirildiğinden emin olun. Bu eklenti yüklü değilse, AKS için Azure İlkesi eklentisini yükleme bölümüne bakın.

  • OIDC Issuer etkinleştirilmiş bir AKS kümesi. Yeni bir küme oluşturmak veya mevcut bir kümeyi güncelleştirmek için bkz: OIDC Düzenleyicisi ile bir AKS kümesi yapılandırma.

  • Azure aboneliğinize kayıtlı EnableImageIntegrityPreview özellik bayrakları. Aşağıdaki komutları kullanarak özellik bayraklarını kaydedin:

    1. EnableImageIntegrityPreview komutunu kullanarak az feature register özellik bayraklarını kaydedin.

      # 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. komutunu kullanarak az feature show kayıt durumunu doğrulayın.

      # Verify the EnableImageIntegrityPreview feature flag registration status
      az feature show --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview"
      
      
    3. Durum Registered olarak göründüğünde, az provider register komutunu kullanarak Microsoft.ContainerService kaynak sağlayıcısının kaydını yenileyin.

      az provider register --namespace Microsoft.ContainerService
      

Dikkat edilecekler ve sınırlamalar

  • AKS kümelerinizin Kubernetes sürüm 1.26 veya üzerini çalıştırması gerekir.
  • Bu özelliği üretim Azure Container Registry (ACR) kayıt defterleri veya iş yükleri için kullanmamalısınız.
  • Görüntü Bütünlüğü, küme genelinde en fazla 200 benzersiz imzayı destekler.
  • Desteklenen tek doğrulayıcı Notation'dır.
  • Denetim desteklenen tek doğrulama ilkesi etkisidir.

Görüntü Bütünlüğü nasıl çalışır?

Görüntü Bütünlüğü için temel mimariyi gösteren ekran görüntüsü.

Görüntü Bütünlüğü, imzalı görüntüleri AKS kümelerinize dağıtmadan önce doğrulamak için Onayla, Azure İlkesi ve Ağ Geçidi Denetleyicisi'ni kullanır. Kümenizde İmaj Bütünlüğü'nü etkinleştirmek, bir Ratify pod oluşturur. Bu Ratify pod aşağıdaki görevleri gerçekleştirir:

  1. Ratify CRD’ler aracılığıyla ayarladığınız yapılandırmaya göre Azure Key Vault’taki sertifikaları eşitler.
  2. Doğrulama istekleri Azure İlkesi'den geldiğinde ACR'de depolanan imajlara erişir. Bu deneyimi etkinleştirmek için Azure İlkesi, Open Policy Agent (OPA) için bir kabul denetleyicisi webhook'u olan Gatekeeper'ı genişletir.
  3. Hedef görüntünün güvenilir bir sertifikayla imzalanıp imzalanmadığını ve bu nedenle güvenilir olarak kabul edilip edilmediğini belirler.
  4. AzurePolicy ve Gatekeeper doğrulama sonuçlarını uyumluluk durumu olarak kullanarak dağıtım isteğine izin verilip verilmeyeceğine karar verin.

AKS kümenizde Görüntü Bütünlüğünü Etkinleştirme

Not

Görüntü imzası doğrulaması, yönetişim odaklı bir senaryodur ve AKS kümelerinde görüntü imzalarını geniş ölçekte doğrulamak için Azure İlkesi'den yararlanır. Azure İlkesi’nin yerleşik tanım kitaplığında bulunan AKS’nin Image Integrity adlı yerleşik Azure İlkesi girişimini kullanmanızı öneririz.

  • AKS ilke girişimini [Preview]: Use Image Integrity to ensure only trusted images are deployed kullanarak az policy assignment create komutuyla bir ilke ataması oluşturun.

    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}
    

    Ratify pod, özelliği etkinleştirdikten sonra dağıtılır.

Not

İlke, kümede herhangi bir güncelleştirme işlemi algıladığında kümenize Görüntü Bütünlüğü özelliğini dağıtır. Özelliği hemen etkinleştirmek istiyorsanız komutunu kullanarak bir ilke düzeltmesi az policy remediation create oluşturmanız gerekir.

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}

Doğrulama yapılandırmalarını ayarlama

Image Integrity’nin hedef imzalı imajı doğru şekilde doğrulayabilmesi için, kubectl kullanarak K8s CRD’leri aracılığıyla Ratify yapılandırmalarını ayarlamanız gerekir.

Bu makalede, doğrulama yapılandırmalarını ayarlamak için resmi Onay belgelerinden otomatik olarak imzalanan bir CA sertifikası kullanacağız. Daha fazla örnek için CRD'leri Onaylama bölümüne bakın.

  1. Adlı VerifyConfig bir verify-config.yaml dosya oluşturun ve aşağıdaki YAML'de kopyalayın:

    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. VerifyConfig komutunu kullanarak kubectl apply kümenize uygulayın.

    kubectl apply -f verify-config.yaml
    

AKS kümenize örnek görüntüler dağıtma

  • komutunu kullanarak imzalı bir görüntü dağıtın kubectl run demo .

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

    Aşağıdaki örnek çıktı görüntü bütünlüğünün dağıtıma izin verdiği gösterir:

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

Kendi görüntülerinizi kullanmak istiyorsanız, görüntü imzalama yönergelerine bakın.

Görüntü Bütünlüğünü Devre Dışı Bırak

Politika inisiyatifini kaldır

  • İlk olarak, az policy assignment delete komutunu kullanarak politika girişimini kaldırmanız gerekir.

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

Diable eklenti

  • Ardından, az aks update komutunu ve --disable-image-integrity bayrağını kullanarak kümenizdeki Görüntü Bütünlüğü eklentisini devre dışı bırakın.

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

Sonraki adımlar

Bu makalede, imzalı görüntüleri Azure Kubernetes Service (AKS) kümelerinize dağıtmadan önce doğrulamak için Görüntü Bütünlüğünü kullanmayı öğrendiniz. Kendi kapsayıcılarınızı nasıl imzalayacağınızı öğrenmek istiyorsanız, Notary ve Azure Key Vault (Önizleme) kullanarak kapsayıcı görüntüleri oluşturma, imzalama ve doğrulama konusuna bakın.