Azure 角色指派條件格式和語法

條件是額外的檢查,您可以選擇性地將其新增至您的角色指派,以提供更精細的存取控制。 例如,您可以新增需要物件具有特定標記才能讀取物件的條件。 本文說明角色指派條件的格式和語法。

條件格式

若要進一步瞭解角色指派條件,有助於查看格式。

簡單條件

最基本的條件是由目標動作和表達式所組成。 動作是使用者可以在資源類型上執行的作業。 表達式是評估為 true 或 false 的語句,可判斷是否允許執行動作。

下列顯示簡單條件的格式。

具有單一動作和單一表達式之簡單條件的格式。

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

下列條件具有「讀取 Blob」的動作。 表達式會檢查容器名稱是否為 blobs-example-container。

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

顯示具有特定容器名稱之 Blob 讀取存取權的圖表。

評估條件的方式

如果用戶嘗試在不是 <action>的角色指派中執行動作, !(ActionMatches) 則會評估為 true,而整體條件評估為 true,以允許執行動作。

如果用戶嘗試在角色指派中執行 <action>!(ActionMatches) 則評估為 false,因此會評估表達式。 如果表達式評估為 true,則整體條件會評估為 true 以允許 <action> 執行。 否則 <action> ,不允許執行。

下列虛擬程式代碼示範另一種方式,您可以讀取此條件。

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

子作業

某些動作有子作業。 例如, Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read 數據動作具有子作業「列出 Blob」。 具有子作業的條件具有下列格式。

具有子操作之動作的格式。

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

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

多個動作

如果條件為 true,條件可以包含您想要允許的多個動作。 如果您針對單一條件選取多個動作,可能會因為屬性必須可在所有選取的動作上使用,因而使能為條件選擇的屬性變少。

如果條件為 true,則允許多個動作的格式。

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

多個運算式

條件可以包含多個表達式。 根據運算符而定,可以針對多個值檢查屬性。

使用布爾運算子和多個值的多個表達式格式。

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

多重條件

您也可以結合條件以多個動作為目標。

使用布爾運算子的多個條件格式。

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

條件語法

下列顯示角色指派條件的語法。

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

動作

目前,條件可以新增至具有 Blob 記憶體或佇列記憶體數據動作的內建或自定義角色指派。 其中包括下列內建角色:

如需可在條件中使用的記憶體動作清單,請參閱:

屬性

視選取的動作而定,屬性可能會在不同的位置找到。 如果您針對單一條件選取多個動作,則可供條件選擇的屬性可能會較少,因為這些屬性必須在所有選定的動作中可用。 若要指定屬性,您必須將來源包含為前置詞。

屬性來源 描述 程式碼
環境 屬性與要求的環境相關聯,例如要求的網路來源或目前日期和時間。
@Environment
主體 屬性是指派給主體的自定義安全性屬性,例如使用者或企業應用程式(服務主體)。 @Principal
要求 屬性是動作要求的一部分,例如設定 Blob 索引標記。 @Request
資源 Attribute 是資源的 屬性,例如容器名稱。 @Resource

如需可在條件中使用的記憶體屬性完整清單,請參閱:

環境屬性

環境屬性會與提出存取要求的情況相關聯,例如一天中的日期和時間或網路環境。 網路環境可能是存取是透過特定私人端點或虛擬網路子網,或可能是透過任何私人連結。

下表列出條件支援的環境屬性。

Display name 描述 屬性 類型
這是私人連結1 在條件中使用這個屬性,要求存取任何私人連結。 isPrivateLink 布林值
私人端點1,2 在條件中使用這個屬性來限制特定私人端點的存取。 Microsoft.Network/privateEndpoints String
子網1,3 在條件中使用這個屬性來限制來自特定子網的存取。 Microsoft.Network/virtualNetworks/subnets String
目前的 UTC 在條件中使用這個屬性來限制在特定時段內對物件的存取。 UtcNow DateTime

1 對於複製作業, Is private linkPrivate endpointSubnet 屬性僅適用於目的地,例如記憶體帳戶,而不是來源。 如需套用至之複製作業的詳細資訊,請選取數據表中的每個屬性,以查看更多詳細數據。
2 如果您目前已在訂用帳戶中設定至少一個私人端點, Private endpoint 則只能使用 屬性。
3 如果您目前至少有一個虛擬網路子網使用訂用帳戶中設定的服務端點,您才能使用 Subnet 屬性。

主體屬性

主體屬性是指派給要求存取資源之安全性主體的自定義安全性屬性。 安全性主體可以是使用者或企業應用程式(服務主體)。

若要使用主體屬性,您必須具有下列專案:

如需自定義安全性屬性的詳細資訊,請參閱:

要求屬性

要求屬性與存取要求中指定的準則相關聯,例如要列出的 Blob 的指定前置詞。

資源屬性

資源屬性會與要求存取的對象相關聯,例如記憶體帳戶名稱、容器名稱,或是否為記憶體帳戶啟用階層命名空間。

函數運算子

本節列出可用來建構條件的函式運算子。

ActionMatches

屬性
運算子 ActionMatches
說明 檢查目前的動作是否符合指定的動作模式。
範例 ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
如果檢查的動作等於 「Microsoft」。儲存體/storageAccounts/blobServices/containers/blobs/read“,然後為 true

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
如果檢查的動作等於 「Microsoft.Authorization/roleAssignments/write」,則為 true

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
如果檢查的動作等於 「Microsoft.Authorization/roleAssignments/write」,則為 false

SubOperationMatches

屬性
運算子 SubOperationMatches
說明 檢查目前的子作業是否符合指定的子作業模式。
範例 SubOperationMatches{'Blob.List'}

