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 記憶體或佇列記憶體數據動作的內建或自定義角色指派。 其中包括下列內建角色:
如需可在條件中使用的記憶體動作清單,請參閱:
- Azure Blob 儲存體的 Azure 角色指派條件的動作和屬性 (機器翻譯)
- Azure 佇列 儲存體 Azure 角色指派條件的動作和屬性。
屬性
視選取的動作而定,屬性可能會在不同的位置找到。 如果您針對單一條件選取多個動作,則可供條件選擇的屬性可能會較少,因為這些屬性必須在所有選定的動作中可用。 若要指定屬性,您必須將來源包含為前置詞。
屬性來源 | 描述 | 程式碼 |
---|---|---|
環境 | 屬性與要求的環境相關聯,例如要求的網路來源或目前日期和時間。 |
@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 link
、 Private endpoint
和 Subnet
屬性僅適用於目的地,例如記憶體帳戶,而不是來源。 如需套用至之複製作業的詳細資訊,請選取數據表中的每個屬性,以查看更多詳細數據。
2 如果您目前已在訂用帳戶中設定至少一個私人端點, Private endpoint
則只能使用 屬性。
3 如果您目前至少有一個虛擬網路子網使用訂用帳戶中設定的服務端點,您才能使用 Subnet
屬性。
主體屬性
主體屬性是指派給要求存取資源之安全性主體的自定義安全性屬性。 安全性主體可以是使用者或企業應用程式(服務主體)。
若要使用主體屬性,您必須具有下列專案:
- 登入使用者的 Microsoft Entra 許可權,例如屬性指派 管理員 istrator 角色
- Microsoft Entra ID 中定義的自定義安全性屬性
如需自定義安全性屬性的詳細資訊,請參閱:
要求屬性
要求屬性與存取要求中指定的準則相關聯,例如要列出的 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 CLI、REST 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'} 如果加密範圍名稱等於 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)