Teilen über


Auswirkung „deployIfNotExists“ von Azure Policy-Definitionen

Ähnlich wie auditIfNotExists führt eine deployIfNotExists-Richtliniendefinition eine Vorlagenbereitstellung durch, wenn die Bedingung erfüllt ist. Richtlinienzuweisungen, deren Auswirkung auf "DeployIfNotExists" festgelegt ist, erfordern für das Durchführen von Korrekturmaßnahmen eine verwaltete Identität.

Hinweis

Geschachtelte Vorlagen werden mit deployIfNotExists unterstützt, verknüpfte Vorlagen werden derzeit jedoch nicht unterstützt.

Auswertung von „DeployIfNotExists“

deployIfNotExists wird nach einer (konfigurierbaren) Verzögerung ausgeführt, wenn ein Ressourcenanbieter eine Anforderung zum Erstellen oder Aktualisieren eines Abonnements oder einer Ressource verarbeitet und ein Erfolgsstatuscode zurückgegeben hat. Eine Vorlagenbereitstellung findet statt, wenn keine entsprechenden Ressourcen vorhanden sind oder wenn die über existenceCondition definierten Ressourcen nicht als „True“ ausgewertet werden. Die Dauer der Bereitstellung hängt von der Komplexität der in der Vorlage enthaltenen Ressourcen ab.

Während eines Auswertungszyklus führen Richtliniendefinitionen mit der Auswirkung „DeployIfNotExists“ dazu, dass übereinstimmende Ressourcen als nicht konform markiert werden. Es wird aber keine Aktion für diese Ressource ausgeführt. Bestehende, nicht konforme Ressourcen können mit einem Wartungstask bereinigt werden.

Eigenschaften von „DeployIfNotExists“

Die details-Eigenschaft der Auswirkung „DeployIfNotExists“ umfasst alle Untereigenschaften, die die entsprechenden Ressourcen für den Abgleich und die auszuführende Vorlagenbereitstellung definieren.

  • type (erforderlich)
    • Gibt den Typ der entsprechenden abzugleichenden Ressource an.
    • Wenn es sich bei type um einen Ressourcentyp unterhalb der if-Bedingungsressource handelt, fragt die Richtlinie Ressourcen von diesem type innerhalb des Bereichs der ausgewerteten Ressource ab. Andernfalls fragt die Richtlinie je nach existenceScope Ressourcen innerhalb derselben Ressourcengruppe oder desselben Abonnements wie die ausgewertete Ressource ab.
  • name (optional)
    • Gibt den exakten Namen der Ressource für den Abgleich an und führt dazu, dass die Richtlinie nicht alle Ressourcen des angegebenen Typs, sondern eine bestimmte Ressource abruft.
    • Wenn die Bedingungswerte für if.field.type und then.details.type übereinstimmen, wird die name-Eigenschaft erforderlich und muss [field('name')] oder [field('fullName')] sein für eine untergeordnete Ressource.

Hinweis

type- und name-Segmente können kombiniert werden, um geschachtelte Ressourcen generisch abzurufen.

Um eine bestimmte Ressource abzurufen, können Sie "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" und "name": "parentResourceName/nestedResourceName" verwenden.

