Merancang Azure Policy sebagai alur kerja Kode

Saat Anda maju dalam perjalanan Anda dengan Cloud Governance, Anda harus beralih dari mengelola setiap penugasan kebijakan secara manual di portal Azure atau melalui berbagai SDK ke sesuatu yang lebih mudah dikelola dan diulang pada skala perusahaan. Dua dari pendekatan utama untuk mengelola sistem dalam skala besar di cloud adalah:

  • Infrastruktur sebagai Kode: Praktik memperlakukan konten yang menentukan lingkungan Anda, mulai dari templat Azure Resource Manager (templat ARM) hingga definisi Azure Policy hingga Azure Blueprints, sebagai kode sumber.
  • Azure DevOps: Perpaduan orang, proses, dan produk untuk memungkinkan pengiriman nilai yang berkelanjutan kepada pengguna akhir kami.

Azure Policy sebagai Kode adalah kombinasi dari ide-ide ini. Pada dasarnya, pertahankan definisi kebijakan Anda dalam kontrol sumber dan setiap kali perubahan dilakukan, uji dan validasi perubahan tersebut. Namun, hal tersebut seharusnya tidak sebatas keterlibatan kebijakan dengan Infrastruktur sebagai Kode atau Azure DevOps.

Langkah validasi juga harus menjadi komponen dari alur kerja integrasi berkelanjutan atau penyebaran berkelanjutan (CI/CD) lainnya, seperti menyebarkan lingkungan aplikasi atau infrastruktur virtual. Dengan menjadikan validasi Azure Policy sebagai komponen awal dari proses build dan penyebaran, tim aplikasi dan operasi menemukan apakah perubahan mereka berperilaku seperti yang diharapkan jauh sebelum terlambat dan mereka mencoba untuk menyebarkan dalam produksi.

Definisi dan informasi dasar

Sebelum masuk ke detail Azure Policy sebagai alur kerja Kode, penting untuk memahami beberapa konsep dasar, seperti cara menulis definisi kebijakan dan definisi inisiatif, dan cara memanfaatkan pengecualian pada penugasan definisi tersebut:

Nama file sesuai dengan bagian tertentu dari definisi kebijakan atau inisiatif dan sumber daya kebijakan lainnya:

Format file Isi file
policy.json Seluruh definisi kebijakan
policyset.json Seluruh definisi inisiatif
policy.parameters.json Bagian properties.parameters dari definisi kebijakan
policyset.parameters.json Bagian properties.parameters dari definisi inisiatif
policy.rules.json Bagian properties.policyRule dari definisi kebijakan
policyset.definitions.json Bagian properties.policyDefinitions dari definisi inisiatif
exemptionName.json Pengecualian kebijakan yang menargetkan sumber daya atau cakupan tertentu

Contoh format file ini tersedia di Repositori GitHub Azure Policy

Ringkasan alur kerja

Alur kerja umum yang direkomendasikan dari Azure Policy sebagai Kode terlihat seperti diagram ini:

Diagram showing Azure Policy as Code workflow boxes from Create to Test to Deploy.

Diagram memperlihatkan kotak alur kerja Azure Policy sebagai Kode. Buat mencakup pembuatan definisi kebijakan dan inisiatif. Pengujian mencakup tugas dengan mode pemberlakuan dinonaktifkan. Pemeriksaan gateway untuk status kepatuhan diikuti dengan pemberian izin M S I penugasan dan sumber daya remediasi. Sebarkan mencakup pembaruan penugasan dengan mode pemberlakuan diaktifkan.

Kontrol sumber

Definisi kebijakan dan inisiatif yang ada dapat diekspor dengan cara yang berbeda seperti melalui kueri PowerShell, CLI, atau Azure Resource Graph (ARG). Lingkungan manajemen kontrol sumber pilihan untuk menyimpan definisi ini dapat menjadi salah satu dari banyak opsi, termasuk GitHub atau Azure DevOps.

Membuat dan memperbarui definisi kebijakan

Definisi kebijakan dibuat menggunakan JSON, dan disimpan dalam kontrol sumber. Setiap kebijakan memiliki sekumpulan filenya sendiri, seperti parameter, aturan, dan parameter lingkungan yang harus disimpan dalam folder yang sama. Struktur berikut adalah cara yang disarankan untuk menjaga definisi kebijakan Anda dalam kontrol sumber.

.
|
|- policies/  ________________________ # Root folder for policy resources
|  |- policy1/  ______________________ # Subfolder for a policy
|     |- policy.json _________________ # Policy definition
|     |- policy.parameters.json ______ # Policy definition of parameters
|     |- policy.rules.json ___________ # Policy rule
|     |- assign.<name1>.json _________ # Assignment 1 for this policy definition
|     |- assign.<name2>.json _________ # Assignment 2 for this policy definition
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
      |- exemptions.<name2>/__________ # Subfolder for exemptions on assignment 2
        | - exemptionName.json________ # Exemption for this particular assignment
