Effetto Modify delle definizioni di Criteri di Azure

L'effetto modify viene usato per aggiungere, aggiornare o rimuovere proprietà o tag in una sottoscrizione o in una risorsa durante la creazione o l'aggiornamento. È anche possibile correggere le risorse esistenti non conformi con un'attività di correzione. Le assegnazioni dei criteri con effetto impostato come Modify richiedono un'identità gestita per eseguire la correzione. Un esempio comune che usa modify l'effetto consiste nell'aggiornare i tag nelle risorse come "costCenter".

Esistono alcune sfumature nel comportamento di modifica per le proprietà delle risorse. Altre informazioni sugli scenari in cui la modifica viene ignorata.

Una singola modify regola può avere un numero qualsiasi di operazioni. Le operazioni supportate sono:

  • Aggiungere, sostituire o rimuovere i tag delle risorse. È possibile rimuovere solo i tag. Per i tag, un criterio Modify deve sempre avere l'opzione modalità impostata su indexed, a meno che la risorsa di destinazione non sia un gruppo di risorse.
  • Aggiungere o sostituire il valore del tipo di identità gestita (identity.type) delle macchine virtuali e dei set di scalabilità di macchine virtuali. È possibile modificare solo identity.type per le macchine virtuali o i set di scalabilità di macchine virtuali.
  • Aggiungere o sostituire i valori di determinati alias.
    • Usare Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' } in Azure PowerShell 4.6.0 o versione successiva per ottenere un elenco di alias che possono essere usati con modify.

Importante

Se si gestiscono i tag, è consigliabile usare Modify anziché Append in quanto Modify fornisce più tipi di operazione e la possibilità di correggere le risorse esistenti. Tuttavia, l'opzione Append è consigliata se non è possibile creare un'identità gestita o Modify non supporta ancora l'alias per la proprietà della risorsa.

Valutazione di Modify

Modify viene valutato prima che la richiesta venga elaborata da un provider di risorse durante la creazione o l'aggiornamento di una risorsa. Le operazioni modify vengono applicate al contenuto della richiesta quando viene soddisfatta la condizione if della regola dei criteri. Ogni operazione modify può specificare una condizione che determina quando viene applicata.

Quando si specifica un alias, vengono eseguiti altri controlli per assicurarsi che l'operazione modify non modifichi il contenuto della richiesta così da impedire al provider di risorse di rifiutarlo:

  • La proprietà a cui è mappato l'alias è contrassegnata come modificabile nella versione dell'API della richiesta.
  • Il tipo di token nell'operazione modify corrisponde al tipo di token previsto per la proprietà nella versione dell'API della richiesta.

Se uno di questi controlli ha esito negativo, la valutazione dei criteri esegue il fallback a conflictEffectspecificato.

Importante

È consigliabile che le definizioni Modify che includono alias che usano l'effetto conflict audit per evitare che le richieste non riuscite usino le versioni API in cui la proprietà mappata non è modificabile. Se lo stesso alias si comporta in modo diverso tra le versioni dell'API, è possibile usare le operazioni di modifica condizionale per determinare l'operazione modify usata per ogni versione dell'API.

Modifica ignorata

Esistono alcuni casi in cui le operazioni di modifica vengono ignorate durante la valutazione:

  • Risorse esistenti: quando una definizione di criteri che usa l'effetto modify viene eseguita come parte di un ciclo di valutazione, non apporta modifiche alle risorse già esistenti. Contrassegna invece qualsiasi risorsa che soddisfa la if condizione come non conforme, in modo che possa essere risolta tramite un'attività di correzione.
  • Non applicabile: quando la condizione di un'operazione nella operations matrice viene valutata su false, tale particolare operazione viene ignorata.
  • Proprietà non modificabile: se un alias specificato per un'operazione non è modificabile nella versione API della richiesta, la valutazione usa l'effetto conflitto. Se l'effetto conflitto è impostato su deny, la richiesta viene bloccata. Se l'effetto del conflitto è impostato per il controllo, la richiesta viene consentita tramite ma l'operazione modify viene ignorata.
  • Proprietà non presente: se una proprietà non è presente nel payload della risorsa della richiesta, la modifica potrebbe essere ignorata. In alcuni casi, le proprietà modificabili vengono annidate all'interno di altre proprietà e hanno un alias come Microsoft.Storage/storageAccounts/blobServices/deleteRetentionPolicy.enabled. Se la proprietà "padre", in questo caso deleteRetentionPolicy, non è presente nella richiesta, la modifica viene ignorata perché si presuppone che tale proprietà venga omessa intenzionalmente. Per un esempio pratico, vedere la sezione Esempio di proprietà non presente.
  • Operazione di identità non vm o VMSS: quando un'operazione di modifica tenta di aggiungere o sostituire il identity.type campo in una risorsa diversa da una macchina virtuale o un set di scalabilità di macchine virtuali, la valutazione dei criteri viene ignorata completamente in modo che la modifica non venga eseguita. In questo caso, la risorsa viene considerata non applicabile ai criteri.

Esempio di proprietà non presente

La modifica delle proprietà delle risorse dipende dalla richiesta API e dal payload della risorsa aggiornato. Il payload può dipendere dal client usato, ad esempio portale di Azure e da altri fattori come il provider di risorse.

