Villkorsformat och syntax för Azure-rolltilldelning

Ett villkor är en extra kontroll som du kan lägga till för rolltilldelningen om du vill justera åtkomstkontrollen ytterligare. Du kan till exempel lägga till ett villkor som kräver att ett objekt har en specifik tagg för att läsa objektet. I den här artikeln beskrivs format och syntax för rolltilldelningsvillkor.

Villkorsformat

För att bättre förstå rolltilldelningsvillkor hjälper det att titta på formatet.

Enkelt villkor

Det mest grundläggande villkoret består av en riktad åtgärd och ett uttryck. En åtgärd är en åtgärd som en användare kan utföra på en resurstyp. Ett uttryck är en instruktion som utvärderas till sant eller falskt, vilket avgör om åtgärden tillåts utföras.

Följande visar formatet för ett enkelt villkor.

Format för ett enkelt villkor med en enda åtgärd och ett enda uttryck.

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

Följande villkor har en åtgärd som "Läsa en blob". Uttrycket kontrollerar om containernamnet är blobs-example-container.

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
    )
    OR 
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
        StringEquals 'blobs-example-container'
    )
)

Diagram som visar läsåtkomst till blobar med ett visst containernamn.

Hur ett villkor utvärderas

Om en användare försöker utföra en åtgärd i rolltilldelningen som inte <action>är utvärderas !(ActionMatches) till true och det övergripande villkoret utvärderas till sant för att åtgärden ska kunna utföras.

Om en användare försöker utföra <action> i rolltilldelningen !(ActionMatches) utvärderas till false, så uttrycket utvärderas. Om uttrycket utvärderas till sant utvärderas det övergripande villkoret till sant så att det kan <action> utföras. Annars <action> kan inte utföras.

Följande pseudokod visar ett annat sätt att läsa det här villkoret.

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

Underåtgärder

Vissa åtgärder har underåtgärder. Dataåtgärden Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read har till exempel underoperationen "Listblobar". Villkor med underåtgärder har följande format.

Formatera för en åtgärd med en underoperation.

