對 Azure 角色指派條件進行疑難排解
一般問題
徵兆 - 未強制執行條件
原因 1
安全性主體在相同或更高範圍中具有一或多個角色指派。
解決方案 1
請確定安全性主體沒有多個角色指派(具有或沒有條件),可授與相同數據動作的存取權,而導致條件無法強制執行。 如需評估邏輯的相關信息,請參閱 Azure RBAC 如何判斷使用者是否可以存取資源。
原因 2
您的角色指派有多個動作可授與許可權,而您的條件不會以所有動作為目標。 例如,如果您有 /blobs/write
或 /blobs/add/action
數據動作,您可以建立 Blob。 如果您的角色指派同時具有數據動作,而且您只以條件中的其中一個為目標,則角色指派會授與建立 Blob 的許可權,並略過條件。
解決方案 2
如果您的角色指派有多個授與許可權的動作,請確定您以所有相關動作為目標。
原因 3
當您將條件新增至角色指派時,最多可能需要 5 分鐘才能強制執行條件。 當您新增條件時,會通知資源提供者(例如 Microsoft 儲存體)。 資源提供者會立即更新其本機快取,以確保他們具有最新的角色指派。 此程式會在 1 或 2 分鐘內完成,但最多可能需要 5 分鐘的時間。
解決方案3
等候 5 分鐘,然後再次測試條件。
徵兆 - 新增條件時條件無效的錯誤
當您嘗試新增條件的角色指派時,您會收到類似下列的錯誤:
The given role assignment condition is invalid.
原因 1
屬性 conditionVersion
會設定為 「1.0」。。
解決方案 1
將屬性設定 conditionVersion
為 「2.0」。。
原因 2
您的條件格式不正確。
解決方案 2
修正任何 條件格式或語法 問題。 或者,使用 Azure 入口網站 中的可視化編輯器新增條件。
可視化編輯器中的問題
徵兆 - 編輯條件時會出現條件編輯器
您已使用將 Azure 角色指派管理委派給具有條件的其他人中所述 的範本來建立條件。 當您嘗試編輯條件時,您會看到進階條件編輯器。
當您先前編輯條件時,您使用條件範本進行編輯。
原因
條件不符合範本的模式。
解決方案 1
編輯條件以符合下列其中一個範本模式。
範本 | Condition |
---|---|
限制角色 | 範例:限制角色 |
限制角色和主體類型 | 範例:限制角色和主體類型 |
限制角色和主體 | 範例:限制角色和特定群組 |
允許特定角色以外的所有角色 | 範例:允許大部分角色,但不允許其他人指派角色 |
解決方案 2
刪除條件,然後使用將 Azure 角色指派管理委派給有條件的其他人員中的步驟加以重新建立。
徵兆 - 主體不會出現在屬性來源中
當您嘗試新增條件的角色指派時, 主體 不會出現在 屬性來源 清單中。
相反地,您會看到訊息:
To use principal (user) attributes, you must have Microsoft Entra permissions (such as the [Attribute Assignment Administrator](../active-directory/roles/permissions-reference.md#attribute-assignment-administrator) role) and custom security attributes defined in Microsoft Entra ID.
原因
您不符合必要條件。 若要使用主體屬性,您必須具有下列專案:
- 登入使用者的 Microsoft Entra 許可權,可讀取至少一個屬性集
- Microsoft Entra ID 中定義的自定義安全性屬性
方案
開啟 Microsoft Entra ID>自定義安全性屬性。
如果您看到 [開始使用] 頁面,您沒有許可權讀取至少一個屬性集或尚未定義自定義安全性屬性。
如果已定義自定義安全性屬性,請在租用戶範圍或屬性集範圍指派下列其中一個角色。 如需詳細資訊,請參閱 管理 Microsoft Entra ID 中自定義安全性屬性的存取權。
重要
根據預設,全域 管理員 istrator 和其他系統管理員角色沒有讀取、定義或指派自定義安全性屬性的許可權。
如果尚未定義自定義安全性屬性,請在租用戶範圍指派屬性定義 管理員 istrator 角色,並新增自定義安全性屬性。 如需詳細資訊,請參閱 在 Microsoft Entra ID 中新增或停用自定義安全性屬性。
完成時,您應該能夠讀取至少一個屬性集。
當您新增具有條件的角色指派時,主體 現在應該會出現在 [屬性來源 ] 清單中。
徵兆 - 使用 PIM 時,主體不會出現在屬性來源中
當您嘗試使用 Microsoft Entra Privileged Identity Management (PIM) 的條件新增角色指派時, 主體 不會出現在 [屬性來源 ] 清單中。
原因
PIM 目前不支援在角色指派條件中使用主體屬性。
可視化編輯器中的錯誤訊息
徵兆 - 無法辨識條件
使用程式代碼編輯器之後,您可以切換至可視化編輯器,並取得類似下列的訊息:
The current expression cannot be recognized. Switch to the code editor to edit the expression or delete the expression and add a new one.
原因
已對可視化編輯器無法剖析的條件進行 更新。
方案
修正任何 條件格式或語法 問題。 或者,您可以刪除條件,然後再試一次。
徵兆 - 屬性不適用於先前儲存條件的錯誤
當您在視覺化編輯器開啟先前儲存的條件時,會收到下列訊息:
Attribute does not apply for the selected actions. Select a different set of actions.
原因
在 2022 年 5 月,讀取 Blob 動作已從下列格式變更:
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
若要排除 Blob.List
子操作:
!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})
如果您在 2022 年 5 月之前建立了具有讀取 Blob 動作的條件,您可能會在可視化編輯器中看到此錯誤訊息。
方案
開啟 [ 選取動作 ] 窗格,然後重新選取 [讀取 Blob ] 動作。
徵兆 - 屬性未套用錯誤
當您使用現有的表示式在可視化編輯器中選取一或多個動作時,您會收到下列訊息,並移除先前選取的屬性:
Attribute does not apply for the selected actions. Select a different set of actions.
原因
先前選取的屬性不再套用至目前選取的動作。
解決方案 1
在 [ 新增動作] 區段中,選取套用至所選屬性的動作。 如需每個記憶體屬性支援的記憶體動作清單,請參閱 Azure 角色指派條件的動作和屬性,以取得適用於 Azure 佇列之 Azure 角色指派條件的 Azure Blob 儲存體 和動作和屬性。
解決方案 2
在 [ 建置表達式] 區段中,選取套用至目前選取動作的屬性。 如需每個記憶體動作支援的記憶體屬性清單,請參閱 Azure 角色指派條件的動作和屬性,以取得 azure 佇列的 azure 角色指派條件 Azure Blob 儲存體 和動作和屬性。
徵兆 - 屬性不適用於此內容警告
當您在程式代碼編輯器中進行編輯,然後切換至可視化編輯器時,您會收到下列訊息,並移除先前選取的屬性:
Attribute does not apply in this context. Use a different role assignment scope or remove the expression.
原因
目前範圍中無法使用指定的屬性,例如 Version ID
在已啟用階層命名空間的記憶體帳戶中使用 。
方案
如果您想要使用目前指定的屬性,請在不同的範圍建立角色指派條件,例如資源群組範圍。 或者,使用目前選取的動作移除並重新建立表達式。
徵兆 - 無法辨識屬性錯誤
當您在程式代碼編輯器中進行編輯,然後切換至可視化編輯器時,您會收到下列訊息,並移除先前選取的屬性:
Attribute is not recognized. Select a valid attribute or remove the expression.
原因
無法辨識指定的屬性,可能是因為錯字。
方案
在程式代碼編輯器中,修正錯字。 或移除現有的表達式,並使用可視化編輯器來選取屬性。
徵兆 - 屬性值無效錯誤
當您在程式代碼編輯器中進行編輯,然後切換至可視化編輯器時,您會收到下列訊息,並移除先前選取的屬性:
Attribute value is invalid. Select another attribute or value.
原因
表達式的右側包含無效的屬性或值。
方案
使用可視化編輯器來選取屬性或指定值。
徵兆 - 未選取動作錯誤
當您移除視覺化編輯器中的所有動作時,會收到下列訊息:
No actions selected. Select one or more actions to edit expressions.
原因
有現有的表達式,但尚未選取任何動作作為目標。
方案
在 [ 新增動作] 區 段中,新增表達式應該以為目標的一或多個動作。
徵兆 - 沒有可用的選項錯誤
當您嘗試新增表達式時,會收到下列訊息:
No options available
原因
您選取以多個動作為目標,而且沒有任何屬性會套用至所有目前選取的動作。
方案
在 [ 新增動作] 區段中,選取要鎖定的動作較少。 若要以您移除的動作為目標,請新增多個條件。
徵兆 - 找不到角色定義標識碼
當您嘗試新增表達式時,會收到下列訊息:
Cannot find built-in or custom role definitions with IDs: <role IDs>. These IDs were removed. Check that the IDs are valid and try to add again. You can also refresh the page or sign out and sign in again.
原因
找不到您嘗試為角色定義標識符屬性新增的一或多個角色定義標識碼,或沒有正確的 GUID 格式:00000000-0000-0000-0000-000000000000
。
方案
使用條件編輯器來選取角色。 如果您最近新增自定義角色,請重新整理頁面或註銷並重新登入。
徵兆 - 找不到主體標識碼
當您嘗試新增表達式時,會收到下列訊息:
Cannot find users, groups, or service principals in Azure Active Directory with principal IDs: <principal IDs>. These IDs were removed. Check that the IDs are valid and try to add again. You can also refresh the page or sign out and sign in again.
原因
找不到您嘗試為主體標識碼屬性新增的一或多個主體標識碼,或沒有正確的 GUID 格式:00000000-0000-0000-0000-000000000000
。
方案
使用條件編輯器來選取主體。 如果您最近新增主體,請重新整理頁面或註銷並重新登入。
Azure PowerShell 中的錯誤訊息
徵兆 - 資源屬性無效錯誤
當您嘗試使用 Azure PowerShell 搭配條件新增角色指派時,您會收到類似下列的錯誤:
New-AzRoleAssignment : Resource attribute
Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$> is not valid.
原因
如果您的條件包含貨幣符號 ($),您必須以反引號 (') 作為前置詞。
方案
在每一個貨幣符號之前新增一個倒號(')。 下列為範例。 如需 PowerShell 中引號規則的詳細資訊,請參閱關於引號規則。
$condition = "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade'))"
徵兆 - 複製和貼上條件時發生錯誤
原因
如果您使用PowerShell並從檔案複製條件,它可能包含造成下列錯誤的特殊字元。 某些編輯器(例如 Microsoft Word)在格式化未出現的文字時新增控制字元。
The given role assignment condition is invalid.
方案
如果您從 RTF 編輯器複製條件,而且您確定條件正確,請刪除所有空格並傳回 ,然後重新新增相關的空格。 或者,使用純文本編輯器或程式碼編輯器,例如Visual Studio Code。
Azure CLI 中的錯誤訊息
徵兆 - 資源屬性無效錯誤
當您嘗試使用 Azure CLI 搭配條件新增角色指派時,您會收到類似下列的錯誤:
Resource attribute Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$> is not valid.
原因
如果您的條件包含貨幣符號 ($),您必須以反斜杠 (\) 作為前置詞。
方案
在每個美元符號之前新增反斜杠(\)。 下列為範例。 如需 Bash 中引號規則的詳細資訊,請參閱雙引號。
condition="((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<\$key_case_sensitive\$>] StringEquals 'Cascade'))"
徵兆 - 無法辨識的自變數錯誤
當您嘗試使用 Azure CLI 搭配條件新增角色指派時,您會收到類似下列的錯誤:
az: error: unrecognized arguments: --description {description} --condition {condition} --condition-version 2.0
原因
您可能使用不支援角色指派條件參數的舊版 Azure CLI。
方案
更新至最新版的 Azure CLI (2.18 或更新版本)。 如需詳細資訊,請參閱 安裝 Azure CLI。
徵兆 - 將條件字串指派給Bash中的變數時發生錯誤
當您嘗試將條件字串指派給Bash中的變數時,您會收到 bash: !: event not found
訊息。
原因
在 Bash 中,如果已啟用歷程記錄展開,您可能會看到此訊息 bash: !: event not found
,因為有驚嘆號 (!)。
方案
使用 命令 set +H
停用歷程記錄擴充。 若要重新啟用歷程記錄展開,請使用 set -H
。