Condividi tramite


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.

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 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 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.

Formato di un'azione con una sotto-operazione.

(
    (
        !(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.

Formato di più azioni da 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 in base a più valori.

Formato di più espressioni che usano operatori booleani e valori multipli.

(
    (
        !(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.

Formato di più condizioni che usano 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 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:

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 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:

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)

Passaggi successivi