|
|  |- policy2/  ______________________ # Subfolder for a policy
|     |- policy.json _________________ # Policy definition
|     |- policy.parameters.json ______ # Policy definition of parameters
|     |- policy.rules.json ___________ # Policy rule
|     |- assign.<name1>.json _________ # Assignment 1 for this policy definition
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
|

Saat kebijakan baru ditambahkan atau yang sudah ada diperbarui, alur kerja akan secara otomatis memperbarui definisi kebijakan di Azure. Pengujian definisi kebijakan baru atau yang diperbarui dilakukan di langkah selanjutnya.

Membuat dan memperbarui definisi inisiatif

Definisi inisiatif juga dibuat menggunakan file JSON yang harus disimpan dalam folder yang sama dengan definisi kebijakan. Definisi inisiatif mengharuskan definisi kebijakan sudah ada, sehingga tidak dapat dibuat atau diperbarui sampai sumber untuk kebijakan telah diperbarui dalam kontrol sumber lalu diperbarui di Azure. Struktur berikut adalah cara yang disarankan untuk menjaga definisi inisiatif Anda dalam kontrol sumber:

.
|
|- initiatives/ ______________________ # Root folder for initiatives
|  |- init1/ _________________________ # Subfolder for an initiative
|     |- policyset.json ______________ # Initiative definition
|     |- policyset.definitions.json __ # Initiative list of policies
|     |- policyset.parameters.json ___ # Initiative definition of parameters
|     |- assign.<name1>.json _________ # Assignment 1 for this policy initiative
|     |- assign.<name2>.json _________ # Assignment 2 for this policy initiative
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
      |- exemptions.<name2>/__________ # Subfolder for exemptions on assignment 2
        | - exemptionName.json________ # Exemption for this particular assignment
|
|  |- init2/ _________________________ # Subfolder for an initiative
|     |- policyset.json ______________ # Initiative definition
|     |- policyset.definitions.json __ # Initiative list of policies
|     |- policyset.parameters.json ___ # Initiative definition of parameters
|     |- assign.<name1>.json _________ # Assignment 1 for this policy initiative
|     |- exemptions.<name1>/__________ # Subfolder for exemptions on assignment 1
        | - exemptionName.json________ # Exemption for this particular assignment
|

Seperti definisi kebijakan, alur kerja harus secara otomatis memperbarui definisi inisiatif di Azure saat inisiatif yang ada ditambahkan atau diperbarui. Pengujian definisi inisiatif baru atau yang diperbarui dilakukan di langkah selanjutnya.

Catatan

Disarankan untuk menggunakan mekanisme penyebaran terpusat seperti alur kerja GitHub atau Alur Azure untuk menyebarkan kebijakan. Ini membantu memastikan hanya sumber daya kebijakan yang ditinjau yang disebarkan ke lingkungan Anda dan mekanisme penyebaran bertahap dan pusat digunakan. Izin tulis ke sumber daya kebijakan dapat dibatasi pada identitas yang digunakan dalam penyebaran.

Menguji dan memvalidasi definisi yang diperbarui

Setelah otomatisasi mengambil definisi kebijakan atau inisiatif yang baru dibuat atau diperbarui dan membuat pembaruan ke objek di Azure, saatnya untuk menguji perubahan yang dibuat. Baik kebijakan atau inisiatif yang menjadi bagiannya kemudian harus ditugaskan ke sumber daya di lingkungan terjauh dari produksi. Lingkungan ini biasanya Dev.

Catatan

Dalam langkah ini, kami melakukan pengujian integrasi definisi kebijakan dalam lingkungan Azure Anda, ini terpisah dari verfying fungsionalitas definisi kebijakan yang harus terjadi selama proses pembuatan definisi.

Penugasan harus menggunakan enforcementMode yang dinonaktifkan sehingga pembuatan dan pembaruan sumber daya tidak diblokir, tetapi sumber daya yang ada masih diaudit untuk kepatuhan terhadap definisi kebijakan yang diperbarui. Bahkan dengan enforcementMode, disarankan bahwa cakupan penugasan adalah grup sumber daya atau langganan yang khusus untuk memvalidasi kebijakan.

Catatan

Meskipun mode pemberlakuan berguna, ini bukan pengganti untuk menguji definisi kebijakan secara menyeluruh dalam berbagai kondisi. Definisi kebijakan harus diuji dengan panggilan PUT dan PATCH REST API, sumber daya yang sesuai dan tidak sesuai, dan kasus edge seperti properti yang hilang dari sumber daya.