Exists

屬性
運算子 Exists
說明 檢查指定的屬性是否存在。
範例 Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
屬性支援1 加密範圍名稱
快照式
版本識別碼

1 只有Exists視覺效果 ABAC 條件產生器中 Azure 入口網站 中的這些屬性才支援 運算符。 您可以使用 PowerShell、Azure CLIREST API 和 Azure 入口網站 中的條件程式代碼編輯器,將運算元新增Exists至任何屬性。

邏輯運算子

本節列出可用來建構條件的邏輯運算符。

屬性
運算子 AND
&&
說明 And 運算元。
範例 !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Or

屬性
運算子 OR
||
說明 Or 運算元。
範例 @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

屬性
運算子 NOT
!
說明 非或否定運算符。
範例 NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

布爾比較運算符

本節列出可用來建構條件的布爾比較運算符。

屬性
運算子 BoolEquals
BoolNotEquals
說明 布爾值比較。
範例 @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

字串比較運算符

本節列出可用來建構條件的字串比較運算符。

StringEquals

屬性
運算子 StringEquals
StringEqualsIgnoreCase
說明 區分大小寫(或不區分大小寫)比對。 這些值必須完全符合字串。
範例 @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

屬性
運算子 StringNotEquals
StringNotEqualsIgnoreCase
說明 StringEquals 否定 (或 StringEqualsIgnoreCase) 運算符。

StringStartsWith

屬性
運算子 StringStartsWith
StringStartsWithIgnoreCase
說明 區分大小寫(或不區分大小寫)比對。 值會以字串開頭。

StringNotStartsWith

屬性
運算子 StringNotStartsWith
StringNotStartsWithIgnoreCase
說明 StringStartsWith 否定 (或 StringStartsWithIgnoreCase) 運算符。

StringLike

屬性
運算子 StringLike
StringLikeIgnoreCase
說明 區分大小寫(或不區分大小寫)比對。 這些值可以包含多字元比對通配符 (*) 或字串中的任何位置的單一字元比對通配符 (?)。 如有需要,可以藉由新增反斜杠 \*\?來逸出這些字元。
範例 @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
如果 Resource[name1] 等於 “abcd”,則為 true

Resource[name1] StringLike 'A*C?'
如果 Resource[name1] 等於 “abcd”,則為 false

Resource[name1] StringLike 'a*c'
如果 Resource[name1] 等於 “abcd”,則為 false

StringNotLike

屬性
運算子 StringNotLike
StringNotLikeIgnoreCase
說明 StringLike 否定 (或 StringLikeIgnoreCase) 運算符。

數值比較運算子

本節列出可用來建構條件的數值比較運算符。

屬性
運算子 NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
說明 數位比對。 僅支援整數。

DateTime 比較運算符

本節列出可用來建構條件的日期/時間比較運算符。

屬性
運算子 DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
說明 格式為的完整精確度檢查: yyyy-mm-ddThh:mm:ss.mmmmmmmZ。 現在用於 Blob 版本識別碼、Blob 快照集和 UTC。
範例 @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

GUID 比較運算符

本節列出可用來建構條件的全域唯一標識符 (GUID) 比較運算符。

屬性
運算子 GuidEquals
GuidNotEquals
說明 與格式不區分大小寫的比對: 00000000-0000-0000-0000-000000000000。 用來識別資源,例如主體標識碼或角色定義標識碼。
範例

交叉產品比較運算符

本節列出可用來建構條件的交叉產品比較運算符。

ForAnyOfAnyValues

屬性
運算子 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
說明 如果左側至少有一個值符合右邊至少一個值的比較,則表達式會評估為 true。 格式為: ForAnyOfAnyValues:<BooleanFunction>。 支援多個字串和數位。
範例 @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
如果加密範圍名稱等於 validScope1validScope2,則為 true。

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

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

ForAllOfAnyValues

屬性
運算子 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
說明 如果左側的每個值都符合右側至少一個值的比較,則表達式會評估為 true。 格式為: ForAllOfAnyValues:<BooleanFunction>。 支援多個字串和數位。
範例 @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

屬性
運算子 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
說明 如果左側至少有一個值符合右側每個值的比較,則表達式會評估為 true。 格式為: ForAnyOfAllValues:<BooleanFunction>。 支援多個字串和數位。
範例 {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
true

ForAllOfAllValues

屬性
運算子 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
說明 如果左側的每個值都符合右側每個值的比較,則表達式會評估為 true。 格式為: ForAllOfAllValues:<BooleanFunction>。 支援多個字串和數位。
範例 {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
false

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

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

特殊字元

字元 描述
* 星號 * 代表可與運算符搭配 Like 使用的多字元通配符比對。 如有需要,您可以藉由新增反斜杠 \*來逸出星號。
? 問號 (?) 代表可與運算元搭配 Like 使用的單一字元通配符比對。 如有需要,您可以藉由新增反斜杠 \?來逸出問號。
$ 貨幣符號 ($) 用來協助劃定標記索引鍵。 在 Azure PowerShell 中,如果以雙引號 (“) 括住的字串包含貨幣符號,您必須以反引號 (') 作為前置詞。 例如: tags:Project<`$key_case_sensitive`$>

群組和優先順序

如果您的目標動作有三個或多個表達式,且表達式之間具有不同運算符,則評估順序模棱兩可。 您可以使用括號 () 來將表達式分組,並指定評估表達式的順序。 以括弧括住的表達式具有較高的優先順序。 例如,如果您有下列表達式:

a AND b OR c

您必須以下欄其中一種方式新增括號:

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

下一步