Úprava účinku v definicích Azure Policy

Účinek modify se používá k přidání, aktualizaci nebo odebrání vlastností nebo značek u předplatného nebo prostředku během vytváření nebo aktualizace. Stávající nekompatibilní prostředky lze také napravit úlohou nápravy. Přiřazení zásad s efektem nastaveným na Modify vyžadují spravovanou identitu pro provedení nápravy. Běžným příkladem použití modify efektu je aktualizace značek u prostředků, jako je například costCenter.

U vlastností prostředků existují určité nuance v chování při jejich úpravách. Přečtěte si další informace o scénářích, kdy je úprava přeskočena.

Jedno modify pravidlo může mít libovolný počet operací. Podporované operace jsou:

  • Přidejte, nahraďte, nebo odeberte značky prostředků. Značky lze odebrat pouze. U značek by zásada Modify měla mít režim nastavený na indexed, pokud není cílový prostředek skupina prostředků.
  • Přidejte nebo nahraďte hodnotu typu spravované identity (identity.type) virtuálních počítačů a škálovacích sad virtuálních počítačů. Můžete upravit identity.type pouze pro virtuální počítače nebo škálovací sady virtuálních počítačů.
  • Přidejte nebo nahraďte hodnoty určitých aliasů.
    • Použijte Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } v Azure PowerShellu 4.6.0 nebo novějším k získání seznamu aliasů, které lze použít s modify.

Important

Pokud spravujete značky, doporučuje se místo příkazu Přidat použít funkci Upravit, protože funkce Modify poskytuje více typů operací a možnost opravovat existující prostředky. Přidání se doporučuje, pokud nemůžete vytvořit spravovanou identitu nebo úprava ještě nepodporuje alias pro vlastnost prostředku.

Úprava vyhodnocení

Úprava se vyhodnotí ještě před tím, než poskytovatel prostředků zpracuje požadavek při vytváření nebo aktualizaci prostředku. Operace modify se použijí na obsah požadavku, když je splněna podmínka if pravidla. Každá modify operace může zadat podmínku, která určuje, kdy se použije.

Když je zadaný alias, provede se další kontroly, aby se zajistilo, že modify operace nezmění obsah požadavku způsobem, který způsobí, že ho poskytovatel prostředků odmítne:

  • Vlastnost, na kterou se alias mapuje, je označena jako modifikovatelná ve verzi rozhraní API požadavku.
  • Typ tokenu modify v operaci odpovídá očekávanému typu tokenu pro vlastnost ve verzi rozhraní API požadavku.

Pokud některá z těchto kontrol selže, vyhodnocení zásad se vrátí do zadaného conflictEffect.

Important

Doporučuje se, aby definice, které obsahují aliasy, využívaly auditukonfliktní účinek k zabránění selhání požadavků při použití verzí rozhraní API, kde mapovaná vlastnost není „upravovatelná“. Pokud se stejný alias chová odlišně mezi verzemi rozhraní API, můžete k určení modify operace používané pro každou verzi rozhraní API použít operace podmíněné úpravy.

Vynechaná úprava

Během vyhodnocování jsou některé operace úprav vynechány.

  • Existující prostředky: Pokud se definice zásady používající modify efekt spustí jako součást cyklu vyhodnocení, neprovádí změny prostředků, které už existují. Místo toho označí všechny prostředky, které splňují podmínku if jako nevyhovující, aby je bylo možné napravit pomocí úlohy nápravy.
  • Nelze použít: Pokud je podmínka operace v operations poli vyhodnocena jako nepravda, daná konkrétní operace se přeskočí.
  • Vlastnost není upravitelná: Pokud v verzi rozhraní API požadavku není možné upravit alias zadaný pro operaci, použije vyhodnocení konfliktní efekt. Pokud je konfliktní efekt nastavený na odepření, požadavek se zablokuje. Pokud je konfliktní efekt nastavený na audit, požadavek se povolí, ale modify operace se přeskočí.
  • Vlastnost není k dispozici: Pokud vlastnost není v datové části prostředku požadavku, může být změna vynechána. V některých případech jsou upravitelné vlastnosti vnořené do jiných vlastností a mají alias jako Microsoft.Storage/storageAccounts/blobServices/deleteRetentionPolicy.enabled. Pokud vlastnost "parent" v tomto případě deleteRetentionPolicynení v požadavku přítomna, úpravy se přeskočí, protože se předpokládá, že tato vlastnost je záměrně vynechána. Praktický příklad najdete v části Příklad vlastnosti, která není k dispozici.
  • Operace identity, které se netýkají virtuálního počítače nebo škálovací sady virtuálních počítačů: Pokud se operace úpravy pokusí přidat nebo nahradit identity.type pole u jiného prostředku než je virtuální počítač nebo škálovací sada virtuálních počítačů, vyhodnocení zásad se úplně přeskočí, což znamená, že úprava nebude provedena. V tomto případě se prostředek nepovažuje za použitelný pro politiku.

Příklad vlastnosti, která není k dispozici