Setelah penetapan disebarkan, gunakan Azure Policy SDK, tugas Penilaian Keamanan dan Kepatuhan Azure Pipelines, atau kueri Azure Resource Graph (ARG) (lihat sampel) untuk mendapatkan data kepatuhan untuk penugasan baru. Lingkungan yang digunakan untuk menguji kebijakan dan penugasan harus memiliki sumber daya dengan berbagai status kepatuhan. Seperti pengujian unit yang baik untuk kode, Anda ingin menguji bahwa sumber daya dievaluasi seperti yang diharapkan tanpa positif palsu atau negatif palsu. ika Anda menguji dan memvalidasi hanya untuk apa yang Anda harapkan, mungkin ada dampak yang tidak terduga dan tidak teridentifikasi dari kebijakan tersebut. Untuk informasi selengkapnya, lihat Mengevaluasi dampak definisi Azure Policy baru.

Mengaktifkan tugas remediasi

Jika validasi penugasan memenuhi harapan, langkah selanjutnya adalah memvalidasi remediasi. Kebijakan yang menggunakan deployIfNotExists atau modifikasi dapat memiliki tugas remediasi terkait yang dipicu untuk memperbaiki sumber daya dari status yang tidak sesuai dan membawanya ke kepatuhan.

Langkah pertama untuk meremediasi sumber daya adalah memberikan penugasan kebijakan penetapan peran yang ditentukan dalam definisi kebijakan. Penetapan peran ini memberikan cukup hak identitas terkelola penugasan kebijakan untuk membuat perubahan yang diperlukan agar sumber daya sesuai.

Setelah penugasan kebijakan memiliki hak yang sesuai, gunakan SDK Policy untuk memicu tugas perbaikan terhadap sekumpulan sumber daya yang diketahui tidak sesuai. Tiga pengujian harus diselesaikan terhadap tugas-tugas yang diremediasi ini sebelum melanjutkan:

  • Validasi bahwa tugas remediasi berhasil diselesaikan
  • Jalankan evaluasi kebijakan untuk melihat bahwa hasil kepatuhan kebijakan diperbarui seperti yang diharapkan
  • Jalankan pengujian unit lingkungan terhadap sumber daya secara langsung untuk memvalidasi propertinya telah berubah

Menguji hasil evaluasi kebijakan yang diperbarui dan lingkungan secara langsung memberikan konfirmasi bahwa tugas remediasi mengubah apa yang diharapkan dan bahwa definisi kebijakan melihat perubahan kepatuhan seperti yang diharapkan.

Pembaruan untuk penugasan yang diberlakukan

Setelah semua gerbang validasi selesai, perbarui penugasan untuk menggunakan enforcementMode yang diaktifkan. Disarankan untuk melakukan perubahan ini pada awalnya di lingkungan yang sama jauh dari produksi. Validasi bahwa efek yang diinginkan diterapkan selama pembuatan sumber daya dan pembaruan sumber daya. Setelah lingkungan tersebut divalidasi berfungsi seperti yang diharapkan, perubahan tersebut kemudian harus dicakup untuk menyertakan lingkungan berikutnya, dan seterusnya, hingga kebijakan disebarkan ke sumber daya produksi.

Proses evaluasi terintegrasi

Alur kerja umum untuk Azure Policy sebagai Kode adalah untuk mengembangkan dan menyebarkan kebijakan dan inisiatif ke lingkungan dalam skala besar. Namun, evaluasi kebijakan harus menjadi bagian dari proses penyebaran untuk setiap alur kerja yang menyebarkan atau membuat sumber daya di Azure, seperti menyebarkan aplikasi atau menjalankan templat ARM untuk membuat infrastruktur.

Dalam kasus ini, setelah penyebaran aplikasi atau infrastruktur dilakukan ke langganan uji atau grup sumber daya, evaluasi kebijakan harus dilakukan untuk cakupan tersebut memeriksa validasi semua kebijakan dan inisiatif yang ada. Meskipun mungkin dikonfigurasi sebagai enforcementModedinonaktifkan dalam lingkungan seperti itu, ada baiknya untuk mengetahui lebih awal apakah penerapan aplikasi atau infrastruktur melanggar definisi kebijakan lebih awal. Oleh karena itu, evaluasi kebijakan ini harus menjadi langkah dalam alur kerja tersebut, dan gagal dalam penyebaran yang menghasilkan sumber daya yang tidak sesuai.

Tinjau

Artikel ini membahas alur kerja umum untuk Azure Policy sebagai Kode dan juga di mana evaluasi kebijakan harus menjadi bagian dari alur kerja penyebaran lainnya. Alur kerja ini dapat digunakan di lingkungan apa pun yang mendukung langkah-langkah skrip dan otomatisasi berdasarkan pemicu.

Langkah berikutnya