Format i składnia warunków przypisania roli platformy Azure

Warunek to dodatkowy element kontroli, który można opcjonalnie dodać do przypisania roli w celu zapewnienia bardziej precyzyjnej kontroli dostępu. Można na przykład dodać warunek, który wymaga, aby obiekt miał określony tag do odczytania obiektu. W tym artykule opisano format i składnię warunków przypisania roli.

Format warunku

Aby lepiej zrozumieć warunki przypisywania ról, warto przyjrzeć się formatowi.

Prosty warunek

Najbardziej podstawowy warunek składa się z akcji docelowej i wyrażenia. Akcja to operacja, którą użytkownik może wykonać na typie zasobu. Wyrażenie jest instrukcją, która oblicza wartość true lub false, która określa, czy można wykonać akcję.

Poniżej przedstawiono format prostego warunku.

Format prostego warunku z pojedynczą akcją i pojedynczym wyrażeniem.

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

Poniższy warunek ma akcję "Odczytaj obiekt blob". Wyrażenie sprawdza, czy nazwa kontenera to blobs-example-container.

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

Diagram przedstawiający dostęp do odczytu do obiektów blob o określonej nazwie kontenera.

Jak jest obliczany warunek

Jeśli użytkownik spróbuje wykonać akcję w przypisaniu roli, która nie <action>jest wartością , zwraca wartość true, !(ActionMatches) a ogólny warunek daje wartość true, aby umożliwić wykonanie akcji.

Jeśli użytkownik próbuje wykonać zadanie <action> w przypisaniu roli, !(ActionMatches) daje wartość false, więc wyrażenie jest oceniane. Jeśli wyrażenie zwróci wartość true, ogólny warunek daje wartość true, aby umożliwić <action> wykonywanie. <action> W przeciwnym razie nie można wykonać.

Poniższy pseudo kod pokazuje inny sposób, w jaki można odczytać ten warunek.

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

Podoperacje

Niektóre akcje mają podoperacje. Na przykład akcja Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read danych ma podoperację "Wyświetlanie listy obiektów blob". Warunki z podoperacjami mają następujący format.

Formatuj akcję za pomocą podoperacji.

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

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

Wiele akcji

Warunek może zawierać wiele akcji, które chcesz zezwolić, jeśli warunek ma wartość true. Jeśli wybierzesz wiele akcji dla jednego warunku, może istnieć mniej atrybutów do wyboru dla warunku, ponieważ atrybuty muszą być dostępne w wybranych akcjach.

Formatuj wiele akcji, aby zezwolić, jeśli warunek ma wartość true.

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

Wiele wyrażeń

Warunek może zawierać wiele wyrażeń. W zależności od operatora atrybuty mogą być sprawdzane względem wielu wartości.

Formatuj wiele wyrażeń przy użyciu operatorów logicznych i wielu wartości.

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

Wiele warunków

Można również połączyć warunki w celu kierowania wielu akcji.

Formatuj wiele warunków przy użyciu operatora logicznego.

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

Składnia warunku

Poniżej przedstawiono składnię warunku przypisania roli.

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

Akcje

Obecnie warunki można dodać do wbudowanych lub niestandardowych przypisań ról, które mają akcje danych magazynu obiektów blob lub magazynu kolejek. Należą do nich następujące wbudowane role:

Aby uzyskać listę akcji magazynu, których można użyć w warunkach, zobacz:

Atrybuty

W zależności od wybranych akcji atrybut może znajdować się w różnych miejscach. Jeśli wybierzesz wiele akcji dla jednego warunku, może istnieć mniej atrybutów do wyboru dla warunku, ponieważ atrybuty muszą być dostępne we wszystkich wybranych akcjach. Aby określić atrybut, należy dołączyć źródło jako prefiks.

Źródło atrybutu opis Kod
Środowisko Atrybut jest skojarzony ze środowiskiem żądania, takim jak źródło sieci żądania lub bieżąca data i godzina.
@Environment
Główny Atrybut jest niestandardowym atrybutem zabezpieczeń przypisanym do podmiotu zabezpieczeń, takiego jak użytkownik lub aplikacja przedsiębiorstwa (jednostka usługi). @Principal
Zażądaj Atrybut jest częścią żądania akcji, takiego jak ustawienie tagu indeksu obiektów blob. @Request
Zasób Atrybut jest właściwością zasobu, taką jak nazwa kontenera. @Resource

Aby uzyskać pełną listę atrybutów magazynu, których można użyć w warunkach, zobacz:

Atrybuty środowiska

Atrybuty środowiska są skojarzone z okolicznościami, w których jest wykonywane żądanie dostępu, takie jak data i godzina dnia lub środowisko sieciowe. Środowisko sieciowe może dotyczyć tego, czy dostęp odbywa się za pośrednictwem określonego prywatnego punktu końcowego, czy podsieci sieci wirtualnej, czy też za pośrednictwem jakiegokolwiek łącza prywatnego.

W poniższej tabeli wymieniono obsługiwane atrybuty środowiska dla warunków.

Display name Opis Atrybut Typ
Czy łączeprywatne 1 Użyj tego atrybutu w warunkach, aby wymagać dostępu za pośrednictwem dowolnego łącza prywatnego. isPrivateLink Wartość logiczna
Prywatny punkt końcowy1,2 Użyj tego atrybutu w warunkach, aby ograniczyć dostęp do określonego prywatnego punktu końcowego. Microsoft.Network/privateEndpoints ciąg
Podsieć1,3 Użyj tego atrybutu w warunkach, aby ograniczyć dostęp z określonej podsieci. Microsoft.Network/virtualNetworks/subnets ciąg
Czas UTC teraz Użyj tego atrybutu w warunkach, aby ograniczyć dostęp do obiektów w określonych okresach. UtcNow Datetime

1 W przypadku operacji Is private linkkopiowania atrybuty , Private endpointi Subnet mają zastosowanie tylko do miejsca docelowego, takiego konta magazynu, a nie do źródła. Aby uzyskać więcej informacji na temat operacji kopiowania, do których ma to zastosowanie, wybierz każdy atrybut w tabeli, aby wyświetlić więcej szczegółów.
2 Możesz użyć atrybutu Private endpoint tylko wtedy, gdy w subskrypcji jest skonfigurowany co najmniej jeden prywatny punkt końcowy.
3 Możesz użyć atrybutu Subnet tylko wtedy, gdy obecnie masz co najmniej jedną podsieć sieci wirtualnej przy użyciu punktów końcowych usługi skonfigurowanych w ramach subskrypcji.

Atrybuty podmiotu zabezpieczeń

Atrybuty podmiotu zabezpieczeń są atrybutami zabezpieczeń niestandardowymi przypisanymi do podmiotu zabezpieczeń żądającego dostępu do zasobu. Podmiot zabezpieczeń może być użytkownikiem lub aplikacją przedsiębiorstwa (jednostką usługi).

Aby użyć atrybutów głównych, musisz mieć następujące elementy:

  • Uprawnienia usługi Microsoft Entra dla zalogowanego użytkownika, takie jak rola przypisywania atrybutów Administracja istrator
  • Niestandardowe atrybuty zabezpieczeń zdefiniowane w identyfikatorze Entra firmy Microsoft

Aby uzyskać więcej informacji na temat niestandardowych atrybutów zabezpieczeń, zobacz:

Atrybuty żądania

Atrybuty żądania są skojarzone z kryteriami określonymi w żądaniu dostępu, takimi jak określony prefiks obiektów blob do wyświetlania.

Atrybuty zasobów

Atrybuty zasobów są skojarzone z obiektem, do którego jest żądany dostęp, na przykład nazwa konta magazynu, nazwa kontenera lub czy hierarchiczna przestrzeń nazw jest włączona dla konta magazynu.

Operatory funkcji

W tej sekcji wymieniono operatory funkcji, które są dostępne do konstruowania warunków.

ActionMatches

Właściwości Wartość
Operator ActionMatches
Opis Sprawdza, czy bieżąca akcja jest zgodna ze wzorcem określonej akcji.
Przykłady ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Jeśli sprawdzana akcja jest równa "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read", to prawda

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Jeśli sprawdzana akcja jest równa "Microsoft.Authorization/roleAssignments/write", to prawda

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Jeśli sprawdzana akcja jest równa "Microsoft.Authorization/roleAssignments/write", to false

PodOperationMatches

Właściwości Wartość
Operator SubOperationMatches
Opis Sprawdza, czy bieżąca podoperacja jest zgodna z określonym wzorcem podoperacji.
Przykłady SubOperationMatches{'Blob.List'}

Exists

Właściwości Wartość
Operator Exists
Opis Sprawdza, czy określony atrybut istnieje.
Przykłady Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Obsługaatrybutów 1 Nazwa zakresu szyfrowania
Migawka
Identyfikator wersji

1 Operator Exists jest obsługiwany tylko dla tych atrybutów w konstruktorze warunków ABAC wizualizacji w witrynie Azure Portal. Operator można dodać do dowolnego atrybutu Exists przy użyciu innych narzędzi, takich jak program PowerShell, interfejs wiersza polecenia platformy Azure, interfejs API REST i edytor kodu warunku w witrynie Azure Portal.

Operatory logiczne

W tej sekcji wymieniono operatory logiczne, które są dostępne do konstruowania warunków.

And

Właściwości Wartość
Operatory AND
&&
Opis Operator and.
Przykłady !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Or

Właściwości Wartość
Operatory OR
||
Opis Lub operator.
Przykłady @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

Właściwości Wartość
Operatory NOT
!
Opis Operator nie lub negacji.
Przykłady NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Operatory porównania warunkowego

W tej sekcji wymieniono operatory porównania warunkowego, które są dostępne do konstruowania warunków.

Właściwości Wartość
Operatory BoolEquals
BoolNotEquals
Opis Porównanie wartości logicznych.
Przykłady @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Operatory porównania ciągów

W tej sekcji wymieniono operatory porównania ciągów, które są dostępne do konstruowania warunków.

StringEquals

Właściwości Wartość
Operatory StringEquals
StringEqualsIgnoreCase
Opis Dopasowanie uwzględniające wielkość liter (lub bez uwzględniania wielkości liter). Wartości muszą być dokładnie zgodne z ciągiem.
Przykłady @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

Właściwości Wartość
Operatory StringNotEquals
StringNotEqualsIgnoreCase
Opis Negacja StringEquals operatora (lub StringEqualsIgnoreCase).

StringStartsWith

Właściwości Wartość
Operatory StringStartsWith
StringStartsWithIgnoreCase
Opis Dopasowanie uwzględniające wielkość liter (lub bez uwzględniania wielkości liter). Wartości zaczynają się od ciągu.

StringNotStartsWith

Właściwości Wartość
Operatory StringNotStartsWith
StringNotStartsWithIgnoreCase
Opis Negacja StringStartsWith operatora (lub StringStartsWithIgnoreCase).

StringLike

Właściwości Wartość
Operatory StringLike
StringLikeIgnoreCase
Opis Dopasowanie uwzględniające wielkość liter (lub bez uwzględniania wielkości liter). Wartości mogą zawierać wieloznaczne symbole wieloznaczne (*) lub symbol wieloznaczny zgodny z symbolami wieloznacznymi (?) w dowolnym miejscu w ciągu. W razie potrzeby te znaki można wywrócić, dodając ukośnik \* odwrotny i \?.
Przykłady @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
Jeśli wartość resource[name1] jest równa "abcd", wartość true

Resource[name1] StringLike 'A*C?'
Jeśli wartość zasobu[name1] jest równa "abcd", to wartość false

Resource[name1] StringLike 'a*c'
Jeśli wartość zasobu[name1] jest równa "abcd", to wartość false

StringNotLike

Właściwości Wartość
Operatory StringNotLike
StringNotLikeIgnoreCase
Opis Negacja StringLike operatora (lub StringLikeIgnoreCase).

Operatory porównania liczbowego

W tej sekcji wymieniono operatory porównania liczbowego, które są dostępne do konstruowania warunków.

Właściwości Wartość
Operatory NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Opis Dopasowywanie liczb. Obsługiwane są tylko liczby całkowite.

Operatory porównania DateTime

W tej sekcji wymieniono operatory porównania daty/godziny, które są dostępne do konstruowania warunków.

Właściwości Wartość
Operatory DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
Opis Pełna precyzja sprawdzania przy użyciu formatu: yyyy-mm-ddThh:mm:ss.mmmmmmmZ. Używany w przypadku identyfikatora wersji obiektu blob, migawki obiektu blob i czasu UTC.
Przykłady @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

Operatory porównania identyfikatora GUID

W tej sekcji wymieniono operatory porównania globalnie unikatowego identyfikatora (GUID), które są dostępne do konstruowania warunków.

Właściwości Wartość
Operatory GuidEquals
GuidNotEquals
Opis Dopasowanie bez uwzględniania wielkości liter z formatem: 00000000-0000-0000-0000-000000000000. Służy do identyfikowania zasobu, takiego jak identyfikator podmiotu zabezpieczeń lub identyfikator definicji roli.
Przykłady

Operatory porównania między produktami

W tej sekcji wymieniono operatory porównania między produktami, które są dostępne do konstruowania warunków.

ForAnyOfAnyValues

Właściwości Wartość
Operatory 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
Opis Jeśli co najmniej jedna wartość po lewej stronie spełnia porównanie z co najmniej jedną wartością po prawej stronie, wyrażenie daje wartość true. Ma format: ForAnyOfAnyValues:<BooleanFunction>. Obsługuje wiele ciągów i liczb.
Przykłady @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
Jeśli nazwa zakresu szyfrowania jest validScope1 równa lub validScope2, wartość true.

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

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'}
fałsz

ForAllOfAnyValues

Właściwości Wartość
Operatory 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
Opis Jeśli każda wartość po lewej stronie spełnia porównanie z co najmniej jedną wartością po prawej stronie, wyrażenie daje wartość true. Ma format: ForAllOfAnyValues:<BooleanFunction>. Obsługuje wiele ciągów i liczb.
Przykłady @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'}

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'orange', 'red', 'blue'}
prawda

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'red', 'green'}
fałsz

ForAnyOfAllValues

Właściwości Wartość
Operatory 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
Opis Jeśli co najmniej jedna wartość po lewej stronie spełnia porównanie z każdą wartością po prawej stronie, wyrażenie daje wartość true. Ma format: ForAnyOfAllValues:<BooleanFunction>. Obsługuje wiele ciągów i liczb.
Przykłady {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
prawda

ForAllOfAllValues

Właściwości Wartość
Operatory 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
Opis Jeśli każda wartość po lewej stronie spełnia porównanie z każdą wartością po prawej stronie, wyrażenie zwróci wartość true. Ma format: ForAllOfAllValues:<BooleanFunction>. Obsługuje wiele ciągów i liczb.
Przykłady {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
fałsz

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

{10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30}
fałsz

Znaki specjalne

Znak opis
* Gwiazdka (*) reprezentuje wieloznaczne dopasowanie symboli wieloznacznych, których można używać z operatorami Like . W razie potrzeby możesz uniknąć gwiazdki, dodając ukośnik \*odwrotny .
? Znak zapytania (?) reprezentuje jednoznaczne dopasowanie symboli wieloznacznych, których można używać z operatorami Like . W razie potrzeby możesz uniknąć znaku zapytania, dodając ukośnik \?odwrotny.
$ Znak dolara ($) służy do oznaczania kluczy tagów. W programie Azure PowerShell, jeśli ciąg ujęty w cudzysłów (") zawiera znak dolara, musisz poprzedzić go znakiem backtick ('). Na przykład: tags:Project<`$key_case_sensitive`$>.

Grupowanie i pierwszeństwo

Jeśli masz co najmniej trzy wyrażenia dla akcji docelowej z różnymi operatorami między wyrażeniami, kolejność obliczania jest niejednoznaczna. Nawiasy () służą do grupowania wyrażeń i określania kolejności oceniania wyrażeń. Wyrażenia ujęte w nawiasy mają wyższy priorytet. Jeśli na przykład masz następujące wyrażenie:

a AND b OR c

Nawiasy należy dodać w jeden z następujących sposobów:

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

Następne kroki