Zum Abrufen einer Sammlung geschachtelter Ressourcen kann anstelle des letzten Namenssegments ein Platzhalterzeichen ? angegeben werden. Beispiel: "type": "Microsoft.ExampleProvider/exampleParentType/exampleNestedType" und "name": "parentResourceName/?". Dieses kann mit Feldfunktionen kombiniert werden, um auf Ressourcen zuzugreifen, die mit der ausgewerteten Ressource in Zusammenhang stehen, z. B. "name": "[concat(field('name'), '/?')]"".

  • resourceGroupName (optional)

    • Hierdurch ist es möglich, für den Abgleich eine Ressource aus einer anderen Ressourcengruppe festzulegen.
    • Diese Eigenschaft ist nicht anwendbar, wenn type eine Ressource unterhalb der if-Bedingungsressource ist.
    • Standardmäßig wird die Ressourcengruppe der if-Bedingungsressource verwendet.
    • Wenn eine Vorlagenbereitstellung durchgeführt wird, erfolgt diese in der Ressourcengruppe, die über diesen Wert angegeben wurde.
  • existenceScope (optional)

    • Zulässige Werte sind Subscription und ResourceGroup.
    • Legt den Bereich fest, aus dem die entsprechende Ressource für den Abgleich abgerufen werden soll.
    • Diese Eigenschaft ist nicht anwendbar, wenn type eine Ressource unterhalb der if-Bedingungsressource ist.
    • Für ResourceGroup wird der Bereich auf die Ressourcengruppe in resourceGroupName beschränkt, sofern diese Eigenschaft angegeben ist. Wenn resourceGroupName nicht angegeben ist, wird der Bereich auf die Ressourcengruppe der if-Bedingungsressource begrenzt. Dies ist das Standardverhalten.
    • Für Subscription wird das gesamte Abonnement nach der entsprechenden Ressource abgefragt. Der Zuweisungsbereich sollte für die ordnungsgemäße Auswertung auf das Abonnement oder höher festgelegt werden.
    • Die Standardeinstellung ist ResourceGroup.
  • evaluationDelay (optional)

    • Hiermit wird angegeben, wann die Existenz der zugehörigen Ressourcen ausgewertet werden soll. Die Verzögerung wird nur bei Auswertungen verwendet, die das Ergebnis einer Erstell- oder Aktualisierungsanforderung für die Ressource sind.
    • Zu den zulässigen Werten zählen AfterProvisioning, AfterProvisioningSuccess und AfterProvisioningFailure sowie eine Dauer gemäß ISO 8601 zwischen 0 und 360 Minuten.
    • Die AfterProvisioning-Werte untersuchen die Bereitstellungsergebnisse der Ressource, die in der if-Bedingung der Richtlinienregel ausgewertet wurde. AfterProvisioning wird unabhängig vom Ergebnis nach der Bereitstellung ausgeführt. Eine Bereitstellung, die länger als sechs Stunden dauert, wird beim Bestimmen der AfterProvisioning-Auswertungsverzögerungen als Fehler behandelt.
    • Der Standardwert ist PT10M (zehn Minuten).
    • Eine lange Auswertungsverzögerung kann dazu führen, dass der aufgezeichnete Konformitätszustand der Ressource bis zur nächsten Auswertungsauslösung nicht aktualisiert wird.
  • existenceCondition (optional)

    • Sofern nicht festgelegt, erfüllt jede entsprechende Ressource vom angegebenen type die Bedingung der Auswirkung und löst keine Bereitstellung aus.
    • Verwendet dieselbe Sprachsyntax wie die Richtlinienregel für die if-Bedingung, wird jedoch für jede entsprechende Ressource einzeln ausgeführt.
    • Wenn eine übereinstimmende Ressource als TRUE ausgewertet wird, ist die Auswirkung erfüllt und löst keine Bereitstellung aus.
    • [field()] kann verwendet werden, um auf Äquivalenz mit Werten in der if-Bedingung zu überprüfen.
    • Beispielsweise könnte so überprüft werden, ob die übergeordnete Ressource (in der if-Bedingung) sich am selben Ressourcenstandort befindet wie die übereinstimmende Ressource.
  • roleDefinitionIds (erforderlich)

  • deploymentScope (optional)

    • Zulässige Werte sind Subscription und ResourceGroup.
    • Legt den Typ der auszulösenden Bereitstellung fest. Mit Subscription wird eine Bereitstellung auf Abonnementebene angegeben und mit ResourceGroup eine Bereitstellung in einer Ressourcengruppe.
    • Bei der Bereitstellung auf Abonnementebene muss in Deployment eine location-Eigenschaft angegeben werden.
    • Die Standardeinstellung ist ResourceGroup.
  • deployment (erforderlich)

    • Diese Eigenschaft muss die vollständige Vorlagenbereitstellung enthalten, so wie sie an die PUT-API Microsoft.Resources/deployments übergeben würde. Weitere Informationen finden Sie im Artikel zur REST-API für die Bereitstellung.
    • Geschachtelte Microsoft.Resources/deployments-Elemente innerhalb der Vorlage sollten eindeutige Namen verwenden, um Konflikte zwischen mehreren Richtlinienauswertungen zu vermeiden. Der Name der übergeordneten Bereitstellung kann über [concat('NestedDeploymentName-', uniqueString(deployment().name))] als Teil des Namens der geschachtelte Bereitstellung verwendet werden.

    Hinweis

    Alle Funktionen innerhalb der deployment-Eigenschaft werden als Komponenten der Vorlage – nicht der Richtlinie – ausgewertet. Eine Ausnahme ist die parameters-Eigenschaft, die Werte von der Richtlinie an die Vorlage übergibt. Der in diesem Abschnitt unter einem Vorlagenparameternamen angegebene Wert für value wird verwendet, um diese Wertübergabe durchzuführen (siehe fullDbName im DeployIfNotExists-Beispiel).

Beispiel für „DeployIfNotExists“

Beispiel: Wertet SQL Server-Datenbanken aus, um zu bestimmen, ob „transparentDataEncryption“ aktiviert ist. Falls nicht, wird eine Bereitstellung zur Aktivierung dieser Option durchgeführt.

"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ächste Schritte