Gunakan Integritas Gambar untuk memvalidasi gambar yang ditandatangani sebelum menyebarkannya ke kluster Azure Kubernetes Service (AKS) (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 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.

Nota

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 atas dasar layanan mandiri dan pendaftaran sukarela. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan pratinjau tersebut dikecualikan dari perjanjian tingkat layanan (SLA) serta garansi terbatas. Pratinjau AKS sebagian didukung oleh dukungan pelanggan berdasarkan upaya terbaik yang dapat dilakukan. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:

Prasyarat

  • Sebuah 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 di kluster Anda. Jika Anda tidak menginstal add-on ini, lihat Menginstal add-on Azure Policy untuk AKS.

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

  • Flag fitur EnableImageIntegrityPreview yang terdaftar pada langganan Azure Anda. Daftarkan bendera fitur menggunakan perintah berikut:

    1. Daftarkan flag fitur EnableImageIntegrityPreview menggunakan perintah az feature register.

      # 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. Verifikasi status pendaftaran menggunakan az feature show perintah .

      # Verify the EnableImageIntegrityPreview feature flag registration status
      az feature show --namespace "Microsoft.ContainerService" --name "EnableImageIntegrityPreview"
      
      
    3. Setelah status menunjukkan Terdaftar, perbarui pendaftaran penyedia sumber daya menggunakan perintah Microsoft.ContainerService.

      az provider register --namespace Microsoft.ContainerService
      

Pertimbangan dan keterbatasan

  • Kluster AKS Anda harus menjalankan Kubernetes versi 1.26 atau lebih tinggi.
  • Anda sebaiknya tidak menggunakan fitur ini untuk registri produksi atau beban kerja pada Azure Container Registry (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 menyebarkan Ratify pod. Pod ini Ratify melakukan tugas-tugas berikut:

  1. Mendamaikan 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 kemampuan Gatekeeper, yang merupakan webhook pengontrol penerimaan untuk Open Policy Agent (OPA).
  3. Menentukan apakah gambar target ditandatangani dengan sertifikasi tepercaya dan karenanya dianggap tepercaya.
  4. AzurePolicy dan Gatekeeper gunakan hasil validasi sebagai status kepatuhan untuk memutuskan apakah akan mengizinkan permintaan penyebaran.

Mengaktifkan Integritas Gambar pada kluster AKS Anda

Nota

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 untuk Integritas Gambar AKS, yang tersedia di pustaka definisi bawaan Azure Policy.

  • Buat penetapan kebijakan dengan menggunakan inisiatif kebijakan AKS [Preview]: Use Image Integrity to ensure only trusted images are deployed menggunakan perintah 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}
    

    Pod Ratify dikerahkan setelah Anda mengaktifkan fitur.

Nota

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 penyelesaian kebijakan menggunakan perintah 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}

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 YAML berikut ini:

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

    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

Menghapus inisiatif kebijakan

  • Pertama, Anda harus menghapus inisiatif kebijakan menggunakan az policy assignment delete perintah .

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

Add-on dapat dinonaktifkan

  • Kemudian nonaktifkan add-on Integritas Gambar pada kluster Anda menggunakan perintah az aks update, dengan opsi --disable-image-integrity.

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

Langkah selanjutnya

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