Share via


Auswirkung „modify“ von Azure Policy-Definitionen

Die Auswirkung modify wird verwendet, um Eigenschaften oder Tags während der Erstellung oder Aktualisierung eines Abonnements oder einer Ressource hinzuzufügen, zu aktualisieren oder zu entfernen. Ein häufiges Beispiel ist die Aktualisierung von Tags für Ressourcen wie „costCenter“. Bestehende, nicht konforme Ressourcen können mit einem Wartungstask bereinigt werden. Eine einzelne Modify-Regel kann eine beliebige Anzahl von Vorgängen aufweisen. Richtlinienzuweisungen, deren Auswirkung auf "modify" festgelegt ist, erfordern für das Durchführen von Korrekturmaßnahmen eine verwaltete Identität.

Die Auswirkung modify unterstützt die folgenden Vorgänge:

  • Hinzufügen, Ersetzen oder Entfernen von Ressourcentags. Für Tags sollte mode bei einer Modify-Richtlinie auf indexed festgelegt sein, es sei denn, die Zielressource ist eine Ressourcengruppe.
  • Hinzufügen oder Ersetzen des Werts eines verwalteten Identitätstyps (identity.type) von virtuellen Computern und VM-Skalierungsgruppen Der identity.type kann nur für VMs oder Virtual Machine Scale Sets geändert werden.
  • Hinzufügen oder Ersetzen der Werte bestimmter Aliase
    • Verwenden Sie Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } in Azure PowerShell 4.6.0 oder höher, um eine Liste der Aliase abzurufen, die mit modify verwendet werden können.

Wichtig

Wenn Sie Tags verwalten, wird empfohlen, „Modify“ anstelle von „Append“ zu verwenden, da „Modify“ weitere Vorgangstypen und die Möglichkeit bietet, vorhandene Ressourcen zu korrigieren. Allerdings wird „Append“ empfohlen, wenn Sie keine verwaltete Identität erstellen können oder der Alias für die Ressourceneigenschaft von „Modify“ noch nicht unterstützt wird.

Auswertung von „Modify“

Die Auswertung von „Modify“ erfolgt vor der Anforderungsverarbeitung durch einen Ressourcenanbieter während der Erstellung oder Aktualisierung einer Ressource. Die modify-Vorgänge werden auf den Anforderungsinhalt angewendet, wenn die if-Bedingung der Richtlinienregel erfüllt wird. Jeder modify-Vorgang kann eine Bedingung angeben, die bestimmt, wann er angewendet wird. Vorgänge mit Bedingungen, die bei Auswertung false ergeben, werden übersprungen.

Wenn ein Alias angegeben wird, werden weitere Überprüfungen durchgeführt, um sicherzustellen, dass der Anforderungsinhalt vom modify-Vorgang nicht in einer Weise geändert wird, dass er vom Ressourcenanbieter abgelehnt wird:

  • Die Eigenschaft, der der Alias zugeordnet ist, wird in der API-Version der Anforderung als Modifiable gekennzeichnet.
  • Der Tokentyp im modify-Vorgang entspricht dem erwarteten Tokentyp für die Eigenschaft in der API-Version der Anforderung.

Wenn eine dieser Überprüfungen fehlschlägt, greift die Richtlinienauswertung auf den angegebenen conflictEffect zurück.

Wichtig

Es wird empfohlen, dass Definitionen von „Modify“, die Aliase enthalten, auditconflictEffect verwenden. Damit wird vermieden, dass bei Anforderungen mit API-Versionen, bei denen die zugeordnete Eigenschaft nicht „Modifiable“ lautet, ein Fehler auftritt. Wenn sich derselbe Alias zwischen API-Versionen unterschiedlich verhält, können bedingte Modify-Vorgänge verwendet werden, um den für die einzelnen API-Versionen verwendeten modify-Vorgang zu bestimmen.

Wenn eine Richtliniendefinition mit der Auswirkung modify im Rahmen eines Auswertungszyklus ausgeführt wird, werden keine Änderungen an bereits vorhandenen Ressourcen vorgenommen. Stattdessen werden alle Ressourcen, die die if-Bedingung erfüllen, als nicht konform markiert.

Eigenschaften von „Modify“

