Bagikan melalui


Tutorial: Membuat definisi kebijakan kustom

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

  • Praktik keamanan.
  • Manajemen biaya.
  • 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 ke alias
  • Menentukan efek mana yang akan digunakan
  • Menyusun definisi kebijakan

Prasyarat

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

Mengidentifikasi persyaratan

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

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

Kebutuhan Anda harus dengan jelas mengidentifikasi status sumber daya yang diinginkan dan yang tidak diinginkan.

Meskipun kami mendefinisikan status sumber daya yang diharapkan, kami belum menentukan apa yang ingin kami lakukan dengan sumber daya yang tidak sesuai. Azure Policy mendukung banyak efek. Untuk tutorial ini, kami mendefinisikan persyaratan bisnis sebagai mencegah pembuatan sumber daya jika tidak mematuhi aturan bisnis. Untuk memenuhi tujuan ini, kita menggunakan efek tolak . Kita juga ingin opsi untuk menangguhkan kebijakan untuk tugas tertentu. Gunakan efek yang dinonaktifkan dan jadikan efek sebagai parameter dalam definisi kebijakan.

Menentukan properti sumber daya

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

Ada banyak cara untuk menentukan properti untuk sumber daya Azure. Kita meninjau masing-masing untuk tutorial ini.

  • Ekstensi Azure Policy untuk VS Code.
  • Templat Azure Resource Manager (templat ARM).
    • Ekspor sumber daya yang ada.
    • Pengalaman penciptaan
    • Templat panduan 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 Pengaturan, di portal 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 properties adalah nilai bernama supportsHttpsTrafficOnly yang diatur ke false. Properti ini terlihat seperti properti yang kita cari. Selain itu, type dari sumber daya adalah Microsoft.Storage/storageAccounts. Jenis ini memungkinkan kita membatasi kebijakan hanya untuk sumber daya jenis ini.

Membuat sumber daya di portal

Cara lain untuk mengakses portal adalah melalui pengalaman membuat sumber daya. Saat Anda membuat akun penyimpanan melalui portal, opsi di bawah tab Tingkat Lanjut adalah Transfer keamanan diperlukan. Properti ini memiliki opsi Disabled dan Enabled. Ikon info memiliki lebih banyak teks yang mengonfirmasi opsi ini kemungkinan adalah properti yang kita inginkan. Tetapi 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 informasi kunci.

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

Informasi ini memberi tahu kami jenis properti dan juga mengonfirmasi supportsHttpsTrafficOnly adalah properti yang kami cari.

templat Mulai Cepat di GitHub

Azure Quickstart Templates di GitHub memiliki ratusan templat ARM yang dibuat untuk berbagai sumber daya. Templat ini dapat menjadi cara yang bagus untuk menemukan properti sumber daya yang Anda cari. Beberapa properti mungkin tampak seperti yang Anda inginkan, tetapi mengendalikan sesuatu yang lain.

Dokumen referensi

Untuk memvalidasi supportsHttpsTrafficOnly properti yang benar, periksa referensi templat ARM untuk sumber daya akun penyimpanan pada penyedia penyimpanan. Objek properti memiliki daftar parameter yang valid. Memilih StorageAccountPropertiesCreateParameters tautan objek memperlihatkan tabel properti yang dapat diterima. supportsHttpsTrafficOnly hadir dan deskripsinya sesuai dengan yang kami cari sehubungan dengan 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. Kami melihat properti di supportsHttpsTrafficOnly sini juga. Dengan memilih tab Dokumentasi, kita melihat bahwa deskripsi properti cocok dengan apa yang kita temukan di dokumen referensi sebelumnya.

Temukan alias properti

Kami mengidentifikasi properti sumber daya, tetapi kami perlu memetakan properti tersebut ke alias.

Ada beberapa cara untuk menentukan alias untuk sumber daya Azure. Kita meninjau masing-masing untuk tutorial ini.

  • Ekstensi Azure Policy untuk VS 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. Kami memfilter Microsoft.Storage namespace berdasarkan detail yang kami 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. Filter untuk Microsoft.Storage namespace berdasarkan detail yang kami 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 menunjukkan 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. Kontrol efek menentukan apakah sumber daya yang tidak sesuai dicatat atau diblokir, ditambahkan data, atau dikaitkan dengan penyebaran untuk mengembalikan sumber daya ke dalam status yang sesuai.

Misalnya, deny adalah efek yang kami inginkan karena kami tidak ingin sumber daya yang tidak sesuai dibuat di lingkungan Azure kami. Audit adalah pilihan pertama yang baik untuk efek kebijakan untuk menentukan apa efek kebijakan sebelum mengaturnya ke deny. Salah satu cara untuk membuat perubahan efek per penugasan lebih mudah adalah dengan membuat parameter efek. Lihat parameter untuk detailnya.

Menyusun definisi

Sekarang kita memiliki detail properti dan alias untuk rencana pengelolaan. Selanjutnya, kita menyusun aturan kebijakan itu sendiri. Jika Anda tidak terbiasa dengan bahasa kebijakan, referensikan struktur definisi kebijakan untuk mengetahui 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 ke sumber daya yang mendukung tag, gunakan semua nilai 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 kami tidak menggunakan parameter untuk mengubah evaluasi, kami ingin menggunakan parameter untuk memungkinkan perubahan effect untuk pemecahan masalah. Anda menentukan effectType parameter dan membatasinya hanya 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. Kami mengidentifikasi dua pernyataan untuk diuji.

  • Akun penyimpanan type adalah Microsoft.Storage/storageAccounts.
  • Akun penyimpanan supportsHttpsTrafficOnly bukanlah true.

Karena kita membutuhkan kedua pernyataan ini menjadi benar, gunakan allOfoperator logis. Teruskan effectType parameter ke efek alih-alih membuat deklarasi statis. 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 bekerja dengan sumber daya dari tutorial ini, gunakan langkah-langkah berikut untuk menghapus salah satu tugas atau definisi yang Anda buat:

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

Tinjauan

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

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

Langkah berikutnya

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