Amankan kluster Azure Kubernetes Service (AKS) Anda dengan Azure Policy

Anda dapat menerapkan dan menerapkan kebijakan keamanan bawaan pada kluster Azure Kubernetes Service (AKS) Anda 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 policysets) 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.

Prasyarat

Menetapkan definisi atau inisiatif kebijakan bawaan

Anda dapat menerapkan definisi atau inisiatif kebijakan di portal Azure menggunakan langkah-langkah berikut:

  1. Navigasi ke layanan Azure Policy di portal Azure disebut Kebijakan.
  2. Di panel kiri halaman Azure Policy, pilih Definisi.
  3. Di bawah Kategori, pilih Kubernetes.
  4. 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 .
  5. Pilih Tetapkan.
  6. Atur Cakupan ke grup sumber daya kluster AKS dengan add-on Azure Policy diaktifkan.
  7. Pilih halaman Parameter dan perbarui Efek dari audit ke deny 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.
  8. Pilih Tinjau + buat>Buat untuk mengirimkan penetapan kebijakan.

Membuat dan menetapkan definisi kebijakan kustom

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 membuat definisi kebijakan kustom, lihat Menetapkan definisi kebijakan untuk panduan langkah demi langkah menetapkan kebijakan ke kluster Kubernetes Anda.

Memvalidasi Azure Policy sedang berjalan

  • Konfirmasikan bahwa 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
    

Memvalidasi penolakan terhadap pod dengan hak istimewa

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.

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

Menguji pembuatan pod yang tidak diistimewakan

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.

  1. 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
    
  2. Buat pod menggunakan kubectl apply perintah dan tentukan nama manifes YAML Anda.

    kubectl apply -f nginx-unprivileged.yaml
    
  3. 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.

  4. Hapus pod tanpa hak istimewa NGINX menggunakan kubectl delete perintah dan tentukan nama manifes YAML Anda.

    kubectl delete -f nginx-unprivileged.yaml
    

Menonaktifkan kebijakan atau inisiatif

Anda dapat menghapus inisiatif garis besar di portal Azure menggunakan langkah-langkah berikut:

  1. Navigasi ke panel Kebijakan pada portal Azure.
  2. Pilih Tugas.
  3. Pilih tombol ... di samping standar garis besar keamanan pod kluster Kube untuk inisiatif beban kerja berbasis Linux .
  4. Pilih Hapus penugasan.

Langkah berikutnya

Untuk informasi selengkapnya tentang cara kerja Azure Policy, lihat artikel berikut ini: