Podmínka přiřazení role Azure – formát a syntaxe

Podmínka je další kontrola, kterou můžete volitelně přidat k přiřazení role, abyste získali podrobnější řízení přístupu. Můžete například přidat podmínku, která vyžaduje, aby objekt měl ke čtení objektu určitou značku. Tento článek popisuje formát a syntaxi podmínek přiřazení rolí.

Formát podmínky

Pokud chcete lépe porozumět podmínkám přiřazení rolí, pomůže vám to podívat se na formát.

Jednoduchá podmínka

Nejzásadnější podmínka se skládá z cílené akce a výrazu. Akce je operace, kterou může uživatel provést u typu prostředku. Výraz je výrok, který se vyhodnotí jako pravda nebo nepravda, což určuje, jestli je akce povolena.

Následující příklad ukazuje formát jednoduché podmínky.

Formát jednoduché podmínky s jedinou akcí a jediným výrazem

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

Následující podmínka má akci „Přečíst blob“. Tento výraz kontroluje, zda je název kontejneru blobs-example-container.

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

Diagram znázorňující přístup pro čtení k objektům blob s konkrétním názvem kontejneru

Jak se podmínka vyhodnocuje

Pokud se uživatel pokusí provést akci v přiřazení role, která není <action>, !(ActionMatches) vyhodnotí se jako true a celková podmínka se vyhodnotí jako true, aby akce mohla být provedena.

Pokud se uživatel pokusí provést <action> při přiřazení role, !(ActionMatches) se hodnotí jako nepravda, takže se výraz vyhodnotí. Pokud se výraz vyhodnotí jako pravdivý, vyhodnotí se celková podmínka jako true, aby bylo možné <action> provést. Jinak není dovoleno provést <action>.

Následující pseudokód ukazuje jiný způsob, jak tuto podmínku přečíst.

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

Podoperace

Některé akce mají podoperace. Například akce Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read dat obsahuje podoperaci "Seznam objektů blob". Podmínky s podoperacemi mají následující formát.

Naformátujte akci s podoperací.

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

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

Více akcí

Podmínka může obsahovat více akcí, které chcete povolit, pokud je podmínka pravdivá. Pokud pro jednu podmínku vyberete více akcí, může být pro vaši podmínku méně atributů, protože atributy musí být dostupné napříč vybranými akcemi.

Formát pro více akcí, pokud je podmínka pravdivá.

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

Více výrazů

Podmínka může obsahovat více výrazů. V závislosti na operátoru lze atributy zkontrolovat na více hodnotách.

Formát zahrnující více výrazů pomocí logických operátorů a více hodnot.

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

Více podmínek

Můžete také zkombinovat podmínky pro cílení na více akcí.

Formát pro více podmínek pomocí logického operátoru

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

Syntaxe podmínky

Následující příklad ukazuje syntaxi podmínky přiřazení role.

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

Akce

V současné době je možné přidat podmínky do předdefinovaných nebo vlastních přiřazení rolí, které obsahují akce úložiště blobů nebo frontu. Patří mezi ně následující předdefinované role:

Seznam akcí úložiště, které můžete použít v podmínkách, najdete tady:

Atributy

V závislosti na vybraných akcích se atribut může nacházet na různých místech. Pokud pro jednu podmínku vyberete více akcí, může být pro vaši podmínku méně atributů, protože atributy musí být dostupné ve všech vybraných akcích. Pokud chcete zadat atribut, musíte zdroj zahrnout jako předponu.

Zdroj atributů Popis Code
Prostředí Atribut je přidružený k prostředí požadavku, například k síťovému původu požadavku nebo k aktuálnímu datu a času.
@Environment
Hlavní Atribut je vlastní atribut zabezpečení přiřazený k objektu zabezpečení, jako je uživatel nebo podniková aplikace (instanční objekt). @Principal
Požádat Atribut je součástí požadavku akce, například nastavení tagu indexu blobu. @Request
Prostředek Atribut je vlastnost prostředku, například název kontejneru. @Resource

Úplný seznam atributů úložiště, které můžete použít v podmínkách, najdete tady:

Atributy prostředí

Atributy prostředí jsou přidružené k okolnostem, za kterých se žádost o přístup provede, například datum a čas dne nebo síťové prostředí. Síťové prostředí může zahrnovat přístup přes konkrétní privátní koncový bod, podsíť virtuální sítě nebo jakékoli privátní propojení.

Následující tabulka uvádí podporované atributy prostředí pro podmínky.

Zobrazované jméno Popis Atribut Typ
Je soukromý odkaz1 Tento atribut použijte v podmínkách, pokud chcete vyžadovat přístup k libovolnému privátnímu propojení. isPrivateLink Boolean
Privátní koncový bod1 2 Tento atribut použijte v podmínkách k omezení přístupu přes konkrétní privátní koncový bod. Microsoft.Network/privateEndpoints Řetězec
Podsíť1,3 Tento atribut použijte v podmínkách k omezení přístupu z konkrétní podsítě. Microsoft.Network/virtualNetworks/subnets Řetězec
UTC nyní Tento atribut použijte v podmínkách k omezení přístupu k objektům během určitých časových období. UtcNow DateTime

