Bagikan melalui


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:

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:

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

  2. Membuat atau menggunakan sampel definisi Azure Policy untuk Kubernetes

  3. Tetapkan definisi ke kluster Kubernetes

  4. Tunggu validasi

  5. Pengelogan dan pemecahan masalah

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

  1. 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
      
  2. 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.

  3. 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
    
  4. 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

    1. Luncurkan layanan AKS di portal Azure dengan memilih Semua layanan, lalu cari dan pilih layanan Kubernetes.

    2. Pilih salah satu kluster AKS Anda.

    3. Pilih Kebijakan di sisi kiri halaman layanan Kubernetes.

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

  1. Pastikan bahwa kluster Kubernetes Anda adalah distribusi yang didukung.

    Catatan

    Ekstensi Azure Policy for Arc didukung pada distribusi Kubernetes berikut.

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

  3. 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
  4. 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.DataPenyedia 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.

  1. Mulai layanan Azure Policy di portal Azure. Pilih Semua layanan di panel kiri lalu cari dan pilih Kebijakan.

  2. Di panel kiri halaman Azure Policy, pilih Definisi.

  3. Dari kotak daftar dropdown Kategori, gunakan Pilih semua untuk menghapus filter, lalu pilih Kubernetes.

  4. Pilih definisi kebijakan, lalu pilih tombol Tetapkan.

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

  6. Berikan penetapan kebijakan Nama dan Deskripsi yang dapat Anda gunakan untuk mengidentifikasinya dengan mudah.

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

  8. Pilih Selanjutnya.

  9. 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.
  10. 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 menjalankan kubectl 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:

  1. 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>
    
  2. 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.

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

    1. Luncurkan layanan AKS di portal Azure dengan memilih Semua layanan, lalu cari dan pilih layanan Kubernetes.

    2. Pilih kluster AKS tempat Anda ingin menonaktifkan Add-on Azure Policy.

    3. Pilih Kebijakan di sisi kiri halaman layanan Kubernetes.

    4. 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 simpul iptables 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 menggunakan aad-pod-identity.
  • AzurePodIdentityException CRD dapat dikonfigurasi untuk menginformasikan aad-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 dengan kubernetes.azure.com/managedby: aks label di namespace layanan sistem kube harus dikecualikan dengan aad-pod-identity mengonfigurasi AzurePodIdentityException CRD. Untuk informasi lebih lanjut, lihat Menonaktifkan aad-pod-identity untuk pod atau aplikasi tertentu. Untuk mengonfigurasi pengecualian, instal YAML pengecualian mikrofon.

Langkah berikutnya