Mengamankan kluster Azure Kubernetes Service (AKS) Anda dengan Azure Policy
Anda dapat menerapkan dan menerapkan kebijakan keamanan bawaan pada kluster Azure Kubernetes Service (AKS) menggunakan Azure Policy. Azure Policy membantu menegakkan standar organisasi dan menilai kepatuhan dalam skala besar. Setelah menginstal add-on Azure Policy untuk AKS, Anda dapat menerapkan definisi kebijakan individual atau grup definisi kebijakan yang disebut inisiatif (terkadang disebut set kebijakan) ke kluster Anda. Lihat Definisi bawaan Azure Policy untuk AKS untuk daftar lengkap kebijakan AKS dan definisi inisiatif.
Artikel ini memperlihatkan kepada Anda cara menerapkan definisi kebijakan ke kluster Anda dan memverifikasi bahwa tugas tersebut sedang diberlakukan.
- Artikel ini mengasumsikan Anda memiliki kluster AKS yang sudah ada. Jika Anda memerlukan kluster AKS, Anda dapat membuatnya menggunakan Azure CLI, Azure PowerShell, atau portal Azure.
- Anda memerlukan add-on Azure Policy untuk AKS yang diinstal pada kluster AKS Anda.
Anda dapat menerapkan definisi atau inisiatif kebijakan di portal Azure menggunakan langkah-langkah berikut:
- Navigasikan ke layanan Azure Policy di portal Azure disebut Kebijakan.
- Di panel kiri halaman Azure Policy, pilih Definisi.
- Di bawah Kategori, pilih
Kubernetes
. - Pilih definisi atau inisiatif kebijakan yang ingin Anda terapkan. Untuk contoh ini, pilih standar garis besar keamanan pod kluster Kube untuk inisiatif beban kerja berbasis Linux.
- Pilih Tetapkan.
- Atur Cakupan ke grup sumber daya kluster AKS dengan add-on Azure Policy diaktifkan.
- Pilih halaman Parameter dan perbarui Efek dari
audit
kedeny
untuk memblokir penyebaran baru yang melanggar inisiatif garis besar. Anda juga dapat menambahkan namespace tambahan untuk dikecualikan dari evaluasi. Untuk contoh ini, pertahankan nilai default. - Pilih Tinjau + buat>Buat untuk mengirimkan penetapan kebijakan.
Kebijakan kustom memungkinkan Anda untuk menentukan aturan penggunaan Azure. Misalnya, Anda dapat menerapkan jenis aturan berikut:
- Praktik keamanan
- Cost management
- Aturan khusus organisasi (seperti penamaan atau lokasi)
Sebelum membuat kebijakan kustom, periksa daftar pola dan sampel umum untuk melihat apakah kasus Anda sudah tercakup.
Definisi kebijakan kustom ditulis dalam JSON. Untuk mempelajari lebih lanjut pembuatan kebijakan kustom, lihat Struktur definisi Azure Policy dan Membuat definisi kebijakan kustom.
Catatan
Azure Policy sekarang menggunakan properti baru yang dikenal sebagai templateInfo yang memungkinkan Anda menentukan jenis sumber untuk templat batasan. Saat Anda menentukan templateInfo dalam definisi kebijakan, Anda tidak perlu menentukan properti constraintTemplate atau batasan . Anda masih perlu menentukan apiGroup dan jenis. Untuk informasi lebih lanjut mengenai pembahasan ini, lihat Memahami efek Azure Policy.
Setelah Anda membuat definisi kebijakan kustom, lihat Menetapkan definisi kebijakan untuk panduan langkah demi langkah menetapkan kebijakan ke kluster Kubernetes Anda.
Konfirmasikan penetapan kebijakan diterapkan ke kluster Anda menggunakan perintah berikut
kubectl get
.kubectl get constrainttemplates
Catatan
Penugasan kebijakan dapat memakan waktu hingga 20 menit untuk disinkronkan ke setiap kluster.
Output Anda harus mirip dengan contoh output berikut:
NAME AGE k8sazureallowedcapabilities 23m k8sazureallowedusersgroups 23m k8sazureblockhostnamespace 23m k8sazurecontainerallowedimages 23m k8sazurecontainerallowedports 23m k8sazurecontainerlimits 23m k8sazurecontainernoprivilege 23m k8sazurecontainernoprivilegeescalation 23m k8sazureenforceapparmor 23m k8sazurehostfilesystem 23m k8sazurehostnetworkingports 23m k8sazurereadonlyrootfilesystem 23m k8sazureserviceallowedports 23m
Pertama-tama, mari kita uji apa yang terjadi ketika Anda menjadwalkan pod dengan konteks keamanan privileged: true
. Konteks keamanan ini meningkatkan hak istimewa pod. Inisiatif melarang pod istimewa, sehingga permintaan ditolak, yang mengalihkan penyebaran ditolak.
Buat file bernama
nginx-privileged.yaml
dan tempelkan dalam manifes YAML berikut.apiVersion: v1 kind: Pod metadata: name: nginx-privileged spec: containers: - name: nginx-privileged image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine securityContext: privileged: true
Buat pod menggunakan
kubectl apply
perintah dan tentukan nama manifes YAML Anda.kubectl apply -f nginx-privileged.yaml
Seperti yang diharapkan, pod gagal dijadwalkan, seperti yang ditunjukkan pada contoh output berikut:
Error from server ([denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}): error when creating "privileged.yaml": admission webhook "validation.gatekeeper.sh" denied the request: [denied by azurepolicy-container-no-privilege-00edd87bf80f443fa51d10910255adbc4013d590bec3d290b4f48725d4dfbdf9] Privileged container is not allowed: nginx-privileged, securityContext: {"privileged": true}
Pod tidak mencapai tahap penjadwalan, jadi tidak ada sumber daya yang akan dihapus sebelum Anda melanjutkan.
Dalam contoh sebelumnya, gambar kontainer secara otomatis mencoba menggunakan root untuk mengikat NGINX ke port 80. Inisiatif kebijakan menolak permintaan ini, sehingga pod gagal dimulai. Sekarang, mari kita coba menjalankan pod NGINX yang sama tanpa akses istimewa.
Buat file bernama
nginx-unprivileged.yaml
dan tempelkan dalam manifes YAML berikut.apiVersion: v1 kind: Pod metadata: name: nginx-unprivileged spec: containers: - name: nginx-unprivileged image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
Buat pod menggunakan
kubectl apply
perintah dan tentukan nama manifes YAML Anda.kubectl apply -f nginx-unprivileged.yaml
Periksa status pod menggunakan
kubectl get pods
perintah .kubectl get pods
Output Anda harus mirip dengan contoh output berikut, yang menunjukkan pod berhasil dijadwalkan dan memiliki status Berjalan:
NAME READY STATUS RESTARTS AGE nginx-unprivileged 1/1 Running 0 18s
Contoh ini menunjukkan inisiatif garis besar yang hanya memengaruhi penyebaran yang melanggar kebijakan dalam koleksi. Penyebaran yang diperbolehkan terus berfungsi.
Hapus pod yang tidak memiliki hak istimewa NGINX menggunakan
kubectl delete
perintah dan tentukan nama manifes YAML Anda.kubectl delete -f nginx-unprivileged.yaml
Anda dapat menghapus inisiatif garis besar di portal Azure menggunakan langkah-langkah berikut:
- Navigasi ke panel Kebijakan pada portal Azure.
- Pilih Penugasan.
- Pilih tombol ... di samping standar garis besar keamanan pod kluster Kube untuk inisiatif beban kerja berbasis Linux.
- Pilih Hapus penugasan.
Untuk informasi selengkapnya tentang cara kerja Azure Policy, lihat artikel berikut ini:
Umpan balik Azure Kubernetes Service
Azure Kubernetes Service adalah proyek sumber terbuka. Pilih tautan untuk memberikan umpan balik: