Azure Policy-definitioner distribuerarIfNotExists-effekt

auditIfNotExistsPå samma sätt kör en deployIfNotExists principdefinition en malldistribution när villkoret uppfylls. Principtilldelningar med effektuppsättning som DeployIfNotExists kräver en hanterad identitet för att utföra reparation.

Kommentar

Kapslade mallar stöds med deployIfNotExists, men länkade mallar stöds för närvarande inte.

DeployIfNotExists-utvärdering

deployIfNotExists körs efter en konfigurerbar fördröjning när en resursprovider hanterar en skapa- eller uppdateringsprenumeration eller resursbegäran och returnerade statuskoden lyckades. En malldistribution sker om det inte finns några relaterade resurser eller om de resurser som definieras av existenceCondition inte utvärderas till true. Distributionens varaktighet beror på komplexiteten hos de resurser som ingår i mallen.

Under en utvärderingscykel markeras principdefinitioner med en DeployIfNotExists-effekt som matchar resurser som icke-kompatibla, men ingen åtgärd vidtas för resursen. Befintliga icke-kompatibla resurser kan åtgärdas med en reparationsaktivitet.

Egenskaper för DeployIfNotExists

Egenskapen details för DeployIfNotExists-effekten har alla underegenskaper som definierar de relaterade resurser som ska matchas och malldistributionen som ska köras.

  • type (krävs)
    • Anger vilken typ av relaterad resurs som ska matchas.
    • Om type är en resurstyp under villkorsresursen if frågar principen efter resurser för detta type inom omfånget för den utvärderade resursen. Annars kan principfrågor inom samma resursgrupp eller prenumeration som den utvärderade resursen existenceScope, beroende på .
  • name (valfritt)
    • Anger det exakta namnet på resursen som ska matchas och gör att principen hämtar en specifik resurs i stället för alla resurser av den angivna typen.
    • När villkorsvärdena för if.field.type och then.details.type matchar blir det name obligatoriskt och måste vara [field('name')], eller [field('fullName')] för en underordnad resurs.

Kommentar

type och name segment kan kombineras för att allmänt hämta kapslade resurser.

Om du vill hämta en specifik resurs kan du använda "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" och "name": "parentResourceName/nestedResourceName".

Om du vill hämta en samling kapslade resurser kan ett jokertecken ? anges i stället för efternamnssegmentet. Till exempel "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" och "name": "parentResourceName/?". Detta kan kombineras med fältfunktioner för att få åtkomst till resurser som är relaterade till den utvärderade resursen, till exempel "name": "[concat(field('name'), '/?')]".

  • resourceGroupName (valfritt)

    • Tillåter matchning av den relaterade resursen att komma från en annan resursgrupp.
    • Gäller inte om type är en resurs som skulle finnas under villkorsresursen if .
    • Standard är villkorsresursens if resursgrupp.
    • Om en malldistribution körs distribueras den i resursgruppen för det här värdet.
  • existenceScope (valfritt)

    • Tillåtna värden är Prenumeration och ResourceGroup.
    • Anger omfånget för var den relaterade resursen ska matchas.
    • Gäller inte om type är en resurs som skulle finnas under villkorsresursen if .
    • För ResourceGroup begränsar du till resursgruppen i resourceGroupName om det anges. Om resourceGroupName inte anges begränsar du till villkorsresursens if resursgrupp, vilket är standardbeteendet.
    • För Prenumeration frågar hela prenumerationen efter den relaterade resursen. Tilldelningsomfånget bör anges i prenumerationen eller högre för korrekt utvärdering.
    • Standardvärdet är ResourceGroup.
  • evaluationDelay (valfritt)

    • Anger när förekomsten av de relaterade resurserna ska utvärderas. Fördröjningen används endast för utvärderingar som är ett resultat av en begäran om att skapa eller uppdatera resurser.
    • Tillåtna värden är AfterProvisioning, AfterProvisioningSuccess, AfterProvisioningFailureeller en ISO 8601-varaktighet mellan 0 och 360 minuter.
    • Värdena för AfterProvisioning inspekterar etableringsresultatet för resursen som utvärderades i principregelns if villkor. AfterProvisioning körs när etableringen är klar, oavsett utfall. Etablering som tar mer än sex timmar behandlas som ett fel när utvärderingsfördröjningar för AfterProvisioning fastställs.
    • Standardvärdet är PT10M (10 minuter).
    • Om du anger en lång utvärderingsfördröjning kan det leda till att resursens registrerade efterlevnadstillstånd inte uppdateras förrän nästa utvärderingsutlösare.
  • existenceCondition (valfritt)

    • Om den inte anges uppfyller alla relaterade resurser type effekten och utlöser inte distributionen.
    • Använder samma språk som principregeln för villkoret if , men utvärderas mot varje relaterad resurs individuellt.
    • Om någon matchande relaterad resurs utvärderas till true uppfylls effekten och utlöser inte distributionen.
    • Kan använda [field()] för att kontrollera ekvivalensen med värden i villkoret if .
    • Kan till exempel användas för att verifiera att den överordnade resursen (i villkoret if ) finns på samma resursplats som den matchande relaterade resursen.
  • roleDefinitionIds (krävs)

    • Den här egenskapen måste innehålla en matris med strängar som matchar roll-ID för roll-ID för roll för roll i roll som är tillgänglig för prenumerationen. Mer information finns i Reparation – konfigurera principdefinitionen.
  • deploymentScope (valfritt)

    • Tillåtna värden är Prenumeration och ResourceGroup.
    • Anger vilken typ av distribution som ska utlösas. Prenumerationen anger en distribution på prenumerationsnivå och ResourceGroup anger en distribution till en resursgrupp.
    • En platsegenskap måste anges i distributionen när du använder distributioner på prenumerationsnivå.
    • Standardvärdet är ResourceGroup.
  • deployment (krävs)

    • Den här egenskapen bör innehålla den fullständiga malldistributionen eftersom den skickas till PUT-API:et Microsoft.Resources/deployments . Mer information finns i REST API för distributioner.
    • Kapslade Microsoft.Resources/deployments i mallen bör använda unika namn för att undvika konkurrens mellan flera principutvärderingar. Namnet på den överordnade distributionen kan användas som en del av det kapslade distributionsnamnet via [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Kommentar

    Alla funktioner i deployment egenskapen utvärderas som komponenter i mallen, inte principen. Undantaget är egenskapen parameters som skickar värden från principen till mallen. I value det här avsnittet under ett mallparameternamn används för att utföra det här värdet som skickas (se fullDbName i exemplet DeployIfNotExists).

DeployIfNotExists-exempel

Exempel: Utvärderar SQL Server-databaser för att avgöra om transparentDataEncryption är aktiverat. Annars körs en distribution som ska aktiveras.

"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')]"
          }
        }
      }
    }
  }
}

Nästa steg