Definisi efek "deployIfNotExists" pada Kebijakan Azure

Mirip dengan auditIfNotExists, definisi kebijakan deployIfNotExists menjalankan penyebaran templat saat kondisi terpenuhi. Penetapan kebijakan dengan efek yang ditetapkan sebagai DeployIfNotExists memerlukan identitas terkelola untuk melakukan remediasi.

Nota

Templat berlapis didukung dengan deployIfNotExists, tetapi templat tertaut saat ini tidak didukung.

Evaluasi DeployIfNotExists

deployIfNotExists berjalan setelah penundaan yang dapat dikonfigurasi saat Penyedia Sumber Daya menangani permintaan buat atau perbarui langganan atau sumber daya dan mengembalikan kode status keberhasilan. Penyebaran templat terjadi jika tidak ada sumber daya terkait atau jika sumber daya yang ditentukan oleh existenceCondition tidak dievaluasi menjadi benar. Durasi penyebaran tergantung pada kompleksitas sumber daya yang disertakan dalam templat.

Selama siklus evaluasi, definisi kebijakan dengan efek DeployIfNotExists yang cocok dengan sumber daya ditandai sebagai tidak patuh, tetapi tidak ada tindakan yang diambil pada sumber daya tersebut. Sumber daya yang tidak sesuai yang ada dapat diperbaiki dengan tugas remediasi.

Properti DeployIfNotExists

Properti details efek DeployIfNotExists memiliki semua subproperti yang menentukan sumber daya terkait untuk dicocokkan dan penyebaran templat yang akan dijalankan.

  • type (diperlukan)
    • Menentukan jenis sumber daya terkait untuk dicocokkan.
    • Jika type adalah jenis sumber daya di bawah if sumber daya kondisi, kebijakan mencari sumber daya dari jenis ini type dalam cakupan sumber daya yang dievaluasi. Jika tidak, kueri kebijakan dalam grup sumber daya atau langganan yang sama dengan sumber daya yang dievaluasi bergantung pada existenceScope.
  • name (opsional)
    • Menentukan nama sumber daya yang tepat untuk dicocokkan dan menyebabkan kebijakan mengambil satu sumber daya tertentu alih-alih semua sumber daya dari jenis yang ditentukan.
    • Ketika nilai kondisi untuk if.field.type dan then.details.type cocok, maka name menjadi diperlukan dan harus [field('name')], atau [field('fullName')] untuk sumber daya turunan.

Nota

type dan name segmen-segmen dapat digabungkan untuk mengambil sumber daya yang bersarang secara umum.

Untuk mengambil sumber daya tertentu, Anda dapat menggunakan "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" dan "name": "parentResourceName/nestedResourceName".

