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.
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:
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 diaktifkan dengan Pengeluar Sertifikat OIDC. Untuk membuat kluster baru atau memperbarui kluster yang ada, lihat Mengonfigurasi kluster AKS dengan Pengeluar Sertifikat OIDC.
EnableImageIntegrityPreview
Bendera fitur danAKS-AzurePolicyExternalData
terdaftar di langganan Azure Anda. Daftarkan bendera fitur menggunakan perintah berikut:Daftarkan
EnableImageIntegrityPreview
bendera fitur danAKS-AzurePolicyExternalData
menggunakanaz 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 beberapa menit agar status ditampilkan sebagai Terdaftar.
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"
Setelah status menunjukkan Terdaftar, refresh pendaftaran
Microsoft.ContainerService
penyedia sumber daya menggunakanaz provider register
perintah .az provider register --namespace Microsoft.ContainerService
- 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 (ACR) produksi.
- 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.
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:
- Mendamaikan sertifikat dari Azure Key Vault sesuai konfigurasi yang Anda siapkan melalui
Ratify
CRD. - 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).
- Menentukan apakah gambar target ditandatangani dengan sertifikasi tepercaya dan karenanya dianggap tepercaya.
AzurePolicy
danGatekeeper
gunakan hasil validasi sebagai status kepatuhan untuk memutuskan apakah akan mengizinkan permintaan penyebaran.
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 menggunakanaz 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.
Catatan
Kebijakan ini menyebarkan fitur Integritas Gambar pada kluster Anda saat mendeteksi operasi pembaruan apa pun pada kluster. Jika Anda ingin segera mengaktifkan fitur, 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}
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.
Buat
VerifyConfig
file bernamaverify-config.yaml
dan salin di 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: - "*"
Terapkan ke
VerifyConfig
kluster Anda menggunakankubectl apply
perintah .kubectl apply -f verify-config.yaml
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 pada kluster Anda menggunakan
az aks update
perintah dengan--disable-image-integrity
bendera .az aks update --resource-group myResourceGroup --name MyManagedCluster --disable-image-integrity
Hapus inisiatif kebijakan menggunakan
az policy assignment delete
perintah .az policy assignment delete --name 'deploy-trustedimages'
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).
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: