Tutorial: Membuat definisi kebijakan kustom

Definisi kebijakan kustom memungkinkan pelanggan untuk menentukan aturan mereka sendiri untuk menggunakan Azure. Aturan ini sering menerapkan:

  • Praktik keamanan
  • Cost management
  • Aturan khusus organisasi (seperti penamaan atau lokasi)

Apa pun faktor pendorong bisnis untuk membuat kebijakan kustom, langkah-langkahnya sama untuk menentukan kebijakan kustom baru.

Sebelum membuat kebijakan kustom, periksa sampel kebijakan untuk melihat apakah kebijakan yang sesuai dengan kebutuhan Anda sudah ada.

Pendekatan untuk membuat kebijakan kustom mengikuti langkah berikut:

  • Identifikasi persyaratan bisnis Anda
  • Memetakan setiap persyaratan ke properti sumber daya Azure
  • Memetakan properti menjadi alias
  • Menentukan efek mana yang akan digunakan
  • Menyusun definisi kebijakan

Prasyarat

Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.

Identifikasi persyaratan

Sebelum membuat definisi kebijakan, penting untuk memahami maksud kebijakan. Untuk tutorial ini, kita akan menggunakan persyaratan keamanan perusahaan umum sebagai tujuan untuk mengilustrasikan langkah yang terlibat:

  • Setiap akun penyimpanan harus diaktifkan untuk HTTPS
  • Setiap akun penyimpanan harus dinonaktifkan untuk HTTP

Persyaratan Anda harus mengidentifikasi dengan jelas status sumber daya "menjadi" dan "tidak menjadi".

Meskipun kita telah mendefinisikan status sumber daya yang diharapkan, kita belum mendefinisikan apa yang ingin kita lakukan dengan sumber daya yang tidak patuh. Azure Policy mendukung banyak efek. Untuk tutorial ini, kita akan mendefinisikan persyaratan bisnis sebagai mencegah penciptaan sumber daya jika mereka tidak mematuhi aturan bisnis. Untuk memenuhi tujuan ini, kita akan menggunakan efek Deny. Kita juga ingin opsi untuk menangguhkan kebijakan untuk tugas tertentu. Dengan demikian, kita akan menggunakan efek Disabled dan membuat efek ini menjadi parameter dalam definisi kebijakan.

Menentukan properti sumber daya

Berdasarkan persyaratan bisnis, sumber daya Azure untuk diaudit dengan Azure Policy adalah akun penyimpanan. Namun, kita tidak tahu properti untuk digunakan dalam definisi kebijakan. Azure Policy mengevaluasi terhadap representasi sumber daya JSON, jadi kita perlu memahami properti yang tersedia di sumber daya tersebut.

Ada banyak cara untuk menentukan properti untuk sumber daya Azure. Kita akan melihat masing-masing untuk tutorial ini:

  • Ekstensi Azure Policy untuk Visual Studio Code
  • Templat Azure Resource Manager (templat ARM)
    • Mengekspor sumber daya yang ada
    • Pengalaman pembuatan
    • Templat mulai cepat (GitHub)
    • Dokumen referensi templat
  • Azure Resource Explorer

Lihat sumber daya di ekstensi Visual Studio Code

Ekstensi Visual Studio Code dapat digunakan untuk menelusuri sumber daya di lingkungan Anda dan melihat properti Resource Manager di setiap sumber daya.

Templat ARM

Ada beberapa cara untuk melihat templat ARM yang mencakup properti yang ingin Anda kelola.

Sumber daya yang ada di portal

Cara paling sederhana untuk menemukan properti adalah dengan melihat sumber daya yang ada dengan jenis yang sama. Sumber daya yang sudah dikonfigurasi dengan pengaturan yang ingin Anda terapkan juga memberikan nilai untuk dibandingkan. Lihat halaman Ekspor templat (di bawah Pengaturan) di portal Microsoft Azure untuk sumber daya tertentu tersebut.

Peringatan

Templat ARM yang diekspor oleh portal Microsoft Azure tidak dapat dicolokkan langsung ke properti deployment untuk templat ARM dalam definisi kebijakan deployIfNotExists.

Cuplikan layar halaman Ekspor templat pada sumber daya yang sudah ada di portal Microsoft Azure.

Melakukannya untuk akun penyimpanan mengungkapkan templat yang mirip dengan contoh ini:

...
"resources": [{
    "comments": "Generalized from resource: '/subscriptions/{subscriptionId}/resourceGroups/myResourceGroup/providers/Microsoft.Storage/storageAccounts/mystorageaccount'.",
    "type": "Microsoft.Storage/storageAccounts",
    "sku": {
        "name": "Standard_LRS",
        "tier": "Standard"
    },
    "kind": "Storage",
    "name": "[parameters('storageAccounts_mystorageaccount_name')]",
    "apiVersion": "2018-07-01",
    "location": "westus",
    "tags": {
        "ms-resource-usage": "azure-cloud-shell"
    },
    "scale": null,
    "properties": {
        "networkAcls": {
            "bypass": "AzureServices",
            "virtualNetworkRules": [],
            "ipRules": [],
            "defaultAction": "Allow"
        },
        "supportsHttpsTrafficOnly": false,
        "encryption": {
            "services": {
                "file": {
                    "enabled": true
                },
                "blob": {
                    "enabled": true
                }
            },
            "keySource": "Microsoft.Storage"
        }
    },
    "dependsOn": []
}]
...

Di bawah properti, ada nilai dengan nama supportsHttpsTrafficOnly diatur ke false. Properti ini sepertinya adalah properti yang kita cari. Selain itu, jenis sumber dayanya adalah Microsoft.Storage/storageAccounts. Jenis ini memungkinkan kita membatasi kebijakan hanya untuk sumber daya jenis ini.

Membuat sumber daya di portal

Cara lain melalui portal adalah pengalaman pembuatan sumber daya. Saat membuat akun penyimpanan melalui portal, opsi di bawah tab Tingkat Lanjut adalah Transfer keamanan diperlukan. Properti ini memiliki opsi Disabled dan Enabled. Ikon info ini memiliki teks tambahan yang mengonfirmasi opsi ini kemungkinan adalah properti yang kita inginkan. Namun, portal tidak memberi tahu kami nama properti di layar ini.

Pada tab Tinjau + buat, tautan berada di bagian bawah halaman untuk Mengunduh templat untuk pengotomatisan. Memilih tautan akan membuka templat yang membuat sumber daya yang kita konfigurasi. Dalam hal ini, kita melihat dua potongan kunci informasi:

...
"supportsHttpsTrafficOnly": {
    "type": "bool"
}
...
"properties": {
    "accessTier": "[parameters('accessTier')]",
    "supportsHttpsTrafficOnly": "[parameters('supportsHttpsTrafficOnly')]"
}
...

Informasi ini memberi tahu kami tipe properti dan juga mengonfirmasi dukunganhttpsTrafficOnly adalah properti yang kami cari.

Templat mulai cepat di GitHub

Templat mulai cepat Azure di GitHub memiliki ratusan templat ARM yang dibuat untuk sumber daya yang berbeda. Templat ini dapat menjadi cara yang bagus untuk menemukan properti sumber daya yang Anda cari. Beberapa properti mungkin tampak seperti yang Anda cari, tetapi mengontrol sesuatu yang lain.

Dokumen referensi sumber daya

Untuk memvalidasi supportshttpsTrafficOnly adalah properti yang benar, periksa referensi templat ARM untuk sumber daya akun penyimpanan pada penyedia penyimpanan. Objek properti memiliki daftar parameter yang valid. Memilih tautan StorageAccountPropertiesCreateParameters-object ini memperlihatkan tabel properti yang dapat diterima. supportsHttpsTrafficOnly hadir dan deskripsinya cocok dengan apa yang kita cari untuk memenuhi persyaratan bisnis.

Azure Resource Explorer

Cara lain untuk menjelajahi sumber daya Azure Anda adalah melalui Azure Resource Explorer (Pratinjau). Alat ini menggunakan konteks langganan Anda, jadi Anda perlu mengautentikasi ke situs web dengan info masuk Azure Anda. Setelah diautentikasi, Anda dapat menelusuri berdasarkan penyedia, langganan, grup sumber daya, dan sumber daya.

Temukan sumber daya akun penyimpanan dan lihat propertinya. Kita melihat properti supportsHttpsTrafficOnly di sini juga. Dengan memilih tab Dokumentasi, kita melihat bahwa deskripsi properti cocok dengan apa yang kita temukan di dokumen referensi sebelumnya.