Untuk mengambil kumpulan sumber daya berlapis, karakter kartu bebas ? dapat disediakan sebagai pengganti segmen nama terakhir. Misalnya, "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" dan "name": "parentResourceName/?". Ini dapat dikombinasikan dengan fungsi bidang untuk mengakses sumber daya yang terkait dengan sumber daya yang dievaluasi, seperti "name": "[concat(field('name'), '/?')]"."

  • resourceGroupName (pilihan)

    • Memungkinkan pencocokan sumber daya terkait berasal dari grup sumber daya yang berbeda.
    • Tidak berlaku jika type adalah sumber daya yang berada di bawah if sumber daya kondisi.
    • Defaultnya adalah grup sumber daya untuk sumber daya kondisi if.
    • Jika penyebaran templat dijalankan, templat tersebut disebarkan dalam grup sumber daya yang berhubungan dengan nilai ini.
  • existenceScope (pilihan)

    • Nilai yang diizinkan adalah Langganan dan ResourceGroup.
    • Mengatur lingkup atau lokasi pengambilan sumber daya terkait untuk dicocokkan.
    • Tidak berlaku jika type adalah sumber daya yang berada di bawah if sumber daya kondisi.
    • Untuk ResourceGroup, akan membatasi ke grup sumber daya di resourceGroupName jika ditentukan. Jika resourceGroupName tidak ditentukan, itu akan membatasi ke grup sumber daya dari sumber daya kondisi if, yang merupakan perilaku standar.
    • Untuk Langganan, kueri seluruh langganan untuk sumber daya terkait. Cakupan penugasan harus diatur pada tingkat langganan atau yang lebih tinggi untuk evaluasi dengan tepat.
    • Defaultnya adalah ResourceGroup.
  • evaluationDelay (pilihan)

    • Menentukan kapan keberadaan sumber daya terkait harus dievaluasi. Penundaan hanya digunakan untuk evaluasi yang merupakan hasil dari permintaan buat atau perbarui sumber daya.
    • Nilai yang diizinkan adalah AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailure, atau durasi ISO 8601 antara 0 dan 360 menit.
    • Nilai AfterProvisioning memeriksa hasil penyediaan sumber daya yang dievaluasi dalam kondisi aturan kebijakan tersebut. AfterProvisioning berjalan setelah provisi selesai, tanpa memperhatikan hasilnya. Penyediaan yang memakan waktu lebih dari enam jam diperlakukan sebagai kegagalan dalam menentukan penundaan evaluasi AfterProvisioning.
    • Defaultnya adalah PT10M (10 menit).
    • Menentukan penundaan evaluasi panjang dapat menyebabkan status kepatuhan sumber daya yang direkam tidak diperbarui hingga pemicu evaluasi berikutnya.
  • existenceCondition (pilihan)

    • Jika tidak ditentukan, sumber daya terkait apa pun dari type memenuhi efek dan tidak memicu penyebaran.
    • Menggunakan bahasa yang sama dengan aturan kebijakan untuk kondisi tersebut if , tetapi dievaluasi terhadap setiap sumber daya terkait satu per satu.
    • Jika ada sumber daya terkait yang cocok dievaluasi sebagai true, efeknya terpenuhi dan tidak memicu penyebaran.
    • Dapat menggunakan [field()] untuk memeriksa kesetaraan dengan nilai dalam if kondisi.
    • Misalnya, dapat digunakan untuk memvalidasi bahwa sumber daya induk (dalam if kondisi) berada di lokasi sumber daya yang sama dengan sumber daya terkait yang cocok.
  • roleDefinitionIds (diperlukan)

  • deploymentScope (pilihan)

    • Nilai yang diizinkan adalah Langganan dan ResourceGroup.
    • Mengatur jenis penyebaran yang akan dipicu. Langganan menunjukkan penyebaran di tingkat langganan dan ResourceGroup menunjukkan penyebaran ke grup sumber daya.
    • Properti lokasi harus ditentukan pada Penyebaran saat menggunakan penyebaran tingkat langganan.
    • Defaultnya adalah ResourceGroup.
  • deployment (diperlukan)

    • Properti ini harus menyertakan penyebaran templat lengkap karena akan diteruskan ke Microsoft.Resources/deployments PUT API. Untuk informasi selengkapnya, lihat REST API Penyebaran.
    • Bersarang Microsoft.Resources/deployments dalam templat harus menggunakan nama unik untuk menghindari konflik antara beberapa evaluasi kebijakan. Nama penyebaran induk dapat digunakan sebagai bagian dari nama penyebaran berlapis melalui [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Nota

    Semua fungsi dalam properti deployment dievaluasi sebagai komponen templat, bukan kebijakan tersebut. Pengecualian adalah properti parameters yang meneruskan nilai dari kebijakan ke templat. value Di bagian ini di bawah nama parameter templat digunakan untuk melakukan passing nilai ini (lihat fullDbName dalam contoh DeployIfNotExists).

Contoh DeployIfNotExists

Contoh: Mengevaluasi database SQL Server untuk menentukan apakah transparentDataEncryption diaktifkan. Jika tidak, maka dilakukan penyebaran untuk mengaktifkannya.

"if": {
  "field": "type",
  "equals": "Microsoft.Sql/servers/databases"
},
"then": {
  "effect": "deployIfNotExists",
  "details": {
    "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
    "name": "current",
    "evaluationDelay": "AfterProvisioning",
    "roleDefinitionIds": [
      "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleGUID}",
      "/providers/Microsoft.Authorization/roleDefinitions/{builtinroleGUID}"
    ],
    "existenceCondition": {
      "field": "Microsoft.Sql/transparentDataEncryption.status",
      "equals": "Enabled"
    },
    "deployment": {
      "properties": {
        "mode": "incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "fullDbName": {
              "type": "string"
            }
          },
          "resources": [
            {
              "name": "[concat(parameters('fullDbName'), '/current')]",
              "type": "Microsoft.Sql/servers/databases/transparentDataEncryption",
              "apiVersion": "2014-04-01",
              "properties": {
                "status": "Enabled"
              }
            }
          ]
        },
        "parameters": {
          "fullDbName": {
            "value": "[field('fullName')]"
          }
        }
      }
    }
  }
}

Langkah berikutnya