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.
(
(
!(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'
)
)
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.
(
(
!(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.
(
(
!(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.
(
(
!(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.
(
(
!(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:
- Storage Blob Data-deltagare
- Storage Blob Data-ägare
- Storage Blob Data-läsare
- Lagringsködatadeltagare
- Datameddelandeprocessor för lagringskö
- Meddelandesändare för lagringskö
- Dataläsare för lagringskö
En lista över de lagringsåtgärder som du kan använda under förhållanden finns i:
- Åtgärder och attribut för tilldelningsvillkor för Azure-rolltilldelning för Azure Blob Storage
- Åtgärder och attribut för tilldelningsvillkor för Azure-rolltilldelning för Azure Queue Storage.
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 |
Rektor | 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 endpoint
och 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:
- Lägga till eller inaktivera anpassade säkerhetsattribut i Microsoft Entra-ID
- Tillåt läsåtkomst till blobar baserat på taggar och anpassade säkerhetsattribut
- Huvudkontot visas inte i attributkällan
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öder 1 | Namn på krypteringsomfång Ögonblicksbild Versions-ID |
1 Operatorn Exists
stöds endast för dessa attribut i det visuella ABAC-villkorsverktyget i Azure Portal. Du kan lägga till operatorn i Exists
alla attribut med andra verktyg, till exempel PowerShell, Azure CLI, REST API och villkorskodredigeraren i Azure Portal.
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)