Dela via


Ändringseffekt för Azure Policy-definitioner

Effekten modify används för att lägga till, uppdatera eller ta bort egenskaper eller taggar för en prenumeration eller resurs när du skapar eller uppdaterar. Befintliga icke-kompatibla resurser kan också åtgärdas med en reparationsuppgift. Principtilldelningar med effektuppsättning som Ändra kräver en hanterad identitet för att utföra reparation. Ett vanligt exempel på hur du använder modify effekten är att uppdatera taggar på resurser som "costCenter".

Det finns vissa nyanser i ändringsbeteendet för resursegenskaper. Läs mer om scenarier när ändringar hoppas över.

En enskild modify regel kan ha valfritt antal åtgärder. Åtgärder som stöds är:

  • Lägg till, ersätt eller ta bort resurstaggar. Det går bara att ta bort taggar. För taggar ska en ändringsprincip ha läget inställt på indexed såvida inte målresursen är en resursgrupp.
  • Lägg till eller ersätt värdet för den hanterade identitetstypen (identity.type) för virtuella datorer och vm-skalningsuppsättningar. Du kan bara ändra identity.type för virtuella datorer eller VM-skalningsuppsättningar.
  • Lägg till eller ersätt värdena för vissa alias.
    • Använd Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } i Azure PowerShell 4.6.0 eller senare för att hämta en lista över alias som kan användas med modify.

Viktigt!

Om du hanterar taggar rekommenderar vi att du använder Ändra i stället för Lägg till eftersom Ändra ger fler åtgärdstyper och möjlighet att åtgärda befintliga resurser. Tillägg rekommenderas dock om du inte kan skapa en hanterad identitet eller om Ändra ännu inte stöder aliaset för resursegenskapen.

Ändra utvärdering

Ändra utvärderas innan begäran bearbetas av en resursprovider när en resurs skapas eller uppdateras. Åtgärderna modify tillämpas på begärandeinnehållet när villkoret if för principregeln uppfylls. Varje modify åtgärd kan ange ett villkor som avgör när den tillämpas.

När ett alias har angetts utförs fler kontroller för att säkerställa att modify åtgärden inte ändrar innehållet i begäran på ett sätt som gör att resursprovidern avvisar det:

  • Egenskapen som aliaset mappar till markeras som Modifiable i begärans API-version.
  • Tokentypen i modify åtgärden matchar den förväntade tokentypen för egenskapen i begärans API-version.

Om någon av dessa kontroller misslyckas återgår principutvärderingen till den angivna conflictEffect.

Viktigt!

Vi rekommenderar att Ändra definitioner som innehåller alias använder granskningskonfliktseffekten för att undvika misslyckade begäranden med hjälp av API-versioner där den mappade egenskapen inte är "Ändringsbar". Om samma alias fungerar annorlunda mellan API-versioner kan villkorsstyrda ändringsåtgärder användas för att fastställa vilken modify åtgärd som används för varje API-version.

Överhoppad ändring

Det finns vissa fall när ändringsåtgärder hoppas över under utvärderingen:

  • Befintliga resurser: När en principdefinition som använder modify effekten körs som en del av en utvärderingscykel gör den inte ändringar i resurser som redan finns. I stället markeras alla resurser som uppfyller villkoret if som icke-kompatibla, så att de kan åtgärdas via en reparationsuppgift.
  • Ej tillämpligt: När villkoret för en åtgärd i matrisen operations utvärderas till false hoppas den specifika åtgärden över.
  • Egenskapen kan inte ändras: Om ett alias som angetts för en åtgärd inte kan ändras i begärans API-version använder utvärderingen konflikteffekten. Om konflikteffekten är inställd på att neka blockeras begäran. Om konflikteffekten är inställd på granskning tillåts begäran igenom men åtgärden modify hoppas över.
  • Egenskapen finns inte: Om en egenskap inte finns i resursnyttolasten för begäran kan ändringen hoppas över. I vissa fall kapslas ändringsbara egenskaper i andra egenskaper och har ett alias som Microsoft.Storage/storageAccounts/blobServices/deleteRetentionPolicy.enabled. Om egenskapen "överordnad" i det här fallet deleteRetentionPolicyinte finns i begäran hoppas ändringen över eftersom den egenskapen antas utelämnas avsiktligt. Ett praktiskt exempel finns i avsnittet Exempel på egenskap som inte finns.
  • Icke-VM- eller VMSS-identitetsåtgärd: När en ändringsåtgärd försöker lägga till eller ersätta identity.type fältet på en annan resurs än en virtuell dator eller vm-skalningsuppsättning hoppas principutvärderingen över helt och hållet så att ändringen inte utförs. I det här fallet anses resursen inte vara tillämplig på principen.

Exempel på egenskap som inte finns

Ändring av resursegenskaper beror på API-begäran och den uppdaterade resursnyttolasten. Nyttolasten kan bero på vilken klient som används, till exempel Azure-portalen, och andra faktorer som resursprovider.