Menemukan alias properti

Kita telah mengidentifikasi properti sumber daya, tetapi kita perlu memetakan properti itu ke alias.

Ada beberapa cara untuk menentukan alias untuk sumber daya Azure. Kita akan melihat masing-masing untuk tutorial ini:

  • Ekstensi Azure Policy untuk Visual Studio Code
  • Azure CLI
  • Azure PowerShell

Dapatkan alias di ekstensi Visual Studio Code

Ekstensi Azure Policy untuk ekstensi Visual Studio Code memudahkan Anda menelusuri sumber daya dan menemukan alias.

Catatan

Ekstensi Visual Studio Code hanya mengekspos properti mode Resource Manager dan tidak menampilkan properti mode Penyedia Sumber.

Azure CLI

Di Azure CLI, grup perintah az provider digunakan untuk mencari alias sumber daya. Kita akan memfilter namespace Microsoft.Storage berdasarkan detail yang kita dapatkan tentang sumber daya Azure sebelumnya.

# Login first with az login if not using Cloud Shell

# Get Azure Policy aliases for type Microsoft.Storage
az provider show --namespace Microsoft.Storage --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"

Dalam hasilnya, kita melihat alias yang didukung oleh akun penyimpanan bernama supportsHttpsTrafficOnly. Keberadaan alias ini berarti kita dapat menulis kebijakan untuk menerapkan persyaratan bisnis kita!

Azure PowerShell

Di Azure PowerShell, cmdlet Get-AzPolicyAlias digunakan untuk mencari alias sumber daya. Kita akan memfilter namespace Microsoft.Storage berdasarkan detail yang kita dapatkan tentang sumber daya Azure sebelumnya.

# Login first with Connect-AzAccount if not using Cloud Shell

# Use Get-AzPolicyAlias to list aliases for Microsoft.Storage
(Get-AzPolicyAlias -NamespaceMatch 'Microsoft.Storage').Aliases

Seperti Azure CLI, hasilnya memperlihatkan alias yang didukung oleh akun penyimpanan bernama supportsHttpsTrafficOnly.

Menentukan efek yang akan digunakan

Memutuskan apa yang harus dilakukan dengan sumber daya yang tidak patuh hampir sama pentingnya dengan memutuskan apa yang harus dievaluasi dari awal. Setiap kemungkinan respons terhadap sumber daya yang tidak sesuai disebut efek. Efek mengontrol jika sumber daya yang tidak sesuai dicatat, diblokir, memiliki data yang ditambahkan, atau memiliki penyebaran yang terkait dengannya untuk menempatkan sumber daya kembali ke dalam status yang sesuai.

Misalnya, Deny adalah efek yang kita inginkan karena kita tidak ingin sumber daya yang tidak mematuhi dibuat di lingkungan Azure kita. Audit adalah pilihan pertama yang baik untuk efek kebijakan guna menentukan apa dampak dari sebuah kebijakan sebelum menetapkannya menjadi Deny. Salah satu cara untuk membuat perubahan efek per penugasan lebih mudah adalah dengan membuat parameter efek. Lihat parameter di bawah ini untuk detail tentang caranya.

Menyusun definisi

Kita sekarang memiliki detail properti dan alias untuk apa yang kita rencanakan untuk dikelola. Selanjutnya, kita akan menyusun aturan kebijakan itu sendiri. Jika Anda belum terbiasa dengan bahasa kebijakan, merujuk ke struktur definisi kebijakan untuk cara menyusun definisi kebijakan. Berikut adalah templat kosong seperti apa definisi kebijakan:

{
    "properties": {
        "displayName": "<displayName>",
        "description": "<description>",
        "mode": "<mode>",
        "parameters": {
                <parameters>
        },
        "policyRule": {
            "if": {
                <rule>
            },
            "then": {
                "effect": "<effect>"
            }
        }
    }
}

Metadata

Tiga komponen pertama adalah metadata kebijakan. Komponen-komponen ini mudah untuk memberikan nilai karena kita tahu apa tujuan kita membuat aturan. Mode utamanya merupakan tag dan lokasi sumber daya. Karena kita tidak perlu membatasi evaluasi untuk sumber daya yang mendukung tag, kita akan menggunakan nilai all untuk mode.

