Dela via


Azure Policy-definitioner distribuerarIfNotExists-effekt

På samma sätt som auditIfNotExists, så kör en deployIfNotExists riktlinjedefinition en malldistribution när villkoret uppfylls. Principtilldelningar med effekt inställd på DeployIfNotExists kräver en hanterad identitet för att utföra åtgärd.

Anmärkning

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 uppdateringsbegäran för prenumeration eller resurs och returnerar en lyckad statuskod. 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 policyn efter resurser av denna typ type inom ramen för den utvärderade resursen. Annars kan principfrågor inom samma resursgrupp eller prenumeration som den utvärderade resursen, beroende på existenceScope.
  • 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 namenödvändiga och måste vara [field('name')]eller [field('fullName')] för en underordnad resurs.

Anmärkning

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 den if villkorsresursen.
    • Standardvärdet är if villkorsresursens resursgrupp.
    • Om en mallimplementation körs distribueras den i resursgruppen associerad med 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 hämtas för att matcha.
    • Gäller inte om type är en resurs som skulle finnas under den if villkorsresursen.
    • För ResourceGroupskulle det begränsas till resursgruppen i resourceGroupName om det anges. Om resourceGroupName inte anges begränsar du till if villkorsresursens resursgrupp, vilket är standardbeteendet.
    • För Prenumerationgör en förfrågan om hela prenumerationen för att hitta relaterade resurser. Tilldelningsomfånget bör anges på prenumerationsnivån 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 policyregelns if villkor. AfterProvisioning körs när etableringen är klar, oavsett utfall. Etablering som tar mer än sex timmar behandlas som ett fel vid fastställande av AfterProvisioning utvärderingsfördröjningar.
    • 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 if villkoret, 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 if villkor.
    • Kan till exempel användas för att verifiera att den överordnade resursen (i if villkor) 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:n för rollbaserad åtkomstkontroll som är tillgängliga genom 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. Den överordnade distributionens namn kan användas som en del av det kapslade distributionsnamnet via [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Anmärkning

    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 överföra detta värde (se fullDbName i exemplet DeployIfNotExists).

DeployIfNotExists-exempel

Exempel: Utvärderar SQL Server-databaser för att avgöra om transparentDataEncryption är aktiverat. Om inte, körs en distribution för att möjliggöra.

"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