Memahami Azure Policy untuk kluster Kubernetes
Azure Policy memperluas Gatekeeper v3, webhook pengontrol penerimaan untuk Open Policy Agent (OPA), untuk menerapkan penegakan dan perlindungan skala besar pada komponen kluster Anda secara terpusat dan konsisten. Komponen kluster mencakup pod, kontainer, dan namespace.
Azure Policy memungkinkan pengelolaan dan pelaporan status kepatuhan komponen kluster Kubernetes Anda dari satu tempat. Dengan menggunakan Add-on atau Ekstensi Azure Policy, mengatur komponen kluster Anda ditingkatkan dengan fitur Azure Policy, seperti kemampuan untuk menggunakan pemilih dan penimpaan untuk peluncuran dan pembatalan kebijakan yang aman.
Azure Policy untuk Kubernetes mendukung lingkungan kluster berikut:
- Azure Kubernetes Service (AKS), melalui Add-on Azure Policy untuk AKS
- Azure Arc mengaktifkan Kubernetes, melalui Ekstensi Azure Policy untuk Arc
Penting
Model Helm Add-on Azure Policy dan add-on untuk AKS Engine sudah tidak digunakan lagi. Ikuti instruksi untuk menghapus add-on.
Gambaran Umum
Dengan memasang add-on atau ekstensi Azure Policy di kluster Kubernetes Anda, Azure Policy menjalankan fungsi berikut:
- Memeriksa dengan layanan Azure Policy untuk penetapan kebijakan ke kluster.
- Menyebarkan definisi kebijakan ke dalam kluster sebagai templat batasan dan batasan sumber daya kustom atau sebagai sumber daya templat mutasi (tergantung pada konten definisi kebijakan).
- Melaporkan detail audit dan kepatuhan kembali ke layanan Azure Policy.
Untuk mengaktifkan dan menggunakan Azure Policy dengan kluster Kubernetes, ambil tindakan berikut ini:
Konfigurasikan kluster Kubernetes Anda dan instal add-on Azure Kubernetes Service (AKS) atau Ekstensi Azure Policy untuk kluster Kubernetes berkemampuan Arc (bergantung pada jenis kluster Anda).
Catatan
Untuk masalah umum dengan instalasi, lihat Memecahkan Masalah - Add-on Azure Policy.
Membuat atau menggunakan sampel definisi Azure Policy untuk Kubernetes
Tinjau batasan dan rekomendasi di bagian FAQ kami
Menginstal Add-on Azure Policy untuk AKS
Add-on Azure Policy untuk AKS adalah bagian dari Kubernetes versi 1.27 dengan dukungan jangka panjang (LTS).
Prasyarat
Daftarkan penyedia sumber daya dan fitur pratinjau.
portal Azure:
Daftarkan
Microsoft.PolicyInsights
penyedia sumber daya. Untuk langkah-langkah, lihat Penyedia dan jenis.Azure CLI:
# Log in first with az login if you're not using Cloud Shell # Provider register: Register the Azure Policy provider az provider register --namespace Microsoft.PolicyInsights
Anda memerlukan Azure CLI versi 2.12.0 atau yang lebih baru terinstal dan terkonfigurasi. Untuk menemukan versi, jalankan
az --version
perintah . Jika Anda perlu menginstal atau meningkatkan, lihat Cara menginstal Azure CLI.Kluster AKS harus merupakan versi Kubernetes yang didukung di Azure Kubernetes Service (AKS). Gunakan skrip berikut untuk memvalidasi versi kluster AKS Anda:
# Log in first with az login if you're not using Cloud Shell # Look for the value in kubernetesVersion az aks list
Buka port untuk ekstensi Azure Policy. Ekstensi Azure Policy menggunakan domain dan port ini untuk mengambil definisi kebijakan dan penugasan serta melaporkan kepatuhan kluster kembali ke Azure Policy.
Domain Port data.policy.core.windows.net
443
store.policy.core.windows.net
443
login.windows.net
443
dc.services.visualstudio.com
443
Setelah prasyarat selesai, instal Add-on Azure Policy di kluster AKS yang ingin Anda kelola.
Portal Azure
Luncurkan layanan AKS di portal Azure dengan memilih Semua layanan, lalu cari dan pilih layanan Kubernetes.
Pilih salah satu kluster AKS Anda.
Pilih Kebijakan di sisi kiri halaman layanan Kubernetes.
Di halaman utama, pilih tombol Aktifkan add-on.
Azure CLI
# Log in first with az login if you're not using Cloud Shell az aks enable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
Untuk memvalidasi bahwa instalasi add-on berhasil dan bahwa pod azure-policy dan gatekeeper berjalan, jalankan perintah berikut:
# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system
# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system
Terakhir, verifikasi bahwa add-on terbaru diinstal dengan menjalankan perintah Azure CLI ini, dengan mengganti <rg>
dengan nama grup sumber daya Anda dan <cluster-name>
dengan nama kluster AKS Anda: az aks show --query addonProfiles.azurepolicy -g <rg> -n <cluster-name>
. Hasilnya akan terlihat mirip dengan output berikut untuk kluster menggunakan perwakilan layanan:
{
"config": null,
"enabled": true,
"identity": null
}
Dan output berikut untuk kluster menggunakan identitas terkelola:
{
"config": null,
"enabled": true,
"identity": {
"clientId": "########-####-####-####-############",
"objectId": "########-####-####-####-############",
"resourceId": "<resource-id>"
}
}
Menginstal Ekstensi Azure Policy untuk Kubernetes dengan dukungan Azure Arc
Azure Policy untuk Kube memungkinkan pengelolaan dan pelaporan status kepatuhan kluster Kubernetes dari satu tempat. Dengan Ekstensi Azure Policy untuk kluster Kubernetes dengan dukungan Arc, Anda dapat mengatur komponen kluster Kubernetes dengan dukungan Arc, seperti pod dan kontainer.
Artikel ini menjelaskan cara untuk membuat, menampilkan status ekstensi, dan menghapus Azure Policy untuk ekstensi Kubernetes.
Untuk gambaran umum platform ekstensi, lihat ekstensi kluster Azure Arc.
Prasyarat
Jika Anda sudah menyebarkan Azure Policy untuk Kubernetes pada kluster Azure Arc menggunakan Helm secara langsung tanpa ekstensi, ikuti instruksi untuk menghapus bagan Helm. Setelah penghapusan selesai, Anda kemudian dapat melanjutkan.
Pastikan bahwa kluster Kubernetes Anda adalah distribusi yang didukung.
Catatan
Ekstensi Azure Policy for Arc didukung pada distribusi Kubernetes berikut.
Pastikan Anda memenuhi semua prasyarat umum untuk ekstensi Kubernetes yang tercantum di sini termasuk menghubungkan kluster Anda ke Azure Arc.
Catatan
Ekstensi Azure Policy didukung untuk kluster Kube yang diaktifkan Arc di wilayah ini.
Buka port untuk ekstensi Azure Policy. Ekstensi Azure Policy menggunakan domain dan port ini untuk mengambil definisi kebijakan dan penugasan serta melaporkan kepatuhan kluster kembali ke Azure Policy.
Domain Port data.policy.core.windows.net
443
store.policy.core.windows.net
443
login.windows.net
443
dc.services.visualstudio.com
443
Sebelum Anda menginstal ekstensi Azure Policy atau mengaktifkan salah satu fitur layanan, langganan Anda harus mengaktifkan
Microsoft.PolicyInsights
penyedia sumber daya.Catatan
Untuk mengaktifkan penyedia sumber daya, ikuti langkah-langkah di Penyedia sumber daya dan jenis atau jalankan perintah Azure CLI atau Azure PowerShell.
Azure CLI
# Log in first with az login if you're not using Cloud Shell # Provider register: Register the Azure Policy provider az provider register --namespace 'Microsoft.PolicyInsights'
Azure PowerShell
# Log in first with Connect-AzAccount if you're not using Cloud Shell # Provider register: Register the Azure Policy provider Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
Buat ekstensi Azure Policy
Catatan
Perhatikan hal-hal berikut untuk pembuatan ekstensi Azure Policy:
- Peningkatan otomatis diaktifkan secara default yang akan memperbarui versi kecil ekstensi Azure Policy jika ada perubahan baru yang diterapkan.
- Setiap variabel proksi yang disahkan sebagai parameter
connectedk8s
akan disebarkan ke ekstensi Azure Policy untuk mendukung proksi keluar.
Agar dapat membuat instans ekstensi, untuk kluster dengan Arc aktif, jalankan perintah berikut dengan mengganti <>
dengan nilai Anda:
az k8s-extension create --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --extension-type Microsoft.PolicyInsights --name <EXTENSION_INSTANCE_NAME>
Contoh:
az k8s-extension create --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --extension-type Microsoft.PolicyInsights --name azurepolicy
Contoh Output:
{
"aksAssignedIdentity": null,
"autoUpgradeMinorVersion": true,
"configurationProtectedSettings": {},
"configurationSettings": {},
"customLocationSettings": null,
"errorInfo": null,
"extensionType": "microsoft.policyinsights",
"id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-test-rg/providers/Microsoft.Kubernetes/connectedClusters/my-test-cluster/providers/Microsoft.KubernetesConfiguration/extensions/azurepolicy",
"identity": {
"principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"tenantId": null,
"type": "SystemAssigned"
},
"location": null,
"name": "azurepolicy",
"packageUri": null,
"provisioningState": "Succeeded",
"releaseTrain": "Stable",
"resourceGroup": "my-test-rg",
"scope": {
"cluster": {
"releaseNamespace": "kube-system"
},
"namespace": null
},
"statuses": [],
"systemData": {
"createdAt": "2021-10-27T01:20:06.834236+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2021-10-27T01:20:06.834236+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/extensions",
"version": "1.1.0"
}
Tampilkan ekstensi Azure Policy
Untuk memastikan pembuatan instans ekstensi berhasil, dan memeriksa metadata ekstensi, jalankan perintah berikut dengan menggantikan <>
dengan nilai Anda:
az k8s-extension show --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>
Contoh:
az k8s-extension show --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --name azurepolicy
Untuk memvalidasi bahwa pemasangan ekstensi berhasil dan pod Azure-policy dan gatekeeper berjalan, jalankan perintah berikut:
# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system
# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system
Hapus ekstensi Azure Policy
Untuk menghapus instans ekstensi, jalankan perintah berikut dengan mengganti <>
dengan nilai Anda:
az k8s-extension delete --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>
Membuat definisi kebijakan
Struktur bahasa Azure Policy untuk mengelola Kubernetes mengikuti definisi kebijakan yang ada. Ada contoh file definisi yang tersedia untuk ditetapkan di pustaka kebijakan bawaan Azure Policy yang dapat digunakan untuk mengatur komponen kluster Anda.
Azure Policy untuk Kubernetes juga mendukung pembuatan definisi kustom di tingkat komponen untuk kluster Azure Kubernetes Service dan kluster Kubernetes dengan dukungan Azure Arc. Templat batasan dan sampel templat mutasi tersedia di pustaka komunitas Gatekeeper. Ekstensi Visual Studio Code Azure Policy dapat digunakan untuk membantu menerjemahkan templat batasan atau templat mutasi yang ada ke definisi kebijakan Azure Policy kustom.
Dengan mode Microsoft.Kubernetes.Data
Penyedia Sumber Daya , efek audit, tolak, nonaktifkan, dan mutasi digunakan untuk mengelola kluster Kubernetes Anda.
Audit dan tolak harus menyediakan details
properti khusus untuk bekerja dengan Kerangka Kerja Batasan OPA dan Gatekeeper v3.
Sebagai bagian dari properti details.templateInfo atau details.constraintInfo dalam definisi kebijakan, Azure Policy meneruskan URI atau Base64Encoded
nilai CustomResourceDefinitions (CRD) ini ke add-on. Rego adalah bahasa yang didukung OPA dan Gatekeeper untuk memvalidasi permintaan ke kluster Kubernetes. Dengan mendukung standar yang ada untuk manajemen Kubernetes, Azure Policy memungkinkan untuk menggunakan kembali aturan yang ada dan memasangkannya dengan Azure Policy untuk pengalaman pelaporan kepatuhan cloud terpadu. Untuk informasi selengkapnya, lihat Apa itu Rego?.
Menetapkan definisi kebijakan
Untuk menetapkan definisi kebijakan ke kluster Kubernetes, Anda harus diberi operasi penetapan kebijakan kontrol akses berbasis peran Azure (Azure RBAC) yang sesuai. Peran bawaan Azure Kontributor Kebijakan Sumber Daya dan Pemilik memiliki operasi ini. Untuk mempelajari selengkapnya, lihat Izin Azure RBAC di Azure Policy.
Temukan definisi kebijakan bawaan untuk mengelola kluster Anda menggunakan portal Microsoft Azure dengan langkah-langkah berikut. Jika menggunakan definisi kebijakan kustom, cari berdasarkan nama atau kategori yang Anda buat.
Mulai layanan Azure Policy di portal Azure. Pilih Semua layanan di panel kiri lalu cari dan pilih Kebijakan.
Di panel kiri halaman Azure Policy, pilih Definisi.
Dari kotak daftar dropdown Kategori, gunakan Pilih semua untuk menghapus filter, lalu pilih Kubernetes.
Pilih definisi kebijakan, lalu pilih tombol Tetapkan.
Atur Cakupan ke grup manajemen, langganan, atau grup sumber daya kluster Kubernetes tempat penetapan kebijakan berlaku.
Catatan
Ketika menetapkan Azure Policy untuk definisi Kubernetes, Cakupan harus menyertakan sumber daya kluster.
Berikan penetapan kebijakan Nama dan Deskripsi yang dapat Anda gunakan untuk mengidentifikasinya dengan mudah.
Atur Penegakan kebijakan ke salah satu nilai berikut:
Diaktifkan - Tegakkan kebijakan pada kluster. Permintaan penerimaan Kubernetes dengan pelanggaran ditolak.
Dinonaktifkan - Jangan tegakkan kebijakan pada kluster. Permintaan penerimaan Kubernetes dengan pelanggaran tidak ditolak. Hasil penilaian kepatuhan masih tersedia. Saat Anda meluncurkan definisi kebijakan baru untuk menjalankan kluster, opsi Dinonaktifkan sangat membantu untuk menguji definisi kebijakan karena permintaan penerimaan dengan pelanggaran tidak ditolak.
Pilih Selanjutnya.
Menetapkan nilai parameter
- Untuk mengecualikan namespace Kubernetes dari evaluasi kebijakan, tentukan daftar namespace dalam parameter Namespace exclusions. Rekomendasinya adalah mengecualikan: kube-system, gatekeeper-system, dan azure-arc.
Pilih Tinjau + buat.
Secara bergantian, gunakan mulai cepat Tetapkan kebijakan - Portal untuk menemukan dan menetapkan kebijakan Kubernetes. Cari definisi kebijakan Kubernetes alih-alih contoh vm audit.
Penting
Definisi kebijakan bawaan tersedia untuk kluster Kubernetes dalam kategori Kubernetes. Untuk daftar definisi kebijakan bawaan, lihat sampel Kubernetes.
Evaluasi kebijakan
Add-on memeriksa dengan layanan Azure Policy untuk perubahan dalam penetapan kebijakan setiap 15 menit. Selama siklus refresh ini, add-on memeriksa perubahan. Perubahan ini memicu membuat, memperbarui, atau menghapus templat dan batasan.
Dalam cluster Kubernetes, jika namespace memiliki label yang sesuai dengan cluster, permintaan masuk dengan pelanggaran tidak akan ditolak. Hasil penilaian kepatuhan masih tersedia.
- Kluster Kubernetes yang mendukung Azure Arc:
admission.policy.azure.com/ignore
Catatan
Meskipun admin kluster mungkin memiliki izin untuk membuat dan memperbarui templat batasan dan sumber daya batasan yang diinstal oleh Add-on Azure Policy, ini tidak didukung skenario karena pembaruan manual ditimpa. Gatekeeper terus mengevaluasi kebijakan yang ada sebelum menginstal add-on dan menetapkan definisi kebijakan Azure Policy.
Setiap 15 menit, add-on memanggil pemindaian penuh kluster. Setelah mengumpulkan detail pemindaian penuh dan evaluasi real-time oleh Gatekeeper tentang perubahan yang dicoba pada kluster, add-on melaporkan hasilnya kembali ke Azure Policy untuk dimasukkan dalam detail kepatuhan seperti penugasan Azure Policy apa pun. Hanya hasil untuk penetapan kebijakan aktif yang dikembalikan selama siklus audit. Hasil audit juga dapat dilihat sebagai pelanggaran yang tercantum dalam bidang status dari kendala yang gagal. Untuk detail tentang sumber daya yang tidak sesuai, lihat Detail komponen untuk mode Penyedia Sumber Daya.
Catatan
Setiap laporan kepatuhan dalam Azure Policy untuk kluster Kubernetes mencakup semua pelanggaran dalam 45 menit terakhir. Tanda waktu menunjukkan kapan pelanggaran terjadi.
Beberapa pertimbangan lain:
Jika langganan kluster terdaftar di Microsoft Defender untuk Cloud, kebijakan Microsoft Defender untuk Cloud Kubernetes diterapkan pada kluster secara otomatis.
Ketika kebijakan tolak diterapkan pada kluster dengan sumber daya Kubernetes yang ada, sumber daya apa pun yang sudah ada sebelumnya yang tidak sesuai dengan kebijakan baru terus berjalan. Ketika sumber daya yang tidak patuh akan dijadwal ulang pada node yang berbeda, Gatekeeper memblokir pembuatan sumber daya.
Saat kluster memiliki kebijakan tolak yang memvalidasi sumber daya, pengguna tidak mendapatkan pesan penolakan saat membuat penyebaran. Misalnya, pertimbangkan penyebaran Kubernetes yang berisi
replicasets
pod dan . Saat pengguna menjalankankubectl describe deployment $MY_DEPLOYMENT
, pengguna tidak mengembalikan pesan penolakan sebagai bagian dari peristiwa. Namun,kubectl describe replicasets.apps $MY_DEPLOYMENT
mengembalikan peristiwa yang terkait dengan penolakan.
Catatan
Kontainer init mungkin disertakan selama evaluasi kebijakan. Untuk melihat apakah kontainer init disertakan, tinjau CRD untuk deklarasi berikut atau serupa:
input_containers[c] {
c := input.review.object.spec.initContainers[_]
}
Konflik templat batasan
Jika templat batasan memiliki nama metadata sumber daya yang sama, tetapi definisi kebijakan merujuk sumber di lokasi yang berbeda, definisi kebijakan dianggap bertentangan. Contoh: Dua definisi kebijakan mereferensikan file yang sama yang template.yaml
disimpan di lokasi sumber yang berbeda seperti penyimpanan templat Azure Policy (store.policy.core.windows.net
) dan GitHub.
Ketika definisi kebijakan dan templat batasannya ditetapkan tetapi belum diinstal pada kluster dan berkonflik, definisi tersebut dilaporkan sebagai konflik dan tidak diinstal ke dalam kluster hingga konflik diselesaikan. Demikian juga, definisi kebijakan yang ada dan templat batasannya yang sudah ada di kluster yang bertentangan dengan definisi kebijakan yang baru ditetapkan terus berfungsi secara normal. Jika tugas yang ada diperbarui dan ada kegagalan untuk menyinkronkan templat batasan, kluster juga ditandai sebagai konflik. Untuk semua pesan konflik, lihat alasan kepatuhan mode Penyedia Sumber AKS
Pencatatan
Sebagai controller/container Kubernetes, pod azure-policy maupun dan gatekeeper menyimpan log di kluster Kubernetes. Secara umum, log azure-policy dapat digunakan untuk memecahkan masalah dengan penyerapan kebijakan ke kluster dan pelaporan kepatuhan. Log pod gatekeeper-controller-manager dapat digunakan untuk memecahkan masalah penolakan runtime. Log pod gatekeeper-audit dapat digunakan untuk memecahkan masalah audit sumber daya yang ada. Log dapat diekspos di halaman Insights dari kluster Kubernetes. Untuk informasi selengkapnya, lihat Memantau performa kluster Kubernetes dengan Azure Monitor untuk kontainer.
Untuk melihat log add-on, gunakan kubectl
:
# Get the azure-policy pod name installed in kube-system namespace
kubectl logs <azure-policy pod name> -n kube-system
# Get the gatekeeper pod name installed in gatekeeper-system namespace
kubectl logs <gatekeeper pod name> -n gatekeeper-system
Jika Anda mencoba memecahkan masalah ComplianceReasonCode tertentu yang muncul di hasil kepatuhan, Anda dapat mencari log pod azure-policy untuk kode tersebut untuk melihat kesalahan lengkap yang menyertainya.
Untuk informasi selengkapnya, lihat Penelusuran Kesalahan Gatekeeper di dokumentasi Gatekeeper.
Lihat artefak Gatekeeper
Setelah add-on mengunduh penugasan kebijakan dan menginstal templat batasan dan batasan pada kluster, itu akan menganotasi informasi Azure Policy seperti ID penugasan kebijakan dan ID definisi kebijakan. Untuk mengonfigurasikan klien Anda untuk menampilkan artefak terkait add-on, gunakan langkah-langkah berikut:
Siapkan
kubeconfig
untuk kluster.Untuk kluter Azure Kubernetes Service, gunakan Azure CLI berikut:
# Set context to the subscription az account set --subscription <YOUR-SUBSCRIPTION> # Save credentials for kubeconfig into .kube in your home folder az aks get-credentials --resource-group <RESOURCE-GROUP> --name <CLUSTER-NAME>
Tes koneksi kluster.
Jalankan perintah
kubectl cluster-info
. Eksekusi yang sukses memiliki setiap layanan yang sesuai dengan URL tempatnya berjalan.
Menampilkan templat batasan add-on
Untuk melihat templat batasan yang diunduh oleh add-on, jalankan kubectl get constrainttemplates
.
Batasan templat yang diawali dengan k8sazure
adalah yang diinstal oleh add-on.
Menampilkan templat mutasi add-on
Untuk melihat templat mutasi yang diunduh oleh add-on, jalankan kubectl get assign
, kubectl get assignmetadata
, dan kubectl get modifyset
.
Dapatkan pemetaan Azure Policy
Untuk mengidentifikasi pemetaan antara templat batasan yang diunduh ke kluster dan definisi kebijakan, gunakan kubectl get constrainttemplates <TEMPLATE> -o yaml
. Hasilnya tampak mirip dengan output berikut:
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
annotations:
azure-policy-definition-id: /subscriptions/<SUBID>/providers/Microsoft.Authorization/policyDefinitions/<GUID>
constraint-template-installed-by: azure-policy-addon
constraint-template: <URL-OF-YAML>
creationTimestamp: "2021-09-01T13:20:55Z"
generation: 1
managedFields:
- apiVersion: templates.gatekeeper.sh/v1beta1
fieldsType: FieldsV1
...
<SUBID>
adalah ID langganan dan <GUID>
adalah ID dari definisi kebijakan yang dipetakan.
<URL-OF-YAML>
adalah lokasi sumber dari templat batasan diunduh add-on untuk diinstal pada kluster.
Melihat batasan yang terkait dengan templat batasan
Setelah Anda memiliki nama templat batasan yang diunduh add-on, Anda dapat menggunakan nama untuk melihat batasan terkait. Gunakan kubectl get <constraintTemplateName>
untuk mendapatkan daftar.
Batasan yang dipasang oleh add-on diawali dengan azurepolicy-
.
Melihat detail batasan
Batasan memiliki detail mengenai pelanggaran dan pemetaan untuk definisi dan penugasan kebijakan. Untuk melihat detailnya, gunakan kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml
. Hasilnya tampak mirip dengan output berikut:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAzureContainerAllowedImages
metadata:
annotations:
azure-policy-assignment-id: /subscriptions/<SUB-ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Authorization/policyAssignments/<ASSIGNMENT-GUID>
azure-policy-definition-id: /providers/Microsoft.Authorization/policyDefinitions/<DEFINITION-GUID>
azure-policy-definition-reference-id: ""
azure-policy-setdefinition-id: ""
constraint-installed-by: azure-policy-addon
constraint-url: <URL-OF-YAML>
creationTimestamp: "2021-09-01T13:20:55Z"
spec:
enforcementAction: deny
match:
excludedNamespaces:
- kube-system
- gatekeeper-system
- azure-arc
parameters:
imageRegex: ^.+azurecr.io/.+$
status:
auditTimestamp: "2021-09-01T13:48:16Z"
totalViolations: 32
violations:
- enforcementAction: deny
kind: Pod
message: Container image nginx for container hello-world has not been allowed.
name: hello-world-78f7bfd5b8-lmc5b
namespace: default
- enforcementAction: deny
kind: Pod
message: Container image nginx for container hello-world has not been allowed.
name: hellow-world-89f8bfd6b9-zkggg
Pemecahan masalah add-on
Untuk informasi lebih lanjut tentang pemecahan masalah Add-on untuk Kubernetes, lihat bagian Kubernetes pada artikel pemecahan masalah Azure Policy.
Untuk ekstensi Azure Policy untuk masalah terkait ekstensi Arc, buka:
Untuk masalah terkait Azure Policy, buka:
Add-on Azure Policy untuk AKS Changelog
Add-on Azure Policy untuk AKS memiliki nomor versi yang menunjukkan versi gambar add-on. Karena dukungan fitur baru diperkenalkan pada Add-on, nomor versi ditingkatkan.
Bagian ini membantu Anda mengidentifikasi versi Add-on mana yang diinstal pada kluster Anda dan juga berbagi tabel historis versi Add-on Azure Policy yang diinstal per kluster AKS.
Identifikasi versi Add-on mana yang diinstal pada kluster Anda
Add-on Azure Policy menggunakan skema Penerapan Versi Semantik standar untuk setiap versi. Untuk mengidentifikasi versi Add-on Azure Policy yang digunakan, Anda dapat menjalankan perintah berikut: kubectl get pod azure-policy-<unique-pod-identifier> -n kube-system -o json | jq '.spec.containers[0].image'
Untuk mengidentifikasi versi Gatekeeper yang digunakan Add-on Azure Policy, Anda dapat menjalankan perintah berikut: kubectl get pod gatekeeper-controller-<unique-pod-identifier> -n gatekeeper-system -o json | jq '.spec.containers[0].image'
Terakhir, untuk mengidentifikasi versi kluster AKS yang Anda gunakan, ikuti panduan AKS yang ditautkan.
Versi add-on yang tersedia per setiap versi kluster AKS
1.7.1
Memperkenalkan CEL dan VAP. Common Expression Language (CEL) adalah bahasa ekspresi asli Kubernetes yang dapat digunakan untuk mendeklarasikan aturan validasi kebijakan. Memvalidasi fitur Kebijakan Penerimaan (VAP) menyediakan evaluasi kebijakan dalam pohon, mengurangi latensi permintaan penerimaan, dan meningkatkan keandalan dan ketersediaan. Tindakan validasi yang didukung termasuk Tolak, Peringatkan, dan Audit. Penulisan kebijakan kustom untuk CEL/VAP diizinkan, dan pengguna yang ada tidak perlu mengonversi Rego ke CEL karena mereka akan didukung dan digunakan untuk memberlakukan kebijakan. Untuk menggunakan CEL dan VAP, pengguna perlu mendaftar di bendera AKS-AzurePolicyK8sNativeValidation
fitur di Microsoft.ContainerService
namespace. Untuk informasi selengkapnya, lihat Dokumentasi Gatekeeper.
Peningkatan keamanan.
- Dirilis Sep 2024
- Kubernetes 1.27+ (generasi VAP hanya didukung pada 1.30+)
- Penjaga gerbang 3.17.1
1.7.0
Memperkenalkan ekspansi, fitur shift kiri yang memungkinkan Anda mengetahui di depan apakah sumber daya beban kerja Anda (Deployments, ReplicaSets, Jobs, dll.) akan menghasilkan pod yang dapat diterima. Perluasan tidak boleh mengubah perilaku kebijakan Anda; sebaliknya, itu hanya mengalihkan evaluasi Gatekeeper terhadap kebijakan yang dilingkup pod terjadi pada waktu penerimaan beban kerja daripada waktu penerimaan pod. Namun, untuk melakukan evaluasi ini, ia harus menghasilkan dan mengevaluasi pod bagaimana-jika yang didasarkan pada spesifikasi pod yang ditentukan dalam beban kerja, yang mungkin memiliki metadata yang tidak lengkap. Misalnya, pod bagaimana-jika tidak akan berisi referensi pemilik yang tepat. Karena risiko kecil perubahan perilaku kebijakan ini, kami memperkenalkan ekspansi sebagai dinonaktifkan secara default. Untuk mengaktifkan ekspansi untuk definisi kebijakan tertentu, atur .policyRule.then.details.source
ke All
. Bawaan akan segera diperbarui untuk mengaktifkan parameterisasi bidang ini. Jika Anda menguji definisi kebijakan dan menemukan bahwa pod bagaimana-jika yang dihasilkan untuk tujuan evaluasi tidak lengkap, Anda juga dapat menggunakan mutasi dengan sumber Generated
untuk mengubah pod bagaimana-jika. Untuk informasi selengkapnya tentang opsi ini, lihat dokumentasi Gatekeeper.
Peningkatan keamanan.
- Dirilis Juli 2024
- Kubernetes 1.27+
- Penjaga gerbang 3.16.3
1.6.1
Peningkatan keamanan.
- Dirilis Mei 2024
- Penjaga gerbang 3.14.2
1.5.0
Peningkatan keamanan.
- Dirilis Mei 2024
- Kubernetes 1.27+
- Penjaga gerbang 3.16.3
1.4.0
Mengaktifkan mutasi dan data eksternal secara default. Webhook bermutasi tambahan dan peningkatan validasi batas waktu webhook dapat menambahkan latensi ke panggilan dalam kasus terburuk. Juga memperkenalkan dukungan untuk melihat definisi kebijakan dan mengatur versi definisi dalam hasil kepatuhan.
- Dirilis Mei 2024
- Kubernetes 1.25+
- Penjaga gerbang 3.14.0
1.3.0
Memperkenalkan status kesalahan untuk kebijakan dalam kesalahan, memungkinkannya dibedakan dari kebijakan dalam status yang tidak patuh. Menambahkan dukungan untuk templat batasan v1 dan penggunaan parameter excludedNamespaces dalam kebijakan mutasi. Menambahkan pemeriksaan status kesalahan pada templat batasan pasca-penginstalan.
- Dirilis Februari 2024
- Kubernetes 1.25+
- Penjaga gerbang 3.14.0
1.2.1
- Dirilis Oktober 2023
- Kubernetes 1.25+
- Penjaga gerbang 3.13.3
1.1.0
- Dirilis Juli 2023
- Kubernetes 1.27+
- Penjaga gerbang 3.11.1
1.0.1
- Dirilis Juni 2023
- Kubernetes 1.24+
- Penjaga gerbang 3.11.1
1.0.0
Azure Policy untuk Kubernetes sekarang mendukung mutasi untuk memulihkan kluster AKS dalam skala besar!
Menghapus add-on
Menghapus add-on dari AKS
Untuk menghapus Add-on Azure Policy dari kluster AKS Anda, gunakan portal Azure atau Azure CLI:
Portal Azure
Luncurkan layanan AKS di portal Azure dengan memilih Semua layanan, lalu cari dan pilih layanan Kubernetes.
Pilih kluster AKS tempat Anda ingin menonaktifkan Add-on Azure Policy.
Pilih Kebijakan di sisi kiri halaman layanan Kubernetes.
Di halaman utama, pilih tombol Nonaktifkan add-on.
Azure CLI
# Log in first with az login if you're not using Cloud Shell az aks disable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
Menghapus add-on dari Kubernetes dengan dukungan Azure Arc
Catatan
Azure Policy model Helm Add-on sekarang tidak digunakan lagi. Anda harus memilih Ekstensi Azure Policy untuk Kubernetes yang diaktifkan Azure Arc sebagai gantinya.
Untuk menghapus Add-on Azure Policy dan Gatekeeper dari kluster Kubernetes dengan dukungan Azure Arc, jalankan perintah Helm berikut:
helm uninstall azure-policy-addon
Menghapus add-on dari Mesin AKS
Catatan
Produk Mesin AKS sekarang tidak digunakan lagi untuk pelanggan cloud publik Azure. Pertimbangkan untuk menggunakan Azure Kubernetes Service (AKS) untuk Kubernetes terkelola atau Penyedia API Kluster Azure untuk Kubernetes yang dikelola sendiri. Tidak ada fitur baru yang direncanakan; proyek ini hanya akan diperbarui untuk CVE & mirip, dengan Kubernetes 1.24 sebagai versi akhir untuk menerima pembaruan.
Untuk menghapus Add-on Azure Policy dan Gatekeeper dari kluster Mesin AKS Anda, gunakan metode yang selaras dengan cara add-on diinstal:
Jika diinstal dengan mengatur properti addons dalam definisi kluster untuk Mesin AKS:
Sebar ulang definisi kluster ke Mesin AKS setelah mengubah properti addons untuk azure-policy ke false:
"addons": [ { "name": "azure-policy", "enabled": false } ]
Untuk informasi selengkapnya, lihat Mesin AKS - Nonaktifkan Add-on Azure Policy.
Jika diinstal dengan Helm Charts, jalankan perintah Helm berikut:
helm uninstall azure-policy-addon
Batasan
- Untuk definisi Azure Policy umum dan batas penugasan, tinjau batas yang didokumentasikan Azure Policy
- Add-on Azure Policy untuk Kubernetes hanya dapat disebarkan ke kumpulan simpul Linux.
- Jumlah maksimum pod yang didukung oleh Add-on Azure Policy per kluster: 10.000
- Jumlah maksimum catatan yang tidak sesuai per kebijakan per kluster: 500
- Jumlah maksimum catatan yang tidak sesuai per langganan: 1 juta
- Instalasi Gatekeeper di luar Add-on Azure Policy tidak didukung. Hapus instalasi komponen apa pun yang diinstal oleh instalasi Gatekeeper sebelum mengaktifkan Add-on Azure Policy.
- Alasan ketidakpatuhuran tidak tersedia untuk mode Penyedia Sumber Daya Microsoft.Kubernetes.Data. Gunakan Detail komponen.
- Pengecualian tingkat komponen tidak didukung untuk mode Penyedia Sumber Daya. Dukungan parameter tersedia dalam definisi Azure Policy untuk mengecualikan dan menyertakan namespace tertentu.
metadata.gatekeeper.sh/requires-sync-data
Menggunakan anotasi dalam templat batasan untuk mengonfigurasi replikasi data dari kluster Anda ke dalam cache OPA saat ini hanya diizinkan untuk kebijakan bawaan. Alasannya adalah karena dapat secara dramatis meningkatkan penggunaan sumber daya pod Gatekeeper jika tidak digunakan dengan hati-hati.
Mengonfigurasi Konfigurasi Gatekeeper
Mengubah konfigurasi Gatekeeper tidak didukung, karena berisi pengaturan keamanan penting. Pengeditan pada konfigurasi direkonsiliasi.
Menggunakan data.inventory dalam templat batasan
Saat ini, beberapa kebijakan bawaan menggunakan replikasi data, yang memungkinkan pengguna menyinkronkan sumber daya pada kluster yang ada ke cache OPA dan mereferensikannya selama evaluasi AdmissionReview
permintaan. Kebijakan replikasi data dapat dibedakan dengan keberadaan data.inventory
di Rego, dan adanya metadata.gatekeeper.sh/requires-sync-data
anotasi, yang menginformasikan addon Azure Policy sumber daya mana yang perlu di-cache agar evaluasi kebijakan berfungsi dengan baik. Proses ini berbeda dari Gatekeeper mandiri, di mana anotasi ini deskriptif, bukan preskriptif.
Replikasi data saat ini diblokir untuk digunakan dalam definisi kebijakan kustom, karena mereplikasi sumber daya dengan jumlah instans tinggi dapat secara dramatis meningkatkan penggunaan sumber daya pod Gatekeeper jika tidak digunakan dengan hati-hati. Anda akan melihat ConstraintTemplateInstallFailed
kesalahan saat mencoba membuat definisi kebijakan kustom yang berisi templat batasan dengan anotasi ini.
Menghapus anotasi mungkin tampak mengurangi kesalahan yang Anda lihat, tetapi addon kebijakan tidak akan menyinkronkan sumber daya yang diperlukan untuk templat batasan tersebut ke dalam cache. Dengan demikian, kebijakan Anda akan dievaluasi terhadap yang kosong data.inventory
(dengan asumsi bahwa tidak ada bawaan yang ditetapkan yang mereplikasi sumber daya yang diperlukan). Ini akan menyebabkan hasil kepatuhan yang menyesatkan. Seperti disebutkan sebelumnya, mengedit konfigurasi secara manual untuk menyimpan cache sumber daya yang diperlukan juga tidak diizinkan.
Batasan berikut ini hanya berlaku untuk Add-on Azure Policy untuk AKS:
- Kebijakan keamanan AKS Pod dan Add-on Azure Policy untuk AKS tidak dapat diaktifkan bersamaan. Untuk informasi lebih lanjut, lihat batasan keamanan AKS pod.
- Namespace secara otomatis dikecualikan oleh Add-on Azure Policy untuk evaluasi: kube-system dan gatekeeper-system.
Tanya jawab umum
Apa yang disebarkan Add-on Azure Policy / Ekstensi Azure Policy pada kluster saya saat penginstalan?
Add-on Azure Policy mengharuskan tiga komponen Gatekeeper dijalankan: Satu pod audit dan dua replika pod webhook. Satu pod Azure Policy dan satu pod webhook Azure Policy juga diinstal.
Berapa banyak konsumsi sumber daya yang harus saya harapkan add-on/Ekstensi Azure Policy untuk digunakan pada setiap kluster?
Azure Policy untuk komponen Kubernetes yang berjalan pada kluster Anda menggunakan lebih banyak sumber daya karena jumlah sumber daya Kubernetes dan penetapan kebijakan meningkat di kluster, yang memerlukan operasi audit dan penegakan.
Berikut ini adalah perkiraan untuk membantu Anda merencanakan:
- Untuk kurang dari 500 pod dalam satu kluster dengan maksimal 20 batasan: dua vCPU dan memori 350 MB per komponen.
- Untuk lebih dari 500 pod dalam satu kluster dengan maksimal 40 batasan: tiga vCPU dan memori 600 MB per komponen.
Dapatkah Azure Policy untuk definisi Kubernetes diterapkan pada pod Windows?
Pod Windows tidak mendukung konteks keamanan. Dengan demikian, beberapa definisi Azure Policy, seperti melarang hak istimewa root, tidak dapat dieskalasikan di pod Windows dan hanya berlaku untuk pod Linux.
Jenis data diagnostik apa yang dikumpulkan oleh Add-on Azure Policy?
Add-on Azure Policy untuk Kubernetes mengumpulkan data diagnostik kluster terbatas. Data diagnostik ini adalah data teknis penting yang terkait dengan perangkat lunak dan kinerja. Data digunakan dengan cara berikut:
- Selalu perbarui Add-on Azure Policy.
- Menjaga Add-on Azure Policy tetap aman, andal, dan berkinerja.
- Tingkatkan Add-on Azure Policy - melalui analisis agregat penggunaan add-on.
Informasi yang dikumpulkan oleh add-on bukanlah data pribadi. Rincian berikut saat ini dikumpulkan:
- Versi agen Add-on Azure Policy
- Jenis kluster
- Wilayah kluster
- Grup sumber daya kluster
- ID sumber daya kluster
- ID langganan kluster
- OS Kluster (Contoh: Linux)
- Kota kluster (Contoh: Jakarta)
- Negara bagian atau provinsi kluster (Contoh: DKI Jakarta)
- Negara atau kawasan kluster (Contoh: Amerika Serikat)
- Pengecualian/kesalahan yang ditemui oleh Add-on Azure Policy selama instalasi agen pada evaluasi kebijakan
- Jumlah definisi kebijakan Gatekeeper yang tidak diinstal oleh Add-on Azure Policy
Apa praktik terbaik umum yang perlu diingat saat menginstal Add-on Azure Policy?
- Gunakan kumpulan node sistem dengan taint
CriticalAddonsOnly
untuk menjadwalkan pod Gatekeeper. Untuk informasi selengkapnya, lihat Menggunakan kumpulan node sistem. - Amankan lalu lintas keluar dari kluster AKS Anda. Untuk informasi selengkapnya, lihat Mengontrol lalu lintas keluar untuk node kluster.
- Jika kluster telah
aad-pod-identity
diaktifkan, pod Node Managed Identity (NMI) memodifikasi simpuliptables
untuk mencegat panggilan ke titik akhir Metadata Instans Azure. Konfigurasi ini berarti setiap permintaan yang dibuat pada titik akhir Metadata disadap oleh NMI meskipun pod tidak menggunakanaad-pod-identity
. AzurePodIdentityException
CRD dapat dikonfigurasi untuk menginformasikanaad-pod-identity
bahwa setiap permintaan ke titik akhir Metadata yang berasal dari pod yang cocok dengan label yang ditentukan dalam CRD harus diproksi tanpa pemrosesan apa pun di NMI. Pod sistem dengankubernetes.azure.com/managedby: aks
label di namespace layanan sistem kube harus dikecualikan denganaad-pod-identity
mengonfigurasiAzurePodIdentityException
CRD. Untuk informasi lebih lanjut, lihat Menonaktifkan aad-pod-identity untuk pod atau aplikasi tertentu. Untuk mengonfigurasi pengecualian, instal YAML pengecualian mikrofon.
Langkah berikutnya
- Tinjau sampel pada sampel Azure Policy.
- Tinjau Struktur definisi kebijakan.
- Tinjau Memahami efek kebijakan.
- Memahami cara membuat kebijakan secara terprogram.
- Pelajari cara mendapatkan data kepatuhan.
- Pelajari cara memulihkan sumber daya yang tidak sesuai syarat.
- Tinjau apa itu grup manajemen Atur sumber daya Anda dengan grup manajemen Azure.