分享方式:


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
資源 屬性是資源的屬性,例如容器名稱。 @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 屬性。

主體屬性

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

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

  • 已登入使用者的 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 運算子新增至任何屬性,例如 PowerShellAzure CLIREST 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'}
如果加密範圍名稱等於 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)

下一步