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'
)
)
如何評估條件
如果使用者嘗試在不是 <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,條件可以包含您要允許的多個動作。 如果您針對單一條件選取多個動作,可能會因為屬性必須可在所有選取的動作上使用,因而使能為條件選擇的屬性變少。
(
(
!(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 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)