Formato e sintassi della condizione di assegnazione dei ruoli di Azure
Una condizione è un controllo aggiuntivo che è possibile aggiungere facoltativamente all'assegnazione di ruolo per fornire un controllo di accesso più accurato. Ad esempio, è possibile aggiungere una condizione che richiede che un oggetto abbia un tag specifico per leggere l'oggetto. Questo articolo descrive il formato e la sintassi delle condizioni di assegnazione di ruolo.
Formato della condizione
Per comprendere meglio le condizioni di assegnazione di ruolo, è utile esaminare il formato.
Condizione semplice
La condizione più semplice è costituita da un'azione mirata e da un'espressione. Un'azione è un'operazione che un utente può eseguire su un tipo di risorsa. Un'espressione è un'istruzione che restituisce true o false, il che determina se l'azione può essere eseguita.
Di seguito viene illustrato il formato di una condizione semplice.
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
)
)
La condizione seguente ha un'azione di "Lettura di un BLOB". L'espressione controlla se il nome del contenitore è blobs-example-container.
(
(
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
)
OR
(
@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
StringEquals 'blobs-example-container'
)
)
Come viene valutata una condizione
Se un utente tenta di eseguire un'azione nell'assegnazione di ruolo che non è <action>
, !(ActionMatches)
restituisce true e la condizione complessiva restituisce true per consentire l'esecuzione dell'azione.
Se un utente tenta di eseguire <action>
nell'assegnazione di ruolo, !(ActionMatches)
restituisce false, quindi l'espressione viene valutata. Se l'espressione restituisce true, la condizione complessiva restituisce true per consentire l'esecuzione di <action>
. In caso contrario, non è consentito eseguire <action>
.
Lo pseudo codice seguente mostra un altro modo per leggere questa condizione.
if a user tries to perform an action in the role assignment that does not match <action>
{
Allow action to be performed
}
else
{
if <attribute> <operator> <value> is true
{
Allow <action> to be performed
}
else
{
Do not allow <action> to be performed
}
}
Operazioni secondarie
Alcune azioni hanno sotto-operazioni. Ad esempio, l'azione dati Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read
ha la sotto-operazione "Elenca BLOB". Le condizioni con sotto-operazioni hanno il formato seguente.
(
(
!(ActionMatches{'<action>'}
AND
SubOperationMatches{'<subOperation>'})
)
OR
(
<attribute> <operator> <value>
)
)
Azioni multiple
Una condizione può includere più azioni che si desidera consentire se la condizione è vera. Se si selezionano più azioni per una singola condizione, potrebbero essere presenti meno attributi tra cui scegliere per la condizione, perché gli attributi devono essere disponibili in tutte le azioni selezionate.
(
(
!(ActionMatches{'<action>'})
AND
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
)
)
Più espressioni
Una condizione può includere più espressioni. A seconda dell'operatore, gli attributi possono essere controllati in base a più valori.
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
AND | OR
<attribute> <operator> {<value>, <value>, <value>}
AND | OR
<attribute> <operator> <value>
)
)
Più condizioni
È inoltre possibile combinare condizioni per impostare come destinazione più azioni.
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
AND | OR
<attribute> <operator> {<value>, <value>, <value>}
AND | OR
<attribute> <operator> <value>
)
)
AND
(
(
!(ActionMatches{'<action>'})
)
OR
(
<attribute> <operator> <value>
AND | OR
<attribute> <operator> <value>
)
)
Sintassi della condizione
Di seguito viene illustrata la sintassi della condizione di un’assegnazione di ruolo.
(
(
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
...
)
OR
(
<attribute> <operator> {<value, <value>, ...}
AND | OR
<attribute> <operator> {<value>, <value>, ...}
AND | OR
...
)
)
AND
(
(
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
!(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
AND
...
)
OR
(
<attribute> <operator> {<value, <value>, ...}
AND | OR
<attribute> <operator> {<value>, <value>, ...}
AND | OR
...
)
)
AND
...
Azioni
Attualmente è possibile aggiungere condizioni alle assegnazioni di ruolo predefinite o personalizzate che prevedono azioni sui dati di archiviazione BLOB o archiviazione code. Sono inclusi i ruoli predefiniti seguenti:
- Collaboratore ai dati del BLOB di archiviazione
- Proprietario dei dati del BLOB di archiviazione
- Lettore dei dati del BLOB di archiviazione
- Collaboratore ai dati della coda di archiviazione
- Ruolo con autorizzazioni di elaborazione per i messaggi sui dati della coda di archiviazione
- Mittente dei messaggi sui dati della coda di archiviazione
- Ruolo con autorizzazioni di lettura per i dati della coda di archiviazione
Per un elenco delle azioni di archiviazione che è possibile usare nelle condizioni, vedere:
- Azioni e attributi per le condizioni di assegnazione di ruolo di Azure in Archiviazione BLOB di Azure
- Azioni e attributi per le condizioni di assegnazione di ruolo di Azure in Archiviazione code di Azure.
Attributi
A seconda delle azioni selezionate, l'attributo potrebbe essere trovato in posizioni diverse. Se si selezionano più azioni per una singola condizione, potrebbero essere presenti meno attributi tra cui scegliere per la condizione, perché gli attributi devono essere disponibili in tutte le azioni selezionate. Per specificare un attributo, è necessario includere l'origine come prefisso.
Origine attributo | Descrizione | Codice |
---|---|---|
Ambiente | L'attributo è associato all'ambiente della richiesta, ad esempio l'origine di rete della richiesta o la data e l'ora correnti. |
@Environment |
Server principale | L'attributo è un attributo di sicurezza personalizzato assegnato all'entità, ad esempio un utente o un'applicazione aziendale (entità servizio). | @Principal |
Richiedi | L'attributo fa parte della richiesta di azione, ad esempio l'impostazione del tag indice BLOB. | @Request |
Conto risorse | L'attributo è una proprietà della risorsa, ad esempio un nome contenitore. | @Resource |
Per un elenco completo degli attributi di archiviazione che è possibile usare nelle condizioni, vedere:
Attributi ambiente
Gli attributi di ambiente sono associati alle circostanze in cui viene effettuata la richiesta di accesso, ad esempio la data e l'ora o l'ambiente di rete. L'ambiente di rete può essere l'accesso a uno specifico endpoint privato o a una subnet di rete virtuale, o un qualsiasi collegamento privato.
Nella tabella seguente sono elencati gli attributi di ambiente supportati per le condizioni.
Nome visualizzato | Descrizione | Attributo | Type |
---|---|---|---|
Collegamento privato Is1 | Usare questo attributo nelle condizioni per richiedere l'accesso tramite qualsiasi collegamento privato. | isPrivateLink |
Booleano |
Endpoint privato1,2 | Usare questo attributo nelle condizioni per limitare l'accesso a un endpoint privato specifico. | Microsoft.Network/privateEndpoints |
Stringa |
Subnet1,3 | Usare questo attributo nelle condizioni per limitare l'accesso da una subnet specifica. | Microsoft.Network/virtualNetworks/subnets |
Stringa |
UTC attuale | Usare questo attributo nelle condizioni per limitare l'accesso agli oggetti durante periodi di tempo specifici. | UtcNow |
DateTime |
1 Per le operazioni di copia, gli attributi Is private link
, Private endpoint
e Subnet
si applicano solo alla destinazione, ad esempio un account di archiviazione, non all'origine. Per altre informazioni sulle operazioni di copia a cui si applica questa opzione, selezionare ogni attributo della tabella per visualizzare altri dettagli.
2 È possibile usare l'attributo Private endpoint
solo se nella sottoscrizione è attualmente configurato almeno un endpoint privato.
3 È possibile usare l'attributo Subnet
solo se nella sottoscrizione è attualmente configurata almeno una subnet di rete virtuale che usa endpoint di servizio.
Attributi di entità di sicurezza
Gli attributi dell'entità di sicurezza sono attributi di sicurezza personalizzati assegnati all'entità di sicurezza che richiede l'accesso a una risorsa. L'entità di sicurezza può essere un utente o un'applicazione aziendale (entità servizio).
Per usare gli attributi dell’entità di sicurezza, è necessario disporre degli elementi seguenti:
- Autorizzazioni di Microsoft Entra per l'utente connesso, ad esempio il ruolo di amministratore assegnazione attributi
- Attributi di sicurezza personalizzati definiti in Microsoft Entra ID
Per altre informazioni sugli attributi di sicurezza personalizzati, vedere:
- Aggiungere o disattivare attributi di sicurezza personalizzati in Microsoft Entra ID
- Consentire l'accesso in lettura ai BLOB in base ai tag e agli attributi di sicurezza personalizzati
- L'entità di sicurezza non viene visualizzata nell'origine attributo
Attributi richiesta
Gli attributi della richiesta sono associati ai criteri specificati in una richiesta di accesso, ad esempio il prefisso specificato dei BLOB da elencare.
Attributi risorsa
Gli attributi delle risorse sono associati all'oggetto a cui viene richiesto l'accesso, ad esempio il nome dell'account di archiviazione, il nome del contenitore o il fatto che lo spazio dei nomi gerarchico sia abilitato per l'account di archiviazione.
Operatori di funzione
In questa sezione sono elencati gli operatori di funzione disponibili per costruire condizioni.
ActionMatches
Proprietà | valore |
---|---|
Operator | ActionMatches |
Descrizione | Controlla se l'azione corrente corrisponde al modello di azione specificato. |
Esempi | ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} Se l'azione controllata è uguale a "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read", allora true ActionMatches{'Microsoft.Authorization/roleAssignments/*'} Se l'azione controllata è uguale a "Microsoft.Authorization/roleAssignments/write", allora true ActionMatches{'Microsoft.Authorization/roleDefinitions/*'} Se l'azione controllata è uguale a "Microsoft.Authorization/roleAssignments/write", allora false |
SubOperationMatches
Proprietà | valore |
---|---|
Operator | SubOperationMatches |
Descrizione | Controlla se la sotto-operazione corrente corrisponde al modello di sotto-operazione specificato. |
Esempi | SubOperationMatches{'Blob.List'} |
Exists
Proprietà | valore |
---|---|
Operator | Exists |
Descrizione | Controlla se l'attributo specificato esiste. |
Esempi | Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot] |
Supporto attributi 1 | Nome ambito di crittografia Snapshot ID versione |
1 L'operatore Exists
è supportato solo per questi attributi nel generatore di condizioni del controllo degli accessi in base al ruolo visivo nel portale di Azure. È possibile aggiungere l'operatore Exists
a qualsiasi attributo usando altri strumenti, ad esempio PowerShell, l'interfaccia della riga di comando di Azure, l'API REST e l'editor del codice della condizione nel portale di Azure.
Operatori logici
Questa sezione elenca gli operatori logici disponibili per costruire condizioni.
And
Proprietà | valore |
---|---|
Operatori | AND && |
Descrizione | Operatore And. |
Esempi | !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'}) |
O
Proprietà | valore |
---|---|
Operatori | OR || |
Descrizione | Operator Or. |
Esempi | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' OR NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId |
Not
Proprietà | valore |
---|---|
Operatori | NOT ! |
Descrizione | Operatore Not o di negazione. |
Esempi | NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] |
Operatori booleani di confronto
In questa sezione sono elencati gli operatori booleani di confronto disponibili per costruire condizioni.
Proprietà | valore |
---|---|
Operatori | BoolEquals BoolNotEquals |
Descrizione | Confronto booleano. |
Esempi | @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true |
Operatori di confronto stringhe
In questa sezione sono elencati gli operatori di confronto stringhe disponibili per costruire condizioni.
StringEquals
Proprietà | valore |
---|---|
Operatori | StringEquals StringEqualsIgnoreCase |
Descrizione | Corrispondenza con distinzione tra maiuscole e minuscole (o senza distinzione tra maiuscole e minuscole). I valori devono corrispondere esattamente alla stringa. |
Esempi | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade' |
StringNotEquals
Proprietà | valore |
---|---|
Operatori | StringNotEquals StringNotEqualsIgnoreCase |
Descrizione | Negazione dell'operatore StringEquals (o StringEqualsIgnoreCase ). |
StringStartsWith
Proprietà | valore |
---|---|
Operatori | StringStartsWith StringStartsWithIgnoreCase |
Descrizione | Corrispondenza con distinzione tra maiuscole e minuscole (o senza distinzione tra maiuscole e minuscole). I valori iniziano con la stringa. |
StringNotStartsWith
Proprietà | valore |
---|---|
Operatori | StringNotStartsWith StringNotStartsWithIgnoreCase |
Descrizione | Negazione dell'operatore StringStartsWith (o StringStartsWithIgnoreCase ). |
StringLike
Proprietà | valore |
---|---|
Operatori | StringLike StringLikeIgnoreCase |
Descrizione | Corrispondenza con distinzione tra maiuscole e minuscole (o senza distinzione tra maiuscole e minuscole). I valori possono includere un carattere jolly con corrispondenza per più caratteri (* ) o un carattere jolly con corrispondenza per un singolo carattere (? ) in qualsiasi posizione nella stringa. Se necessario, questi caratteri possono essere preceduti da un carattere di escape aggiungendo una barra rovesciata \* e \? . |
Esempi | @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*' Resource[name1] StringLike 'a*c?' Se Resource[name1] è uguale a "abcd", allora true Resource[name1] StringLike 'A*C?' Se Resource[name1] è uguale a "abcd", allora false Resource[name1] StringLike 'a*c' Se Resource[name1] è uguale a "abcd", allora false |
StringNotLike
Proprietà | valore |
---|---|
Operatori | StringNotLike StringNotLikeIgnoreCase |
Descrizione | Negazione dell'operatore StringLike (o StringLikeIgnoreCase ). |
Operatori di confronto numerici
In questa sezione sono elencati gli operatori di confronto numerici disponibili per costruire condizioni.
Proprietà | valore |
---|---|
Operatori | NumericEquals NumericNotEquals NumericGreaterThan NumericGreaterThanEquals NumericLessThan NumericLessThanEquals |
Descrizione | Corrispondenza dei numeri. Sono supportati solo numeri interi. |
Operatori di confronto Data/ora
In questa sezione sono elencati gli operatori di confronto Data/ora disponibili per costruire condizioni.
Proprietà | valore |
---|---|
Operatori | DateTimeEquals DateTimeNotEquals DateTimeGreaterThan DateTimeGreaterThanEquals DateTimeLessThan DateTimeLessThanEquals |
Descrizione | Controllo con precisione completa con il formato : yyyy-mm-ddThh:mm:ss.mmmmmmmZ . Ora usato per l'ID versione del BLOB, lo snapshot del BLOB e l'ora UTC. |
Esempi | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' |
Operatori di confronto GUID
In questa sezione sono elencati gli operatori di confronto identificatori univoci globali (GUID) disponibili per costruire condizioni.
Proprietà | valore |
---|---|
Operatori | GuidEquals GuidNotEquals |
Descrizione | Corrispondenza senza distinzione tra maiuscole e minuscole con il formato : 00000000-0000-0000-0000-000000000000 . Usata per identificare una risorsa, ad esempio l'ID entità o l'ID definizione del ruolo. |
Esempi |
Operatori di confronto tra prodotti
In questa sezione sono elencati gli operatori di confronto tra prodotti disponibili per costruire condizioni.
ForAnyOfAnyValues
Proprietà | valore |
---|---|
Operatori | ForAnyOfAnyValues:StringEquals ForAnyOfAnyValues:StringEqualsIgnoreCase ForAnyOfAnyValues:StringNotEquals ForAnyOfAnyValues:StringNotEqualsIgnoreCase ForAnyOfAnyValues:StringLike ForAnyOfAnyValues:StringLikeIgnoreCase ForAnyOfAnyValues:StringNotLike ForAnyOfAnyValues:StringNotLikeIgnoreCase ForAnyOfAnyValues:NumericEquals ForAnyOfAnyValues:NumericNotEquals ForAnyOfAnyValues:NumericGreaterThan ForAnyOfAnyValues:NumericGreaterThanEquals ForAnyOfAnyValues:NumericLessThan ForAnyOfAnyValues:NumericLessThanEquals ForAnyOfAnyValues:GuidEquals ForAnyOfAnyValues:GuidNotEquals |
Descrizione | Se almeno un valore sul lato sinistro soddisfa il confronto con almeno un valore sul lato destro, l'espressione restituisce true. Ha il formato : ForAnyOfAnyValues:<BooleanFunction> . Supporta più stringhe e numeri. |
Esempi | @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'} Se il nome dell'ambito di crittografia è uguale a validScope1 o validScope2 , allora true.{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'} true {'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'} false |
ForAllOfAnyValues
Proprietà | valore |
---|---|
Operatori | ForAllOfAnyValues:StringEquals ForAllOfAnyValues:StringEqualsIgnoreCase ForAllOfAnyValues:StringNotEquals ForAllOfAnyValues:StringNotEqualsIgnoreCase ForAllOfAnyValues:StringLike ForAllOfAnyValues:StringLikeIgnoreCase ForAllOfAnyValues:StringNotLike ForAllOfAnyValues:StringNotLikeIgnoreCase ForAllOfAnyValues:NumericEquals ForAllOfAnyValues:NumericNotEquals ForAllOfAnyValues:NumericGreaterThan ForAllOfAnyValues:NumericGreaterThanEquals ForAllOfAnyValues:NumericLessThan ForAllOfAnyValues:NumericLessThanEquals ForAllOfAnyValues:GuidEquals ForAllOfAnyValues:GuidNotEquals |
Descrizione | Se ogni valore sul lato sinistro soddisfa il confronto con almeno un valore sul lato destro, l'espressione restituisce true. Ha il formato : ForAllOfAnyValues:<BooleanFunction> . Supporta più stringhe e numeri. |
Esempi | @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'} {'red', 'blue'} ForAllOfAnyValues:StringEquals {'orange', 'red', 'blue'} true {'red', 'blue'} ForAllOfAnyValues:StringEquals {'red', 'green'} false |
ForAnyOfAllValues
Proprietà | valore |
---|---|
Operatori | ForAnyOfAllValues:StringEquals ForAnyOfAllValues:StringEqualsIgnoreCase ForAnyOfAllValues:StringNotEquals ForAnyOfAllValues:StringNotEqualsIgnoreCase ForAnyOfAllValues:StringLike ForAnyOfAllValues:StringLikeIgnoreCase ForAnyOfAllValues:StringNotLike ForAnyOfAllValues:StringNotLikeIgnoreCase ForAnyOfAllValues:NumericEquals ForAnyOfAllValues:NumericNotEquals ForAnyOfAllValues:NumericGreaterThan ForAnyOfAllValues:NumericGreaterThanEquals ForAnyOfAllValues:NumericLessThan ForAnyOfAllValues:NumericLessThanEquals ForAnyOfAllValues:GuidEquals ForAnyOfAllValues:GuidNotEquals |
Descrizione | Se almeno un valore sul lato sinistro soddisfa il confronto con ogni valore sul lato destro, l'espressione restituisce true. Ha il formato : ForAnyOfAllValues:<BooleanFunction> . Supporta più stringhe e numeri. |
Esempi | {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18} true |
ForAllOfAllValues
Proprietà | valore |
---|---|
Operatori | ForAllOfAllValues:StringEquals ForAllOfAllValues:StringEqualsIgnoreCase ForAllOfAllValues:StringNotEquals ForAllOfAllValues:StringNotEqualsIgnoreCase ForAllOfAllValues:StringLike ForAllOfAllValues:StringLikeIgnoreCase ForAllOfAllValues:StringNotLike ForAllOfAllValues:StringNotLikeIgnoreCase ForAllOfAllValues:NumericEquals ForAllOfAllValues:NumericNotEquals ForAllOfAllValues:NumericGreaterThan ForAllOfAllValues:NumericGreaterThanEquals ForAllOfAllValues:NumericLessThan ForAllOfAllValues:NumericLessThanEquals ForAllOfAllValues:GuidEquals ForAllOfAllValues:GuidNotEquals |
Descrizione | Se ogni valore sul lato sinistro soddisfa il confronto con ogni valore sul lato destro, l'espressione restituisce true. Ha il formato : ForAllOfAllValues:<BooleanFunction> . Supporta più stringhe e numeri. |
Esempi | {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18} false {10, 20} ForAllOfAllValues:NumericLessThan {25, 30} true {10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30} false |
Caratteri speciali
Carattere | Descrizione |
---|---|
* |
L’asterisco (*) rappresenta una corrispondenza con un caratteri jolly multi-carattere che può essere usata con gli operatori Like . Se necessario, è possibile eseguire l'escape di un asterisco aggiungendo una barra rovesciata \* . |
? |
Il punto interrogativo (?) rappresenta una corrispondenza con un caratteri jolly per un singolo carattere che può essere usata con gli operatori Like . Se necessario, è possibile eseguire l'escape di un punto interrogativo aggiungendo una barra rovesciata \? . |
$ |
Viene usato il simbolo del dollaro ($) per delineare le chiavi dei tag. In Azure PowerShell, se una stringa racchiusa tra virgolette doppie (") include il simbolo del dollaro, è necessario anteporre un prefisso ('). Ad esempio: tags:Project<`$key_case_sensitive`$> . |
Raggruppamento e precedenza
Se sono presenti tre o più espressioni per un'azione mirata con operatori diversi tra le espressioni, l'ordine di valutazione è ambiguo. Usare le parentesi ()
per raggruppare le espressioni e specificare l'ordine di valutazione delle espressioni. Le espressioni racchiuse tra parentesi hanno una precedenza maggiore. Ad esempio, se si dispone dell'espressione seguente:
a AND b OR c
È necessario aggiungere le parentesi in uno dei modi seguenti:
(a AND b) OR c
a AND (b OR c)