1 Pro operace kopírování platí Is private linkPrivate endpoint, a Subnet atributy pouze pro cíl, takový účet úložiště, nikoli zdroj. Další informace o těchto operacích kopírování získáte tak, že vyberete jednotlivé atributy v tabulce, čímž zobrazíte další podrobnosti.
2 Atribut můžete použít Private endpoint pouze v případě, že máte v předplatném nakonfigurovaný aspoň jeden privátní koncový bod.
3 Atribut můžete použít Subnet pouze v případě, že aktuálně máte aspoň jednu podsíť virtuální sítě pomocí koncových bodů služby nakonfigurovaných ve vašem předplatném.

Hlavní atributy

Hlavní atributy jsou vlastní atributy zabezpečení přiřazené objektu zabezpečení požadujícího přístup k prostředku. Objekt zabezpečení může být uživatel nebo podniková aplikace (instanční objekt).

Pokud chcete použít hlavní atributy, musíte mít následující:

Další informace o vlastních bezpečnostních atribučních parametrech naleznete v:

Atributy požadavku

Atributy požadavku jsou přidružené k kritériím zadaným v žádosti o přístup, jako je například zadaná předpona objektů blob, které mají být uvedeny.

Atributy prostředků

Atributy prostředků jsou přidružené k objektu, ke kterému se požaduje přístup, například název účtu úložiště, název kontejneru nebo jestli je pro účet úložiště povolený hierarchický obor názvů.

Operátory funkcí

V této části jsou uvedeny operátory funkcí, které jsou k dispozici pro vytvoření podmínek.

AkceMatches

Vlastnost Hodnota
Operátor ActionMatches
Popis Zkontroluje, jestli aktuální akce odpovídá zadanému vzoru akce.
Příklady ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Pokud se akce rovná "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read", pak je pravda.

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Pokud se kontrolovaná akce rovná „Microsoft.Authorization/roleAssignments/write“, pak to platí.

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Pokud se akce kontrolovaná rovná hodnotě Microsoft.Authorization/roleAssignments/write, pak nepravda.

SubOperationMatches

Vlastnost Hodnota
Operátor SubOperationMatches
Popis Zkontroluje, jestli aktuální podoperace odpovídá zadanému vzoru podoperace.
Příklady SubOperationMatches{'Blob.List'}

Existuje

Vlastnost Hodnota
Operátor Exists
Popis Zkontroluje, jestli zadaný atribut existuje.
Příklady Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Podpora atributů1 Název oboru šifrování
Snímek
ID verze

1 Operátor Exists je podporován pouze pro tyto atributy ve vizuálním tvůrci podmínek ABAC v Azure portálu. Operátor Exists můžete přidat k libovolnému atributu pomocí jiných nástrojů, jako je PowerShell, Azure CLI, REST API a editor kódu podmínek v Azure portálu.

Logické operátory

Tato část obsahuje seznam logických operátorů, které jsou k dispozici pro vytváření podmínek.

And

Vlastnost Hodnota
Operátory AND
&&
Popis Operátor And.
Příklady !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Nebo

Vlastnost Hodnota
Operátory OR
||
Popis Nebo operátor.
Příklady @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

Ne

Vlastnost Hodnota
Operátory NOT
!
Popis Operátor negace nebo negace
Příklady NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Booleovské porovnávací operátory

Tato část obsahuje seznam logických relačních operátorů, které jsou k dispozici pro vytváření podmínek.

Vlastnost Hodnota
Operátory BoolEquals
BoolNotEquals
Popis Logické porovnání.
Příklady @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Operátory porovnání řetězců

V této části jsou uvedeny operátory porovnání řetězců, které jsou k dispozici pro vytváření podmínek.

StringEquals

Vlastnost Hodnota
Operátory StringEquals
StringEqualsIgnoreCase
Popis Rozlišovat malá a velká písmena (nebo nerozlišovat) při porovnávání. Hodnoty musí přesně odpovídat řetězci.
Příklady @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

Vlastnost Hodnota
Operátory StringNotEquals
StringNotEqualsIgnoreCase
Popis Negace operátoru StringEquals (nebo StringEqualsIgnoreCase)

ŘetězecZačínáNa

Vlastnost Hodnota
Operátory StringStartsWith
StringStartsWithIgnoreCase
Popis Rozlišovat malá a velká písmena (nebo nerozlišovat) při porovnávání. Hodnoty začínají řetězcem znaků.

ŘetězecNezačínáNa

Vlastnost Hodnota
Operátory StringNotStartsWith
StringNotStartsWithIgnoreCase
Popis Negace operátoru StringStartsWith (nebo StringStartsWithIgnoreCase)

StringLike

