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 儲存體或佇列儲存體資料動作的內建或自訂角色指派。 其中包括下列內建角色:

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

屬性

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

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

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

環境屬性

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

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

顯示名稱 描述 屬性 類型
是私人連結1 在條件中使用此屬性,以要求透過任何私人連結的存取。 isPrivateLink 布林值
私人端點1,2 在條件中使用此屬性,以限制透過特定私人端點的存取。 Microsoft.Network/privateEndpoints String
子網路1,3 在條件中使用此屬性,以限制從特定子網路的存取。 Microsoft.Network/virtualNetworks/subnets String
目前的 UTC 在條件中使用此屬性,以限制特定時段期間對物件的存取。 UtcNow DateTime

1 針對複製作業,Is private link、Private endpoint 和 Subnet 屬性只會套用至目的地 (例如記憶體帳戶),而不是來源。 如需套用此項目之複製作業的詳細資訊,請選取表格中的每個屬性,以查看更多詳細資料。
2 如果您目前至少已在訂用帳戶中設定一個私人端點,則只能使用 Private endpoint 屬性。
3 如果您目前至少已在訂用帳戶中設定一個使用Subnet的虛擬網路子網路,則只能使用 屬性。

主體屬性

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

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

  • 已登入使用者的 Microsoft Entra 權限,例如屬性指派系統管理員角色
  • Microsoft Entra ID 中所定義的自訂安全性屬性

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

要求屬性

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

資源屬性

資源屬性與將對其要求存取的物件相關聯,例如儲存體帳戶名稱、容器名稱,或是否針對儲存體帳戶啟用階層命名空間。

函式運算子

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

ActionMatches

屬性 值
運算子 ActionMatches
說明 檢查目前的動作是否符合指定的動作模式。
範例 ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
如果檢查的動作等於 "Microsoft.Storage/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 在 Azure 入口網站中,只有視覺效果 ABAC 條件建立器中的這些屬性才支援 Exists 運算子。 您可以使用其他工具來將 Exists 運算子新增至任何屬性,例如 PowerShell、Azure CLI、REST API,以及 Azure 入口網站中的條件程式碼編輯器。

邏輯運算子

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

且

屬性 值
運算子 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 或邏輯非 (negation) 運算子。
範例 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
說明 數字比對 僅支援整數。

日期時間比較運算子

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

屬性 值
運算子 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'}
如果加密範圍名稱等於 validScope1 或 validScope2,則為 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)

下一步