Gunakan Integritas Gambar untuk memvalidasi gambar yang ditandatangani sebelum menyebarkannya ke kluster Azure Kubernetes Service (AKS) Anda (Pratinjau)

Azure Kubernetes Service (AKS) dan model kontainer yang mendasarnya memberikan peningkatan skalabilitas dan pengelolaan untuk aplikasi asli cloud. Dengan AKS, Anda dapat meluncurkan aplikasi perangkat lunak yang fleksibel sesuai dengan kebutuhan runtime sistem Anda. Namun, fleksibilitas ini dapat memperkenalkan tantangan baru.

Di lingkungan aplikasi ini, menggunakan gambar kontainer yang ditandatangani membantu memverifikasi bahwa penyebaran Anda dibangun dari entitas tepercaya dan gambar tersebut belum dirusak sejak pembuatannya. Integritas Gambar adalah layanan yang memungkinkan Anda menambahkan definisi bawaan Azure Policy untuk memverifikasi bahwa hanya gambar yang ditandatangani yang disebarkan ke kluster AKS Anda.

Catatan

Integritas Gambar adalah fitur berdasarkan Ratify. Pada kluster AKS, nama fitur dan nama properti adalah ImageIntegrity, sementara nama Pod Integritas Gambar yang relevan berisi Ratify.

Penting

Fitur pratinjau AKS tersedia berdasarkan layanan mandiri. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan mereka dikecualikan dari perjanjian tingkat layanan dan garansi terbatas. Pratinjau AKS sebagian dicakup oleh dukungan pelanggan berdasarkan upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:

Prasyarat

  • Langganan Azure. Jika Anda tidak memiliki langganan Azure, Anda dapat membuat akun gratis.

  • Azure CLI atau Azure PowerShell.

  • aks-preview Ekstensi CLI versi 0.5.96 atau yang lebih baru.

  • Pastikan add-on Azure Policy untuk AKS diaktifkan pada kluster Anda. Jika Anda tidak menginstal add-on ini, lihat Menginstal add-on Azure Policy untuk AKS.

  • Kluster AKS diaktifkan dengan Pengeluar Sertifikat OIDC. Untuk membuat kluster baru atau memperbarui kluster yang ada, lihat Mengonfigurasi kluster AKS dengan Pengeluar Sertifikat OIDC.

  • Bendera EnableImageIntegrityPreview fitur dan AKS-AzurePolicyExternalData yang terdaftar di langganan Azure Anda. Daftarkan bendera fitur menggunakan perintah berikut:

    1. Daftarkan EnableImageIntegrityPreview bendera fitur dan AKS-AzurePolicyExternalData menggunakan az feature register perintah .

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

      Mungkin perlu waktu beberapa menit agar status ditampilkan sebagai Terdaftar.

    2. Verifikasi status pendaftaran menggunakan az feature show perintah .

      # 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. Setelah status menunjukkan Terdaftar, refresh pendaftaran Microsoft.ContainerService penyedia sumber daya menggunakan az provider register perintah .

      az provider register --namespace Microsoft.ContainerService
      

Pertimbangan dan batasan

  • Kluster AKS Anda harus menjalankan Kubernetes versi 1.26 atau lebih tinggi.
  • Anda tidak boleh menggunakan fitur ini untuk registri atau beban kerja Azure Container Registry produksi (ACR).
  • Integritas Gambar mendukung maksimal 200 tanda tangan unik secara bersamaan di seluruh kluster.
  • Notasi adalah satu-satunya pemverifikasi yang didukung.
  • Audit adalah satu-satunya efek kebijakan verifikasi yang didukung.

Cara kerja Integritas Gambar

Cuplikan layar memperlihatkan arsitektur dasar untuk Integritas Gambar.

