Sdílet prostřednictvím


Úprava efektu definic 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 nastavenými efekty jako Modify vyžadují spravovanou identitu k nápravě. 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é drobné odlišnosti v chování při úpravách. Přečtěte si další informace o scénářích při vynechání úprav.

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

  • Přidejte, nahraďte nebo odeberte značky prostředků. Je možné odebrat pouze značky. U značek by zásada Modify měla mít nastavený indexed režim, pokud cílový prostředek není 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ů.
    • V Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } Azure PowerShellu 4.6.0 nebo novějším můžete získat seznam aliasů, se modifykterými se dá používat .

Důležité

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řipojení se ale doporučuje, pokud nemůžete vytvořit spravovanou identitu nebo upravit ještě nepodporuje alias vlastnosti prostředku.

Úprava vyhodnocení

Změna se vyhodnotí před zpracováním požadavku poskytovatelem prostředků během vytváření nebo aktualizace prostředku. Operace modify se použijí na obsah požadavku při if splnění podmínky pravidla zásad. 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žou, vyhodnocení zásad se vrátí do zadaného conflictEffectstavu .

Důležité

Doporučuje se upravit definice, které obsahují aliasy, použít konfliktní účinek auditu, aby se zabránilo selhání požadavků pomocí verzí rozhraní API, kde mapovaná vlastnost není upravitelná. 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.

Vynecháno úpravy

Při vyhodnocování dojde k vynechání operací úprav:

  • 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 jiného typu než virtuální počítač nebo škálovací sada virtuálních počítačů: Pokud se operace úpravy pokusí přidat nebo nahradit identity.type pole u jiného prostředku než virtuální počítač nebo škálovací sada virtuálních počítačů, vyhodnocení zásad se úplně přeskočí, takže se změny neprovedou. V tomto případě se prostředek nepovažuje za použitelný pro zásadu.

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 zásadu, která upravuje značky na virtuálním počítači. 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. Důvodem je to, že značky jsou nezávislé na vlastnostech virtuálního počítače.

Pokud ale použijete zásadu, která upraví vlastnosti na virtuálním počítači, je úprava závislá na datové části 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 úpravy se přeskočí. Aby se změny projevily, datová část prostředku by měla 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é)
    • Tato vlastnost musí obsahovat pole řetězců, které odpovídají ID role řízení přístupu na základě role přístupné pro předplatné. Další informace najdete v tématu náprava – konfigurace definice zásady.
    • Definovaná role musí zahrnovat všechny operace udělené roli Přispěvatel .
  • 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 operationsauditu . 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 jedna nebo méně definic zásad má účinek odepření, vrátí každé přiřazení stav dodržování předpisů nedodržování předpisů.
    • Dostupné hodnoty: audit, odepřít, zakázáno.
    • Výchozí hodnota je odepřena.
  • operations (povinné)
    • Pole všech operací značek, které se mají dokončit u odpovídajících prostředků.
    • Vlastnosti:
      • operation (povinné)
        • Definuje, jaká akce se má provést u odpovídajícího prostředku. Možnosti jsou: addOrReplace, Adda Remove.
        • Addchová se podobně jako přidávací efekt.
        • Remove je podporován pouze pro značky prostředků.
      • 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. Následující příklad 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 Popis
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 z prostředku. 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