Die details-Eigenschaft der Auswirkung modify enthält alle Untereigenschaften, die die erforderlichen Berechtigungen für die Wartung definieren, und die operations, mit denen Tagwerte hinzugefügt, aktualisiert oder entfernt werden.

  • roleDefinitionIds (erforderlich)
    • Diese Eigenschaft muss ein Array von Zeichenfolgen enthalten, das mit der Rollen-ID der rollenbasierten Zugriffssteuerung übereinstimmt, auf die das Abonnement zugreifen kann. Weitere Informationen finden Sie unter Korrigieren nicht konformer Ressourcen mit Azure Policy.
    • Die definierte Rolle muss alle Vorgänge einbeziehen, die der Rolle Mitwirkender erteilt wurden.
  • conflictEffect (optional)
    • Bestimmt, welche Richtliniendefinition verwendet wird, wenn dieselbe Eigenschaft durch mehrere Richtliniendefinitionen geändert wird oder wenn der modify-Vorgang für den angegebenen Alias nicht funktioniert.
      • Bei neuen oder aktualisierten Ressourcen hat die Richtliniendefinition mit deny Vorrang. Richtliniendefinitionen mit audit überspringen alle Vorgänge (operations). Sind mehrere Richtliniendefinitionen mit dem Effekt deny vorhanden, wird die Anforderung als Konflikt abgelehnt. Enthalten alle Richtliniendefinitionen audit, wird keiner der Vorgänge (operations) der in Konflikt stehenden Richtliniendefinitionen verarbeitet.
      • Falls bei vorhandenen Ressourcen mehrere Richtliniendefinition den Effekt deny enthalten, lautet der Konformitätsstatus Conflict. Ist der Effekt deny in maximal einer Richtliniendefinition enthalten, wird von den einzelnen Zuweisungen jeweils der Konformitätsstatus Non-compliant zurückgegeben.
    • Verfügbare Werte: audit, deny, disabled
    • Standardwert: deny
  • operations (erforderlich)
    • Ein Array aller Tagvorgänge, die auf übereinstimmenden Ressourcen ausgeführt werden sollen.
    • Eigenschaften:
      • operation (erforderlich)
        • Definiert, welche Maßnahme bei einer übereinstimmenden Ressource ergriffen werden sollen. Optionen sind: addOrReplace, Add, Remove. Add verhält sich ähnlich wie die Auswirkung append.
      • field (erforderlich)
        • Das Tag, das hinzugefügt, ersetzt oder entfernt werden soll. Tagnamen müssen derselben Namenskonvention für andere Felder entsprechen.
      • value (optional)
        • Der Wert, auf den das Tag festgelegt werden soll.
        • Diese Eigenschaft ist erforderlich, wenn operation auf addOrReplace oder Add festgelegt ist.
      • condition (optional)
        • Eine Zeichenfolge mit einem Azure Policy-Sprachausdruck und Richtlinienfunktionen, der true oder false ergibt.
        • Die folgenden Richtlinienfunktionen werden nicht unterstützt: field(), resourceGroup(), subscription()

Vorgänge für „Modify“

Das operations-Eigenschaftenarray ermöglicht es, mehrere Tags auf unterschiedliche Weise in einer einzelnen Richtliniendefinition zu ändern. Jeder Vorgang besteht aus den Eigenschaften operation, field und value. operation bestimmt, wie die Wartungsaufgabe mit den Tags verfährt, field bestimmt, welches Tag geändert wird, und value definiert die neue Einstellung für dieses Tag. Im folgenden Beispiel werden die folgenden Tag-Änderungen vorgenommen:

  • Legt das environment-Tag auf „Test“ fest, auch wenn es bereits mit einem anderen Wert vorhanden ist.
  • Entfernt das Tag TempResource.
  • Legt das Dept-Tag auf den Richtlinienparameter DeptName fest, der bei der Richtlinienzuweisung konfiguriert wurde.
"details": {
  ...
  "operations": [
    {
      "operation": "addOrReplace",
      "field": "tags['environment']",
      "value": "Test"
    },
    {
      "operation": "Remove",
      "field": "tags['TempResource']",
    },
    {
      "operation": "addOrReplace",
      "field": "tags['Dept']",
      "value": "[parameters('DeptName')]"
    }
  ]
}

Die operation-Eigenschaft verfügt über folgende Optionen:

Vorgang Beschreibung
addOrReplace Fügt die definierte Eigenschaft oder das definierte Tag und den Wert zur Ressource hinzu, auch wenn die Eigenschaft oder das Tag bereits mit einem anderen Wert vorhanden ist.
add Fügt der Ressource die definierte Eigenschaft oder das definierte Tag und den Wert hinzu.
remove Entfernt die definierte Eigenschaft oder das definierte Tag aus der Ressource.

Beispiele für „Modify“

Beispiel 1: Fügen Sie das environment-Tag hinzu, und ersetzen Sie vorhandene environment-Tags durch „Test“:

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "operations": [
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "Test"
      }
    ]
  }
}

Beispiel 2: Entfernen Sie das env-Tag, und fügen Sie das environment-Tag hinzu oder ersetzen Sie vorhandene environment-Tags durch einen parametrisierten Wert:

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c"
    ],
    "conflictEffect": "deny",
    "operations": [
      {
        "operation": "Remove",
        "field": "tags['env']"
      },
      {
        "operation": "addOrReplace",
        "field": "tags['environment']",
        "value": "[parameters('tagValue')]"
      }
    ]
  }
}

Beispiel 3: Sicherstellen, dass ein Speicherkonto keinen öffentlichen Zugriff auf Blobs zulässt. Der modify-Vorgang wird nur bei der Auswertung von Anforderungen mit einer API-Version größer oder gleich 2019-04-01 angewendet:

"then": {
  "effect": "modify",
  "details": {
    "roleDefinitionIds": [
      "/providers/microsoft.authorization/roleDefinitions/17d1049b-9a84-46fb-8f53-869881c3d3ab"
    ],
    "conflictEffect": "audit",
    "operations": [
      {
        "condition": "[greaterOrEquals(requestContext().apiVersion, '2019-04-01')]",
        "operation": "addOrReplace",
        "field": "Microsoft.Storage/storageAccounts/allowBlobPublicAccess",
        "value": false
      }
    ]
  }
}

Nächste Schritte