Integritas Gambar menggunakan Ratify, Azure Policy, dan Gatekeeper untuk memvalidasi gambar yang ditandatangani sebelum menyebarkannya ke kluster AKS Anda. Mengaktifkan Integritas Gambar pada kluster Anda akan menyebarkan Ratify pod. Pod ini Ratify melakukan tugas-tugas berikut:

  1. Merekonsiliasi sertifikat dari Azure Key Vault sesuai konfigurasi yang Anda siapkan melalui Ratify CRD.
  2. Mengakses gambar yang disimpan di ACR saat permintaan validasi berasal dari Azure Policy. Untuk mengaktifkan pengalaman ini, Azure Policy memperluas Gatekeeper, webhook pengontrol penerimaan untuk Open Policy Agent (OPA).
  3. Menentukan apakah gambar target ditandatangani dengan sertifikasi tepercaya dan oleh karena itu dianggap sebagai tepercaya.
  4. AzurePolicy dan Gatekeeper menggunakan hasil validasi sebagai status kepatuhan untuk memutuskan apakah akan mengizinkan permintaan penyebaran.

Mengaktifkan Integritas Gambar pada kluster AKS Anda

Catatan

Verifikasi tanda tangan gambar adalah skenario berorientasi tata kelola dan memanfaatkan Azure Policy untuk memverifikasi tanda tangan gambar pada kluster AKS dalam skala besar. Sebaiknya gunakan inisiatif Azure Policy bawaan Integritas Gambar AKS, yang tersedia di pustaka definisi bawaan Azure Policy.

  • Buat penetapan kebijakan dengan inisiatif [Preview]: Use Image Integrity to ensure only trusted images are deployed kebijakan AKS menggunakan az policy assignment create perintah .

    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}
    

    Pod disebarkan Ratify setelah Anda mengaktifkan fitur tersebut.

Catatan

Kebijakan ini menyebarkan fitur Integritas Gambar pada kluster Anda saat mendeteksi operasi pembaruan apa pun pada kluster. Jika Anda ingin segera mengaktifkan fitur ini, Anda perlu membuat remediasi kebijakan menggunakan az policy remediation create perintah .

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}

Menyiapkan konfigurasi verifikasi

Agar Integritas Gambar memverifikasi gambar yang ditandatangani target dengan benar, Anda perlu menyiapkan Ratify konfigurasi melalui CRD K8s menggunakan kubectl.

Dalam artikel ini, kami menggunakan sertifikasi CA yang ditandatangani sendiri dari dokumentasi resmi Ratify untuk menyiapkan konfigurasi verifikasi. Untuk contoh selengkapnya, lihat Meratifikasi CRD.

  1. Buat VerifyConfig file bernama verify-config.yaml dan salin dalam YAML berikut:

    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. Terapkan ke VerifyConfig kluster Anda menggunakan kubectl apply perintah .

    kubectl apply -f verify-config.yaml
    

Menyebarkan gambar sampel ke kluster AKS Anda

  • Sebarkan gambar yang ditandatangani menggunakan kubectl run demo perintah .

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

    Contoh output berikut menunjukkan bahwa Integritas Gambar memungkinkan penyebaran:

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

Jika Anda ingin menggunakan gambar Anda sendiri, lihat panduan untuk penandatanganan gambar.

Nonaktifkan Integritas Gambar

  • Nonaktifkan Integritas Gambar pada kluster Anda menggunakan az aks update perintah dengan --disable-image-integrity bendera .

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

Menghapus inisiatif kebijakan

  • Hapus inisiatif kebijakan menggunakan az policy assignment delete perintah .

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

Langkah berikutnya

Dalam artikel ini, Anda mempelajari cara menggunakan Integritas Gambar untuk memvalidasi gambar yang ditandatangani sebelum menyebarkannya ke kluster Azure Kubernetes Service (AKS). Jika Anda ingin mempelajari cara menandatangani kontainer Anda sendiri, lihat Membangun, menandatangani, dan memverifikasi gambar kontainer menggunakan Notaris dan Azure Key Vault (Pratinjau).