"displayName": "Deny storage accounts not using only HTTPS",
"description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
"mode": "all",

Parameter

Meskipun kita tidak menggunakan parameter untuk mengubah evaluasi, kita ingin menggunakan parameter untuk memungkinkan mengubah efek untuk pemecahan masalah. Kita akan mendefinisikan parameter effectType dan membatasinya hanya untuk Deny dan Disabled. Dua opsi ini sesuai dengan persyaratan bisnis kita. Blok parameter yang sudah selesai terlihat seperti contoh ini:

"parameters": {
    "effectType": {
        "type": "string",
        "defaultValue": "Deny",
        "allowedValues": [
            "Deny",
            "Disabled"
        ],
        "metadata": {
            "displayName": "Effect",
            "description": "Enable or disable the execution of the policy"
        }
    }
},

Aturan kebijakan

Menyusun aturan kebijakan adalah langkah terakhir dalam membangun definisi kebijakan kustom kita. Kita telah mengidentifikasi dua pernyataan untuk diuji untuk:

  • Jenis akun penyimpanan adalah Microsoft.Storage/storageAccounts
  • Akun penyimpanan supportsHttpsTrafficOnly bukan benar

Karena kedua pernyataan ini harus benar, kami akan menggunakan semuaoperator logika. Kita akan meneruskan parameter effectType ke efeknya daripada membuat deklarasi statik. Aturan kita yang sudah selesai terlihat seperti contoh ini:

"if": {
    "allOf": [
        {
            "field": "type",
            "equals": "Microsoft.Storage/storageAccounts"
        },
        {
            "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
            "notEquals": "true"
        }
    ]
},
"then": {
    "effect": "[parameters('effectType')]"
}

Definisi lengkap

Dengan ketiga bagian kebijakan yang ditentukan, berikut adalah definisi lengkap kita:

{
    "properties": {
        "displayName": "Deny storage accounts not using only HTTPS",
        "description": "Deny storage accounts not using only HTTPS. Checks the supportsHttpsTrafficOnly property on StorageAccounts.",
        "mode": "all",
        "parameters": {
            "effectType": {
                "type": "string",
                "defaultValue": "Deny",
                "allowedValues": [
                    "Deny",
                    "Disabled"
                ],
                "metadata": {
                    "displayName": "Effect",
                    "description": "Enable or disable the execution of the policy"
                }
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Storage/storageAccounts"
                    },
                    {
                        "field": "Microsoft.Storage/storageAccounts/supportsHttpsTrafficOnly",
                        "notEquals": "true"
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effectType')]"
            }
        }
    }
}

Definisi yang telah selesai dapat digunakan untuk membuat kebijakan baru. Portal dan setiap SDK (Azure CLI, Azure PowerShell, dan REST API) menerima definisi dengan cara yang berbeda, jadi tinjau perintah untuk masing-masing guna memvalidasi penggunaan yang benar. Kemudian tetapkan, menggunakan efek parameter, ke sumber daya yang sesuai untuk mengelola keamanan akun penyimpanan Anda.

Membersihkan sumber daya

Jika Anda sudah selesai mengerjakan sumber daya dari tutorial ini, gunakan langkah berikut untuk menghapus salah satu penetapan atau definisi yang dibuat di atas:

  1. Pilih Definisi (atau Penetapan jika Anda mencoba menghapus penetapan) di bagian Penulisan di sisi kiri halaman Azure Policy.

  2. Cari inisiatif atau definisi kebijakan baru (atau penetapan) yang ingin dihapus.

  3. Klik kanan baris atau pilih elipsis di akhir definisi (atau penetapan), dan pilih Hapus definisi (atau Hapus penetapan).

Tinjau

Dalam tutorial ini, Anda berhasil menyelesaikan tugas-tugas berikut:

  • Mengidentifikasi persyaratan bisnis Anda
  • Memetakan setiap persyaratan ke properti sumber daya Azure
  • Memetakan properti ke alias
  • Menentukan efek yang akan digunakan
  • Menyusun definisi kebijakan

Langkah berikutnya

Selanjutnya, gunakan definisi kebijakan kustom Anda untuk membuat dan menetapkan kebijakan: