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 soloidentity.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 conmodify
.
- Usare
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 conflictEffect
specificato.
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 laif
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 casodeleteRetentionPolicy
, 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 delleoperations
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.
- Per le risorse nuove o aggiornate, la definizione dei criteri con deny ha la precedenza. Le definizioni dei criteri con audit ignorano tutte le
- Valori disponibili: audit, deny, disabled.
- Il valore predefinito è deny.
- Determina quale definizione di criteri "vince" se più definizioni di criteri modificano la stessa proprietà o quando l'operazione
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
eRemove
. Add
si comporta in modo analogo all'effetto Append.Remove
è supportato solo per i tag delle risorse.
- Definisce l'azione da intraprendere su una risorsa corrispondente. Le opzioni sono
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
- Vedere gli esempi in Esempi di Criteri di Azure.
- Vedere la struttura delle definizioni di Criteri di Azure.
- Vedere come creare criteri a livello di codice.
- Leggere le informazioni su come ottenere dati sulla conformità.
- Informazioni su come correggere le risorse non conformi.
- Rivedere Gruppi di gestione di Azure.