Share via


Azure Policy-definities deployIfNotExists-effect

auditIfNotExistsNet als bij een deployIfNotExists beleidsdefinitie wordt een sjabloonimplementatie uitgevoerd wanneer aan de voorwaarde wordt voldaan. Beleidstoewijzingen met effect ingesteld als DeployIfNotExists vereisen een beheerde identiteit om herstel uit te voeren.

Notitie

Geneste sjablonen worden ondersteund met deployIfNotExists, maar gekoppelde sjablonen worden momenteel niet ondersteund.

DeployIfNotExists-evaluatie

deployIfNotExists wordt uitgevoerd na een configureerbare vertraging wanneer een resourceprovider een maken of bijwerken abonnement of resourceaanvraag verwerkt en een geslaagde statuscode heeft geretourneerd. Een sjabloonimplementatie vindt plaats als er geen gerelateerde resources zijn of als de resources die zijn gedefinieerd door existenceCondition niet waar worden geëvalueerd. De duur van de implementatie hangt af van de complexiteit van resources die in de sjabloon zijn opgenomen.

Tijdens een evaluatiecyclus worden beleidsdefinities met een DeployIfNotExists-effect dat overeenkomt met resources gemarkeerd als niet-compatibel, maar er wordt geen actie ondernomen op die resource. Bestaande niet-compatibele resources kunnen worden hersteld met een hersteltaak.

DeployIfNotExists-eigenschappen

De details eigenschap van het effect DeployIfNotExists heeft alle subproperties die de gerelateerde resources definiëren die overeenkomen met en de sjabloonimplementatie die moet worden uitgevoerd.

  • type (vereist)
    • Hiermee geeft u het type van de gerelateerde resource die moet overeenkomen.
    • Als type dit een resourcetype is onder de if voorwaarderesource, voert het beleid query's uit voor resources hiervan type binnen het bereik van de geëvalueerde resource. Anders worden beleidsquery's binnen dezelfde resourcegroep of hetzelfde abonnement als de geëvalueerde resource, afhankelijk van de existenceScope.
  • name (optioneel)
    • Hiermee geeft u de exacte naam van de resource die overeenkomt en zorgt ervoor dat het beleid één specifieke resource ophaalt in plaats van alle resources van het opgegeven type.
    • Wanneer de voorwaardewaarden voor if.field.type en then.details.type overeenkomst zijn, wordt dit name vereist en moet [field('name')]dit zijn, of [field('fullName')] voor een onderliggende resource.

Notitie

type en name segmenten kunnen worden gecombineerd om geneste resources algemeen op te halen.

Als u een specifieke resource wilt ophalen, kunt u deze gebruiken "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" en "name": "parentResourceName/nestedResourceName".