Vlastnost Hodnota
Operátory StringLike
StringLikeIgnoreCase
Popis Rozlišovat malá a velká písmena (nebo nerozlišovat) při porovnávání. Hodnoty mohou zahrnovat zástupný znak pro shodu s více znaky (*) nebo zástupný znak pro shodu s jedním znakem (?) kdekoli v řetězci. V případě potřeby lze tyto znaky escapovat pomocí zpětného lomítka \* a \?.
Příklady @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
Pokud se zdroj[name1] rovná "abcd", pak je to pravda

Resource[name1] StringLike 'A*C?'
Pokud se Resource[name1] rovná "abcd", pak false

Resource[name1] StringLike 'a*c'
Pokud se Resource[name1] rovná "abcd", pak false

StringNotLike

Vlastnost Hodnota
Operátory StringNotLike
StringNotLikeIgnoreCase
Popis Negace operátoru StringLike (nebo StringLikeIgnoreCase)

Číselné relační operátory

Tato část obsahuje seznam číselných relačních operátorů, které jsou k dispozici pro vytváření podmínek.

Vlastnost Hodnota
Operátory NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Popis Párování čísel Podporují se pouze celá čísla.

Operátory porovnání data a času

V této části jsou uvedeny operátory porovnání data a času, které jsou k dispozici pro vytváření podmínek.

Vlastnost Hodnota
Operátory DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
Popis Kontrola úplné přesnosti ve formátu: yyyy-mm-ddThh:mm:ss.mmmmmmmZ. Používá se pro ID verze objektu blob, snímek objektu blob a aktuální čas UTC.
Příklady @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

Relační operátory GUID

V této části jsou uvedeny globálně jedinečné relační operátory identifikátoru (GUID), které jsou k dispozici pro vytváření podmínek.

Vlastnost Hodnota
Operátory GuidEquals
GuidNotEquals
Popis Porovnávání bez ohledu na velikost písmen s formátem: 00000000-0000-0000-0000-000000000000. Používá se k identifikaci zdroje, jako je ID objektu zabezpečení nebo ID definice role.
Příklady

Operátory porovnání napříč produkty

V této části jsou uvedeny operátory porovnání mezi produkty, které jsou k dispozici pro vytváření podmínek.

ProJakoukoliZJakýchkoliHodnot

Vlastnost Hodnota
Operátory 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
Popis Pokud alespoň jedna hodnota na levé straně splňuje porovnání s alespoň jednou hodnotou na pravé straně, výraz se vyhodnotí jako true. Má formát: ForAnyOfAnyValues:<BooleanFunction>. Podporuje více řetězců a čísel.
Příklady @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
Pokud se název oboru šifrování rovná validScope1 nebo validScope2, pak true.

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

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

ForAllOfAnyValues

Vlastnost Hodnota
Operátory 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
Popis Pokud každá hodnota na levé straně splňuje porovnání s alespoň jednou hodnotou na pravé straně, výraz se vyhodnotí jako true. Má formát: ForAllOfAnyValues:<BooleanFunction>. Podporuje více řetězců a čísel.
Příklady @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'}
nepravda

ForAnyOfAllValues

Vlastnost Hodnota
Operátory 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
Popis Pokud alespoň jedna hodnota na levé straně splňuje porovnání s každou hodnotou na pravé straně, výraz se vyhodnotí jako true. Má formát: ForAnyOfAllValues:<BooleanFunction>. Podporuje více řetězců a čísel.
Příklady {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
true

ForAllOfAllValues

Vlastnost Hodnota
Operátory 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
Popis Pokud každá hodnota na levé straně splňuje porovnání s každou hodnotou na pravé straně, výraz se vyhodnotí jako true. Má formát: ForAllOfAllValues:<BooleanFunction>. Podporuje více řetězců a čísel.
Příklady {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
nepravda

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

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

Speciální znaky

Znak Popis
* Hvězdička (*) představuje shodu s víceznakovým zástupným znakem, kterou lze použít s operátory Like. V případě potřeby můžete utéct hvězdičkou přidáním zpětného lomítka \*.
? Otazník (?) představuje zástupný znak pro jednu libovolnou znakovou shodu, který lze použít s operátory Like. V případě potřeby můžete otazník odescapovat přidáním zpětného lomítka \?.
$ Znak dolaru ($) slouží k delineaci klíčů značek. V Azure PowerShellu, pokud řetězec uzavřený v dvojitých uvozovkách (") obsahuje znak dolaru, musíte jej předponovat zpětným apostrofem (`). Například: tags:Project<`$key_case_sensitive`$>.

Seskupování a priorita

Pokud máte tři nebo více výrazů pro cílovou akci s různými operátory mezi výrazy, pořadí vyhodnocení je nejednoznačné. Pomocí závorek () seskupíte výrazy a určíte pořadí, ve kterém se výrazy vyhodnocují. Výrazy uzavřené v závorkách mají vyšší prioritu. Pokud máte například následující výraz:

a AND b OR c

Závorky je nutné přidat jedním z následujících způsobů:

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

Další kroky