(
    (
        !(ActionMatches{'<action>'}
        AND
        SubOperationMatches{'<subOperation>'})

    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Flera åtgärder

Ett villkor kan innehålla flera åtgärder som du vill tillåta om villkoret är sant. Om du väljer flera åtgärder för ett enda villkor kan det finnas färre attribut att välja mellan för ditt villkor eftersom attributen måste vara tillgängliga för de valda åtgärderna.

Format för flera åtgärder för att tillåta om villkoret är sant.

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

Flera uttryck

Ett villkor kan innehålla flera uttryck. Beroende på operatorn kan attribut kontrolleras mot flera värden.

Formatera för flera uttryck med hjälp av booleska operatorer och flera värden.

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

Flera villkor

Du kan också kombinera villkor för att rikta in dig på flera åtgärder.

Formatera för flera villkor med boolesk operator.

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

Villkorssyntax

Följande visar syntaxen för ett rolltilldelningsvillkor.

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

Åtgärder

För närvarande kan villkor läggas till i inbyggda eller anpassade rolltilldelningar som har bloblagrings- eller kölagringsdataåtgärder. Här är några exempel på dessa inbyggda roller:

En lista över de lagringsåtgärder som du kan använda under förhållanden finns i:

Attribut

Beroende på de valda åtgärderna kan attributet hittas på olika platser. Om du väljer flera åtgärder för ett enda villkor kan det finnas färre attribut att välja mellan för ditt villkor eftersom attributen måste vara tillgängliga för alla valda åtgärder. Om du vill ange ett attribut måste du inkludera källan som ett prefix.

Attributkälla beskrivning Kod
Miljö Attributet är associerat med miljön för begäran, till exempel begärans nätverks ursprung eller aktuellt datum och tid.
@Environment
Främsta Attributet är ett anpassat säkerhetsattribut som tilldelats huvudnamnet, till exempel ett användar- eller företagsprogram (tjänstens huvudnamn). @Principal
Begär Attributet är en del av åtgärdsbegäran, till exempel att ange blobindextaggen. @Request
Resurs Attributet är en egenskap för resursen, till exempel ett containernamn. @Resource

En fullständig lista över de lagringsattribut som du kan använda under förhållanden finns i:

Miljöattribut

Miljöattribut associeras med de omständigheter under vilka åtkomstbegäran görs, till exempel datum och tid på dagen eller nätverksmiljön. Nätverksmiljön kan vara om åtkomsten är över en specifik privat slutpunkt eller ett virtuellt nätverksundernät, eller kanske via någon privat länk.

I följande tabell visas de miljöattribut som stöds för villkor.

Display name beskrivning Attribut Typ
Är privat länk1 Använd det här attributet i villkor för att kräva åtkomst via en privat länk. isPrivateLink Boolesk
Privat slutpunkt1,2 Använd det här attributet i villkor för att begränsa åtkomsten över en specifik privat slutpunkt. Microsoft.Network/privateEndpoints Sträng
Undernät1,3 Använd det här attributet i villkor för att begränsa åtkomsten från ett visst undernät. Microsoft.Network/virtualNetworks/subnets Sträng
UTC nu Använd det här attributet i villkor för att begränsa åtkomsten till objekt under vissa tidsperioder. UtcNow Datetime

1 För kopieringsåtgärder gäller attributen Is private link, Private endpointoch Subnet endast för målet, ett sådant lagringskonto, inte källan. Om du vill ha mer information om de kopieringsåtgärder som detta gäller väljer du varje attribut i tabellen för att se mer information.
2 Du kan bara använda Private endpoint attributet om du för närvarande har minst en privat slutpunkt konfigurerad i din prenumeration.
3 Du kan bara använda Subnet attributet om du för närvarande har minst ett virtuellt nätverksundernät med hjälp av tjänstslutpunkter som konfigurerats i din prenumeration.

Huvudattribut

Huvudattribut är anpassade säkerhetsattribut som tilldelats säkerhetsobjektet och som begär åtkomst till en resurs. Säkerhetsobjektet kan vara en användare eller ett företagsprogram (tjänstens huvudnamn).

Om du vill använda huvudattribut måste du ha följande:

  • Microsoft Entra-behörigheter för den inloggade användaren, till exempel rollen Administratör för attributtilldelning
  • Anpassade säkerhetsattribut som definierats i Microsoft Entra-ID

Mer information om anpassade säkerhetsattribut finns i:

Begärandeattribut

Begärandeattribut associeras med de villkor som anges i en åtkomstbegäran, till exempel det angivna prefixet för blobar som ska visas.

Resursattribut

Resursattribut är associerade med det objekt som åtkomst begärs till, till exempel lagringskontots namn, containernamn eller om hierarkiskt namnområde är aktiverat för lagringskontot.

Funktionsoperatorer

I det här avsnittet visas de funktionsoperatorer som är tillgängliga för att skapa villkor.

ActionMatches

Property Värde
Operatör ActionMatches
Beskrivning Kontrollerar om den aktuella åtgärden matchar det angivna åtgärdsmönstret.
Exempel ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Om åtgärden som kontrolleras är lika med "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read" är sant

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Om åtgärden som kontrolleras är lika med "Microsoft.Authorization/roleAssignments/write" är sant

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Om åtgärden som kontrolleras är lika med "Microsoft.Authorization/roleAssignments/write" kommer false

SubOperationMatches

Property Värde
Operatör SubOperationMatches
Beskrivning Kontrollerar om den aktuella underoperationen matchar det angivna underoperationsmönstret.
Exempel SubOperationMatches{'Blob.List'}

Exists

Property Värde
Operatör Exists
Beskrivning Kontrollerar om det angivna attributet finns.
Exempel Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Attribut stöder1 Namn på krypteringsomfång
Ögonblicksbild
Versions-ID

1 Operatorn Exists stöds endast för dessa attribut i det visuella ABAC-villkorsverktyget i Azure-portalen. Du kan lägga till operatorn i Exists alla attribut med andra verktyg, till exempel PowerShell, Azure CLI, REST API och villkorskodredigeraren i Azure-portalen.

Logiska operatorer

I det här avsnittet visas de logiska operatorer som är tillgängliga för att skapa villkor.

och

Property Värde
Operatorer AND
&&
Beskrivning Och operator.
Exempel !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Eller

Property Värde
Operatorer OR
||
Beskrivning Eller operator.
Exempel @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

Property Värde
Operatorer NOT
!
Beskrivning Inte eller negationsoperator.
Exempel NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Booleska jämförelseoperatorer

I det här avsnittet visas de booleska jämförelseoperatorer som är tillgängliga för att konstruera villkor.

Property Värde
Operatorer BoolEquals
BoolNotEquals
Beskrivning Boolesk jämförelse.
Exempel @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Strängjämförelseoperatorer

I det här avsnittet visas de strängjämförelseoperatorer som är tillgängliga för att skapa villkor.

StringEquals

Property Värde
Operatorer StringEquals
StringEqualsIgnoreCase
Beskrivning Skiftlägeskänslig (eller skiftlägeskänslig) matchning. Värdena måste exakt matcha strängen.
Exempel @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

Property Värde
Operatorer StringNotEquals
StringNotEqualsIgnoreCase
Beskrivning Negation av StringEquals (eller StringEqualsIgnoreCase) operator.

StringStartsWith

Property Värde
Operatorer StringStartsWith
StringStartsWithIgnoreCase
Beskrivning Skiftlägeskänslig (eller skiftlägeskänslig) matchning. Värdena börjar med strängen.

StringNotStartsWith

Property Värde
Operatorer StringNotStartsWith
StringNotStartsWithIgnoreCase
Beskrivning Negation av StringStartsWith (eller StringStartsWithIgnoreCase) operator.

StringLike

Property Värde
Operatorer StringLike
StringLikeIgnoreCase
Beskrivning Skiftlägeskänslig (eller skiftlägeskänslig) matchning. Värdena kan innehålla ett jokertecken med flera tecken (*) eller ett jokertecken med en teckens matchning (?) var som helst i strängen. Om det behövs kan dessa tecken undantagas genom att lägga till ett omvänt snedstreck \* och \?.
Exempel @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
Om Resource[name1] är lika med "abcd" är det sant

Resource[name1] StringLike 'A*C?'
Om Resource[name1] är lika med "abcd" är det falskt

Resource[name1] StringLike 'a*c'
Om Resource[name1] är lika med "abcd" är det falskt

StringNotLike

Property Värde
Operatorer StringNotLike
StringNotLikeIgnoreCase
Beskrivning Negation av StringLike (eller StringLikeIgnoreCase) operator.

Numeriska jämförelseoperatorer

I det här avsnittet visas de numeriska jämförelseoperatorer som är tillgängliga för att skapa villkor.

Property Värde
Operatorer NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Beskrivning Nummermatchning. Endast heltal stöds.

DateTime-jämförelseoperatorer

I det här avsnittet visas de datum-/tidsjämförelseoperatorer som är tillgängliga för att konstruera villkor.

Property Värde
Operatorer DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
Beskrivning Fullständig precisionskontroll med formatet: yyyy-mm-ddThh:mm:ss.mmmmmmmZ. Används för blobversions-ID, blobögonblicksbild och UTC nu.
Exempel @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

GUID-jämförelseoperatorer

I det här avsnittet visas de globalt unika identifieraren (GUID) jämförelseoperatorer som är tillgängliga för att konstruera villkor.

Property Värde
Operatorer GuidEquals
GuidNotEquals
Beskrivning Skiftlägesokänslig matchning med formatet: 00000000-0000-0000-0000-000000000000. Används för att identifiera en resurs, till exempel huvudnamns-ID eller rolldefinitions-ID.
Exempel

Jämförelseoperatorer mellan produkter

I det här avsnittet visas de korsproduktjämförelseoperatorer som är tillgängliga för att konstruera villkor.

ForAnyOfAnyValues

Property Värde
Operatorer 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
Beskrivning Om minst ett värde på vänster sida uppfyller jämförelsen med minst ett värde till höger utvärderas uttrycket till sant. Har formatet : ForAnyOfAnyValues:<BooleanFunction>. Stöder flera strängar och tal.
Exempel @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
Om krypteringsomfångsnamnet är lika med validScope1 eller validScope2, är det sant.

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'}
true

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'}
falskt

ForAllOfAnyValues

Property Värde
Operatorer 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
Beskrivning Om varje värde på vänster sida uppfyller jämförelsen med minst ett värde till höger utvärderas uttrycket till sant. Har formatet : ForAllOfAnyValues:<BooleanFunction>. Stöder flera strängar och tal.
Exempel @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'}
falskt

ForAnyOfAllValues

Property Värde
Operatorer 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
Beskrivning Om minst ett värde på vänster sida uppfyller jämförelsen med varje värde till höger utvärderas uttrycket till sant. Har formatet : ForAnyOfAllValues:<BooleanFunction>. Stöder flera strängar och tal.
Exempel {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
true

ForAllOfAllValues

Property Värde
Operatorer 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
Beskrivning Om varje värde på vänster sida uppfyller jämförelsen med varje värde till höger utvärderas uttrycket till sant. Har formatet : ForAllOfAllValues:<BooleanFunction>. Stöder flera strängar och tal.
Exempel {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
falskt

{10, 20} ForAllOfAllValues:NumericLessThan {25, 30}
true

{10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30}
falskt

Specialtecken

Tecken beskrivning
* En asterisk (*) representerar en jokerteckenmatchning med flera tecken som kan användas med Like operatorer. Om det behövs kan du fly från en asterisk genom att lägga till ett omvänt snedstreck \*.
? Ett frågetecken (?) representerar en jokerteckenmatchning med ett tecken som kan användas med Like operatorer. Om det behövs kan du undvika ett frågetecken genom att lägga till ett omvänt snedstreck \?.
$ Ett dollartecken ($) används för att definiera taggnycklar. Om en sträng som omges av dubbla citattecken (") i Azure PowerShell innehåller ett dollartecken, måste du prefixa den med en backtick ('). Exempel: tags:Project<`$key_case_sensitive`$>.

Gruppering och prioritet

Om du har tre eller fler uttryck för en riktad åtgärd med olika operatorer mellan uttrycken är utvärderingsordningen tvetydig. Du använder parenteser () för att gruppera uttryck och ange den ordning som uttrycken utvärderas. Uttryck som omges av parenteser har högre prioritet. Om du till exempel har följande uttryck:

a AND b OR c

Du måste lägga till parenteser på något av följande sätt:

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

Nästa steg