Als u een verzameling geneste resources wilt ophalen, kunt u een jokerteken ? opgeven in plaats van het achternaamsegment. Bijvoorbeeld "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" en "name": "parentResourceName/?". Dit kan worden gecombineerd met veldfuncties voor toegang tot resources die zijn gerelateerd aan de geëvalueerde resource, zoals "name": "[concat(field('name'), '/?')]".".

  • resourceGroupName (optioneel)

    • Hiermee kan de overeenkomende resource afkomstig zijn van een andere resourcegroep.
    • Dit geldt niet als type dit een resource is die zich onder de if voorwaarderesource bevindt.
    • De standaardwaarde is de resourcegroep van de if voorwaarderesource.
    • Als een sjabloonimplementatie wordt uitgevoerd, wordt deze geïmplementeerd in de resourcegroep van deze waarde.
  • existenceScope (optioneel)

    • Toegestane waarden zijn Abonnement en ResourceGroup.
    • Hiermee stelt u het bereik in van waar de gerelateerde resource moet worden opgehaald waaruit moet worden gematcht.
    • Dit geldt niet als type dit een resource is die zich onder de if voorwaarderesource bevindt.
    • Voor ResourceGroup zou dit worden beperkt tot de resourcegroep waarin resourceGroupName deze is opgegeven. Als resourceGroupName dit niet is opgegeven, beperkt u zich tot de resourcegroep van de if voorwaarderesource. Dit is het standaardgedrag.
    • Voor Abonnement voert u een query uit op het hele abonnement voor de gerelateerde resource. Het toewijzingsbereik moet worden ingesteld op abonnement of hoger voor de juiste evaluatie.
    • De standaardwaarde is ResourceGroup.
  • evaluationDelay (optioneel)

    • Hiermee geeft u op wanneer het bestaan van de gerelateerde resources moet worden geëvalueerd. De vertraging wordt alleen gebruikt voor evaluaties die het gevolg zijn van een aanvraag voor het maken of bijwerken van resources.
    • Toegestane waarden zijn AfterProvisioning, AfterProvisioningSuccessof AfterProvisioningFailureeen ISO 8601-duur tussen 0 en 360 minuten.
    • De waarden na inrichting inspecteren het inrichtingsresultaat van de resource die is geëvalueerd in de voorwaarde van if de beleidsregel. AfterProvisioning wordt uitgevoerd nadat het inrichten is voltooid, ongeacht het resultaat. Inrichting die langer dan zes uur duurt, wordt behandeld als een fout bij het bepalen van na het inrichten van evaluatievertragingen.
    • De standaardwaarde is PT10M (10 minuten).
    • Het opgeven van een lange evaluatievertraging kan ertoe leiden dat de vastgelegde nalevingsstatus van de resource pas wordt bijgewerkt als de volgende evaluatietrigger.
  • existenceCondition (optioneel)

    • Als dit niet is opgegeven, voldoet een gerelateerde resource aan type het effect en wordt de implementatie niet geactiveerd.
    • Gebruikt dezelfde taal als de beleidsregel voor de if voorwaarde, maar wordt afzonderlijk geëvalueerd op basis van elke gerelateerde resource.
    • Als een overeenkomende gerelateerde resource waar oplevert, is het effect tevreden en wordt de implementatie niet geactiveerd.
    • Kan [field()] gebruiken om de gelijkwaardigheid met waarden in de if voorwaarde te controleren.
    • Kan bijvoorbeeld worden gebruikt om te controleren of de bovenliggende resource (in de if voorwaarde) zich op dezelfde resourcelocatie bevindt als de overeenkomende gerelateerde resource.
  • roleDefinitionIds (vereist)

    • Deze eigenschap moet een matrix met tekenreeksen bevatten die overeenkomen met de rol-id van op rollen gebaseerd toegangsbeheer die toegankelijk is voor het abonnement. Zie herstel voor meer informatie: de beleidsdefinitie configureren.
  • deploymentScope (optioneel)

    • Toegestane waarden zijn Abonnement en ResourceGroup.
    • Hiermee stelt u het type implementatie in dat moet worden geactiveerd. Abonnement geeft een implementatie op abonnementsniveau aan en ResourceGroup geeft een implementatie aan voor een resourcegroep.
    • Er moet een locatie-eigenschap worden opgegeven in de implementatie wanneer u implementaties op abonnementsniveau gebruikt.
    • De standaardwaarde is ResourceGroup.
  • deployment (vereist)

    • Deze eigenschap moet de volledige sjabloonimplementatie bevatten, omdat deze wordt doorgegeven aan de Microsoft.Resources/deployments PUT-API. Zie de REST API voor implementaties voor meer informatie.
    • Geneste Microsoft.Resources/deployments binnen de sjabloon moet unieke namen gebruiken om conflicten tussen meerdere beleidsevaluaties te voorkomen. De naam van de bovenliggende implementatie kan worden gebruikt als onderdeel van de geneste implementatienaam via [concat('NestedDeploymentName-', uniqueString(deployment().name))].

    Notitie

    Alle functies in de deployment eigenschap worden geëvalueerd als onderdelen van de sjabloon, niet als het beleid. De uitzondering is de parameters eigenschap die waarden van het beleid doorgeeft aan de sjabloon. De value in deze sectie onder de naam van een sjabloonparameter wordt gebruikt om deze waarde door te geven (zie fullDbName in het voorbeeld DeployIfNotExists).

Voorbeeld deployIfNotExists

Voorbeeld: Evalueert SQL Server-databases om te bepalen of transparentDataEncryption deze is ingeschakeld. Zo niet, dan wordt er een implementatie uitgevoerd die moet worden ingeschakeld.

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

Volgende stappen