Anta att du tillämpar en princip som ändrar taggar på en virtuell dator (VM). Varje gång den virtuella datorn uppdateras, till exempel vid storleksändring eller diskändringar, uppdateras taggarna i enlighet med detta oavsett innehållet i den virtuella datorns nyttolast. Det beror på att taggarna är oberoende av egenskaperna för den virtuella datorn.

Men om du tillämpar en princip som ändrar egenskaper på en virtuell dator beror ändringen på resursnyttolasten. Om du försöker ändra egenskaper som inte ingår i uppdateringsnyttolasten sker inte ändringen. Detta kan till exempel inträffa när du korrigerar egenskapen för assessmentMode en virtuell dator (alias Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode). Egenskapen är "kapslad", så om dess överordnade egenskaper inte ingår i begäran antas utelämnandet vara avsiktligt och ändringen hoppas över. För att ändringen ska ske bör resursnyttolasten innehålla den här kontexten.

Ändra egenskaper

Effektens details modify egenskap har alla underegenskaper som definierar de behörigheter som krävs för reparation och de operations som används för att lägga till, uppdatera eller ta bort taggvärden.

  • roleDefinitionIds (krävs)
    • Den här egenskapen måste innehålla en matris med strängar som matchar roll-ID för roll-ID för roll för roll i roll som är tillgänglig för prenumerationen. Mer information finns i Reparation – konfigurera principdefinitionen.
    • Den definierade rollen måste innehålla alla åtgärder som beviljats rollen Deltagare .
  • conflictEffect (valfritt)
    • Avgör vilken principdefinition som "vinner" om fler än en principdefinition ändrar samma egenskap eller när modify åtgärden inte fungerar på det angivna aliaset.
      • För nya eller uppdaterade resurser har principdefinitionen med neka företräde. Principdefinitioner med granskning hoppar över alla operations. Om fler än en principdefinition har effektnekelse nekas begäran som en konflikt. Om alla principdefinitioner har granskning bearbetas ingen av de operations motstridiga principdefinitionerna.
      • Om fler än en principdefinition har effektnekande för befintliga resurser är efterlevnadsstatusen Konflikt. Om en eller färre principdefinitioner får effekten att neka, returnerar varje tilldelning kompatibilitetsstatusen Icke-kompatibel.
    • Tillgängliga värden: granskning, neka, inaktiverad.
    • Standardvärdet nekas.
  • operations (krävs)
    • En matris med alla taggåtgärder som ska slutföras för matchande resurser.
    • Egenskaper:
      • operation (krävs)
        • Definierar vilken åtgärd som ska vidtas för en matchande resurs. Alternativen är: addOrReplace, Addoch Remove.
        • Addbeter sig ungefär som tilläggseffekten.
        • Remove stöds endast för resurstaggar.
      • field (krävs)
        • Taggen som du vill lägga till, ersätta eller ta bort. Taggnamn måste följa samma namngivningskonvention för andra fält.
      • value (valfritt)
        • Värdet som taggen ska anges till.
        • Den här egenskapen krävs om operation är addOrReplace eller Add.
      • condition (valfritt)
        • En sträng som innehåller ett Azure Policy-språkuttryck med principfunktioner som utvärderas till sant eller falskt.
        • Stöder inte följande principfunktioner: field(), resourceGroup(), subscription().

Ändra åtgärder

Egenskapsmatrisen operations gör det möjligt att ändra flera taggar på olika sätt från en enskild principdefinition. Varje åtgärd består av operationegenskaperna , fieldoch value . Avgör operation vad reparationsuppgiften gör med taggarna, field avgör vilken tagg som ändras och value definierar den nya inställningen för taggen. Följande exempel gör följande taggändringar:

  • Anger taggen environment till "Test" även om den redan finns med ett annat värde.
  • Tar bort taggen TempResource.
  • Anger taggen Dept till principparametern DeptName som konfigurerats för principtilldelningen.
"details": {
  ...
  "operations": [
    {
      "operation": "addOrReplace",
      "field": "tags['environment']",
      "value": "Test"
    },
    {
      "operation": "Remove",
      "field": "tags['TempResource']",
    },
    {
      "operation": "addOrReplace",
      "field": "tags['Dept']",
      "value": "[parameters('DeptName')]"
    }
  ]
}

Egenskapen operation har följande alternativ:

Operation beskrivning
addOrReplace Lägger till den definierade egenskapen eller taggen och värdet i resursen, även om egenskapen eller taggen redan finns med ett annat värde.
add Lägger till den definierade egenskapen eller taggen och värdet i resursen.
remove Tar bort den definierade taggen från resursen. Stöds endast för taggar.

Ändra exempel

Exempel 1: Lägg till taggen environment och ersätt befintliga environment taggar med "Test":

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

Exempel 2: Ta bort taggen env och lägg till taggen environment eller ersätt befintliga environment taggar med ett parameteriserat värde:

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

Exempel 3: Kontrollera att ett lagringskonto inte tillåter offentlig blobåtkomst. modify Åtgärden tillämpas endast när begäranden med API-versionen utvärderas 2019-04-01eller är lika med :

"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ästa steg