Úprava vlastností prostředku závisí na požadavku rozhraní API a aktualizované datové části prostředku. Datová část může záviset na použitém klientovi, jako je Azure Portal, a dalších faktorech, jako je poskytovatel prostředků.

Představte si, že použijete politiku, která upravuje značky na virtuálním stroji. Při každé aktualizaci virtuálního počítače, například při změně velikosti nebo změny disku, se značky odpovídajícím způsobem aktualizují bez ohledu na obsah datové části virtuálního počítače. Protože značky jsou nezávislé na vlastnostech virtuálního počítače.

Pokud ale použijete zásadu, která upraví vlastnosti virtuálního počítače, závisí úprava na datovém obsahu prostředku. Pokud se pokusíte upravit vlastnosti, které nejsou zahrnuty v datové části aktualizace, změny se neprovedou. K tomu může dojít například při opravě assessmentMode vlastnosti virtuálního počítače (aliasu Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode). Vlastnost je "vnořená", takže pokud její nadřazené vlastnosti nejsou zahrnuty do požadavku, předpokládá se, že toto vynechání je úmyslné a změna se přeskočí. Aby se změny projevily, datový obsah prostředku musí obsahovat tento kontext.

Úprava vlastností

Vlastnost details efektu modify má všechny dílčí vlastnosti, které definují oprávnění potřebná k nápravě a operations použité k přidání, aktualizaci nebo odebrání hodnot značek.

  • roleDefinitionIds (povinné)
  • conflictEffect (volitelné)
    • Určuje, která definice zásady "vyhrává", pokud více než jedna definice zásady změní stejnou vlastnost nebo když modify operace nefunguje na zadaném aliasu.
      • U nových nebo aktualizovaných prostředků má přednost definice zásady se zamítnutím. Definice zásad s přeskočením . Pokud má více definic zásad účinek odepření, žádost se zamítá jako konflikt. Pokud mají všechny definice zásad audit, nezpracují se žádné z operations konfliktních definic zásad.
      • U existujících prostředků platí, že pokud má více než jednu definici zásad vliv na odepření, stav dodržování předpisů je Konflikt. Pokud nejvýše jedna definice zásady má účinek zamítnutí, každé přiřazení má stav shody nesoulad.
    • Dostupné hodnoty: audit, zamítnout, zakázáno.
    • Výchozí hodnota je odepřena.
  • operations (povinné)
    • Pole všech operací se značkami k dokončení na odpovídajících prostředcích.
    • Properties:
      • operation (povinné)
        • Definuje, jaká akce se má provést u odpovídajícího prostředku. Možnosti jsou: addOrReplace, Adda Remove.
        • Add se chová podobně jako efekt připojení.
        • Remove je podporován pouze pro tagy zdrojů.
      • field (povinné)
        • Značka, která se má přidat, nahradit nebo odebrat. Názvy značek musí dodržovat stejnou konvenci pojmenování pro jiná pole.
      • value (volitelné)
        • Hodnota, na kterou chcete nastavit značku.
        • Tato vlastnost je vyžadována, pokud operation je addOrReplace nebo Add.
      • condition (volitelné)
        • Řetězec obsahující výraz jazyka Azure Policy s funkcemi Policy, které se vyhodnotí jako true nebo false.
        • Nepodporuje následující funkce zásad: field(), resourceGroup(), subscription().

Úprava operací

Pole operations vlastností umožňuje změnit několik značek různými způsoby od jedné definice zásad. Každá operace se skládá z operation, fielda value vlastností. Určuje operation , co úloha nápravy dělá se značkami, určuje, field která značka se změní, a value definuje nové nastavení pro tuto značku. Příklad níže provede následující změny značek:

  • environment Nastaví značku na Test, i když už existuje s jinou hodnotou.
  • Odebere značku TempResource.
  • Dept Nastaví značku na parametr zásad DeptName nakonfigurovaný pro přiřazení zásady.
"details": {
  ...
  "operations": [
    {
      "operation": "addOrReplace",
      "field": "tags['environment']",
      "value": "Test"
    },
    {
      "operation": "Remove",
      "field": "tags['TempResource']",
    },
    {
      "operation": "addOrReplace",
      "field": "tags['Dept']",
      "value": "[parameters('DeptName')]"
    }
  ]
}

Vlastnost operation má následující možnosti:

Operation Description
addOrReplace Přidá do prostředku definovanou vlastnost nebo značku a hodnotu, a to i v případě, že vlastnost nebo značka již existuje s jinou hodnotou.
add Přidá do prostředku definovanou vlastnost nebo značku a hodnotu.
remove Odebere definovanou značku ze zdroje. Podporuje se jenom u značek.

Úprava příkladů

Příklad 1: Přidejte environment značku a nahraďte existující environment značky slovem Test:

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

Příklad 2: Odeberte env značku a přidejte environment značku nebo nahraďte existující environment značky parametrizovanou hodnotou:

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

Příklad 3: Ujistěte se, že účet úložiště nepovoluje veřejný přístup k objektům blob, modify operace se použije pouze při vyhodnocování požadavků s verzí rozhraní API vyšší nebo rovno 2019-04-01:

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

Další kroky