Definisi Azure Policy efek deployIfNotExists

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

Catatan

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 mengevaluasi ke true. 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 dapat diremediasi 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 yang cocok.
    • Jika type adalah jenis sumber daya di bawah if sumber daya kondisi, kebijakan meminta sumber daya 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 tergantung pada existenceScope.
  • name (opsional)
    • Menentukan nama persis sumber daya yang cocok dan menyebabkan kebijakan mengambil satu sumber daya tertentu, bukan 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 anak.

Catatan

type dan name segmen dapat digabungkan untuk mengambil sumber daya berlapis secara generis.

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

Untuk mengambil kumpulan sumber daya berlapis, karakter ? kartubebas dapat disediakan sebagai pengganti segmen nama belakang. 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 (opsional)

    • 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 if grup sumber daya sumber daya kondisi.
    • Jika penyebaran templat dijalankan, penyebaran templat akan diterapkan dalam grup sumber daya dari nilai ini.
  • existenceScope (opsional)

    • Nilai yang diperbolehkan adalah Langganan dan ResourceGroup.
    • Mengatur lingkup tempat mengambil sumber daya terkait untuk dicocokkan.
    • Tidak berlaku jika type adalah sumber daya yang berada di bawah if sumber daya kondisi.
    • Untuk ResourceGroup, akan membatasi grup sumber daya jika resourceGroupName ditentukan. Jika resourceGroupName tidak ditentukan, akan membatasi if grup sumber daya sumber daya kondisi, yang merupakan perilaku default.
    • Untuk Langganan, kueri seluruh langganan untuk sumber daya terkait. Lingkup penetapan harus ditetapkan pada langganan atau yang lebih tinggi untuk evaluasi yang tepat.
    • Defaultnya adalah ResourceGroup.
  • evaluationDelay (opsional)

    • Menentukan kapan keberadaan sumber daya terkait harus dievaluasi. Penundaan hanya digunakan untuk evaluasi yang merupakan hasil dari permintaan pembuatan atau pembaruan sumber daya.
    • Nilai yang diizinkan adalah AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailure, atau durasi ISO 8601 antara 0 dan 360 menit.
    • Nilai AfterProvisioning memeriksa hasil provisi sumber daya yang dievaluasi dalam kondisi aturan if kebijakan. AfterProvisioning berjalan setelah provisi selesai, terlepas apapun hasilnya. Provisi yang memakan waktu lebih dari enam jam, diperlakukan sebagai kegagalan saat 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 (opsional)

    • Jika tidak ditentukan, sumber daya type terkait 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 yang dievaluasi ke true, efeknya puas dan tidak memicu audit.
    • 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)

    • Properti ini harus menyertakan serangkaian untai (karakter) yang cocok dengan ID peran kontrol akses berbasis peran yang dapat diakses oleh langganan. Untuk informasi selengkapnya, lihat remediasi - mengonfigurasi definisi kebijakan.
  • deploymentScope (opsional)

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

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

    Catatan

    Semua fungsi di deployment dalam properti dievaluasi sebagai komponen templat, bukan kebijakan. Pengecualian adalah parameters properti 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 penyebaran untuk mengaktifkan dijalankan.

"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