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 dei ruoli, è utile esaminare il formato.

Condizione semplice

La condizione più semplice è costituita da un'azione di destinazione 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, che determina se l'azione può essere eseguita.

Di seguito viene illustrato il formato di una condizione semplice.

Formato di una condizione semplice con una singola azione e una singola espressione.

(
    (
        !(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'
    )
)

Diagramma che mostra l'accesso in lettura ai BLOB con un nome di contenitore specifico.

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 <action> l'esecuzione. In caso contrario, <action> non è consentito eseguire .

Lo pseudocode 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
    }
}

Sottooperazioni

Alcune azioni hanno sottooperazioni. Ad esempio, l'azione Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read dati ha la sottooperazione "Elenca BLOB". Le condizioni con sottooperazioni hanno il formato seguente.

Formattare un'azione con una sottooperazione.

(
    (
        !(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 esserci meno attributi tra cui scegliere per la condizione perché gli attributi devono essere disponibili tra le azioni selezionate.

Formattare più azioni per consentire se la condizione è true.

(
    (
        !(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 rispetto a più valori.

Formattare per più espressioni usando operatori booleani e più valori.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)

Più condizioni

È anche possibile combinare condizioni per impostare come destinazione più azioni.

Formattare per più condizioni usando l'operatore booleano.

(
    (
        !(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 per una condizione di 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, le condizioni possono essere aggiunte alle assegnazioni di ruolo predefinite o personalizzate con azioni di archiviazione BLOB o dati di archiviazione code. Sono inclusi i ruoli predefiniti seguenti:

Per un elenco delle azioni di archiviazione che è possibile usare nelle condizioni, vedere:

Attributi

A seconda delle azioni selezionate, l'attributo potrebbe essere trovato in posizioni diverse. Se si selezionano più azioni per una singola condizione, potrebbero esserci 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 di indice BLOB. @Request
Conto risorse L'attributo è una proprietà della risorsa, ad esempio un nome di contenitore. @Resource

Per un elenco completo degli attributi di archiviazione che è possibile usare nelle condizioni, vedere:

Attributi dell'ambiente

Gli attributi di ambiente sono associati alle circostanze in cui viene effettuata la richiesta di accesso, ad esempio la data e l'ora del giorno o l'ambiente di rete. L'ambiente di rete potrebbe essere indipendentemente dal fatto che l'accesso sia su un endpoint privato specifico o su una subnet di rete virtuale o su qualsiasi collegamento privato.

Nella tabella seguente sono elencati gli attributi di ambiente supportati per le condizioni.

Nome visualizzato Descrizione Attributo Type
Collegamento privato1 Usare questo attributo in condizioni per richiedere l'accesso tramite qualsiasi collegamento privato. isPrivateLink Booleano
Endpointprivato 1,2 Usare questo attributo in condizioni per limitare l'accesso a un endpoint privato specifico. Microsoft.Network/privateEndpoints Stringa
Subnet1,3 Usare questo attributo in condizioni per limitare l'accesso da una subnet specifica. Microsoft.Network/virtualNetworks/subnets Stringa
ORA UTC Usare questo attributo in condizioni per limitare l'accesso agli oggetti durante periodi di tempo specifici. UtcNow DateTime

1 Per le operazioni di copia, gli Is private linkattributi , Private endpointe Subnet si applicano solo alla destinazione, ad esempio un account di archiviazione, non l'origine. Per altre informazioni sulle operazioni di copia a cui si applica questa opzione, selezionare ogni attributo nella 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 è attualmente presente almeno una subnet di rete virtuale usando gli endpoint di servizio configurati nella sottoscrizione.

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 principal, è necessario disporre degli elementi seguenti:

Per altre informazioni sugli attributi di sicurezza personalizzati, vedere:

Attributi della 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 se lo spazio dei nomi gerarchico è 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 selezionata è uguale a "Microsoft. Archiviazione/storageAccounts/blobServices/containers/blobs/read", quindi true

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Se l'azione selezionata è uguale a "Microsoft.Authorization/roleAssignments/write", true

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Se l'azione selezionata è uguale a "Microsoft.Authorization/roleAssignments/write", false

SottoOperationMatches

Proprietà valore
Operator SubOperationMatches
Descrizione Controlla se la sottooperazione corrente corrisponde al modello di sottooperazione 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 dell'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 Operatore 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 negation.
Esempi NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Operatori di confronto booleani

Questa sezione elenca gli operatori di confronto booleani disponibili per costruire condizioni.

Proprietà valore
Operatori BoolEquals
BoolNotEquals
Descrizione Confronto booleano.
Esempi @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Operatori di confronto tra stringhe

In questa sezione sono elencati gli operatori di confronto di 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 di corrispondenza a più caratteri (*) o un carattere jolly a caratteri singoli (?) in qualsiasi punto della 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", true

Resource[name1] StringLike 'A*C?'
Se Resource[name1] è uguale a "abcd", false

Resource[name1] StringLike 'a*c'
Se Resource[name1] è uguale a "abcd", 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 DateTime

Questa sezione elenca gli operatori di confronto di 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. Usato ora 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 identificatore univoco globale (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. Usato per identificare una risorsa, ad esempio l'ID entità o l'ID definizione del ruolo.
Esempi

Operatori di confronto tra prodotti

Questa sezione elenca 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 è validScope1 uguale a o validScope2, 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
* Un asterisco (*) rappresenta una corrispondenza con caratteri jolly multi-carattere che può essere usata con Like gli operatori. Se necessario, è possibile eseguire l'escape di un asterisco aggiungendo una barra rovesciata \*.
? Un punto interrogativo (?) rappresenta una corrispondenza con caratteri jolly a carattere singolo che può essere usata con Like gli operatori. Se necessario, è possibile eseguire l'escape di un punto interrogativo aggiungendo una barra \?rovesciata.
$ Viene usato un segno di dollaro ($) per delineare le chiavi dei tag. In Azure PowerShell, se una stringa racchiusa tra virgolette doppie (") include un segno di 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 di destinazione 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 parentesi in uno dei modi seguenti:

(a AND b) OR c
a AND (b OR c)

Passaggi successivi