Condividi tramite


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. Un esempio comune è l'aggiornamento di tag per le risorse come costCenter. È possibile correggere le risorse non conformi esistenti con un'attività di correzione. Una regola Modify singola può avere un numero qualsiasi di operazioni. Le assegnazioni dei criteri con effetto impostato come Modify richiedono un'identità gestita per eseguire la correzione.

L'effetto modify supporta le operazioni seguenti:

  • Aggiungere, sostituire o rimuovere i tag delle risorse. 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. Le operazioni con valutazioni delle condizioni false vengono ignorate.

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.

Quando una definizione dei criteri che usa l'effetto modify viene eseguita come parte di un ciclo di valutazione, non apporta modifiche alle risorse già esistenti. Al contrario, contrassegna qualsiasi risorsa che soddisfi la condizione if come non conforme.

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, Remove. Add si comporta in modo analogo all'effetto append.
      • 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 la proprietà o il tag definito dalla risorsa.

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