Si supponga di applicare un criterio che modifica i tag in una macchina virtuale.Imagine you apply a policy that modifies tags on a virtual machine (VM). Ogni volta che la macchina virtuale viene aggiornata, ad esempio durante il ridimensionamento o le modifiche del disco, i tag vengono aggiornati di conseguenza indipendentemente dal contenuto del payload della macchina virtuale. Ciò è dovuto al fatto che i tag sono indipendenti dalle proprietà della macchina virtuale.

Tuttavia, se si applica un criterio che modifica le proprietà in una macchina virtuale, la modifica dipende dal payload della risorsa. Se si tenta di modificare le proprietà non incluse nel payload di aggiornamento, la modifica non verrà eseguita. Ad esempio, questa situazione può verificarsi quando si applica l'applicazione di patch alla assessmentMode proprietà di una macchina virtuale (alias Microsoft.Compute/virtualMachines/osProfile.windowsConfiguration.patchSettings.assessmentMode). La proprietà è "annidata", quindi se le proprietà padre non sono incluse nella richiesta, si presuppone che questa omissione sia intenzionale e la modifica venga ignorata. Per apportare modifiche, il payload della risorsa deve contenere questo contesto.

Proprietà Modify

La proprietà details dell'effetto modify include tutte le sottoproprietà che definiscono le autorizzazioni necessarie per la correzione e operations viene usato per aggiungere, aggiornare o rimuovere i valori dei tag.

  • roleDefinitionIds (obbligatorio)
    • Questa proprietà deve contenere una matrice di stringhe che corrispondono all'ID ruolo di controllo degli accessi in base al ruolo accessibile dalla sottoscrizione. Per altre informazioni, vedere Correzione: configurare la definizione dei criteri.
    • Il ruolo definito deve includere tutte le operazioni concesse al ruolo Contributor.
  • conflictEffect (facoltativo)
    • Determina quale definizione di criteri "vince" se più definizioni di criteri modificano la stessa proprietà o quando l'operazione modify non funziona sull'alias specificato.
      • Per le risorse nuove o aggiornate, la definizione dei criteri con deny ha la precedenza. Le definizioni dei criteri con audit ignorano tutte le operations. Se più definizioni di criteri hanno l'effetto deny, la richiesta viene negata come conflitto. Se tutte le definizioni dei criteri hanno audit, non vengono elaborate nessuna delle operations delle definizioni dei criteri in conflitto.
      • Per le risorse esistenti, se più definizioni di criteri hanno l'effetto deny, lo stato di conformità è Conflict. Se una o meno definizioni di criteri hanno l'effetto deny, ogni assegnazione restituisce uno stato di non conforme.
    • Valori disponibili: audit, deny, disabled.
    • Il valore predefinito è deny.
  • operations (obbligatorio)
    • Una matrice di tutte le operazioni di tag da completare sulle risorse corrispondenti.
    • Proprietà:
      • operation (obbligatorio)
        • Definisce l'azione da intraprendere su una risorsa corrispondente. Le opzioni sono addOrReplace, Add e Remove.
        • Addsi comporta in modo analogo all'effetto Append.
        • Remove è supportato solo per i tag delle risorse.
      • field (obbligatorio)
        • Il tag per aggiungere, sostituire o rimuovere. I nomi di tag devono rispettare la stessa convenzione di denominazione per altri campi.
      • value (facoltativo)
        • Il valore su cui impostare i tag.
        • Questa proprietà è obbligatoria se operation è addOrReplace o add.
      • condition (facoltativo)
        • Stringa contenente un'espressione del linguaggio di Criteri di Azure con funzioni Criteri che restituisce true o false.
        • Non supporta le funzioni dei criteri seguenti: field(), resourceGroup(), subscription().

Modificare le operazioni

Le matrice di proprietà operations consente di modificare numerosi tag in modi diversi da una singola definizione di criteri. Ogni operazione è costituita da proprietà operation, field e value. operation determina le operazioni che l'attività di correzione esegue sui tag, field determina quale tag viene modificato e value definisce la nuova impostazione per tale tag. L'esempio seguente apporta le modifiche seguenti ai tag:

  • Imposta il tag environment su "Test", anche se esiste già con un valore diverso.
  • Rimuove il tag TempResource.
  • Imposta il tag Dept sul parametro dei criteri DeptName configurato nell'assegnazione dei criteri.
"details": {
  ...
  "operations": [
    {
      "operation": "addOrReplace",
      "field": "tags['environment']",
      "value": "Test"
    },
    {
      "operation": "Remove",
      "field": "tags['TempResource']",
    },
    {
      "operation": "addOrReplace",
      "field": "tags['Dept']",
      "value": "[parameters('DeptName')]"
    }
  ]
}

La proprietà operation dispone delle opzioni seguenti:

Operazione Descrizione
addOrReplace Aggiunge la proprietà o il tag definito e il valore alla risorsa, anche se la proprietà o il tag esiste già con un valore diverso.
add Aggiunge la proprietà o il tag e il valore definiti alla risorsa.
remove Rimuove il tag definito dalla risorsa. Supportato solo per i tag.

Esempi di Modify

Esempio 1: aggiungere il tag environment e sostituire i tag environment esistenti con "Test":

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

Esempio 2: rimuovere il tag env e aggiungere il tag environment o sostituire i tag environment esistenti con un valore con parametri:

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

Esempio 3: assicurarsi che un account di archiviazione non consenta l'accesso pubblico al BLOB, l'operazione modify viene applicata solo quando si valutano le richieste con versione api successiva o uguale a 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
      }
    ]
  }
}

Passaggi successivi