你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
常见问题
故障描述 - 条件未执行
原因 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
编辑条件以匹配以下模板模式之一。
模板 | 条件 |
---|---|
约束角色 | 示例:约束角色 |
约束角色和主体类型 | 示例:约束角色和主体类型 |
约束角色和主体 | 示例:约束角色和特定组 |
允许所有角色,但某些角色除外 | 示例:允许大多数角色,但不允许其他人分配角色 |
解决方案 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 中自定义安全属性的访问。
重要
默认情况下,全局管理员和其他管理员角色无权读取、定义或分配自定义安全属性。
如果尚未定义自定义安全属性,请在租户范围内分配 属性定义管理员 角色并添加自定义安全属性。 有关详细信息,请参阅 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 Blob 存储的 Azure 角色分配条件的操作和属性 和 用于 Azure 队列的 Azure 角色分配条件的操作和属性。
解决方案 2
在 “生成表达式 ”部分中,选择应用于当前所选作的属性。 有关每个存储操作支持的存储属性的列表,请参阅 用于 Azure Blob 存储的 Azure 角色分配条件的操作和属性 以及 用于 Azure 队列的 Azure 角色分配条件的操作和属性。
故障描述 - 属性在此上下文警告中不适用
在代码编辑器中进行编辑,然后切换到视觉编辑器时,会收到以下消息,并删除以前选择的属性:
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
原因
你已选择了多个操作为目标,并且没有任何属性适用于当前选定的所有操作。
解决方案
在添加操作部分,选择要面向的较少操作。 若要针对已删除的操作,请添加多个条件。
症状 - 找不到角色定义 ID
尝试添加表达式时,会收到以下消息:
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.
原因
您尝试为角色定义 ID 属性添加的一个或多个角色定义 ID 未找到,或格式不符合正确的 GUID 标准:00000000-0000-0000-0000-000000000000
。
解决方案
使用条件编辑器选择角色。 如果最近添加了自定义角色,请刷新页面或注销并再次登录。
症状 - 找不到主体 ID
尝试添加表达式时,会收到以下消息:
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.
原因
找不到尝试为主体 ID 属性添加的一个或多个主体 ID,或者它们没有正确的 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.
解决方案
如果您从富文本编辑器中复制了一个条件,并且确信条件是正确的,请删除所有空格和换行符,然后再添加回相关空格。 或者,使用纯文本编辑器或代码编辑器,如 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
。
API 中的错误消息
症状 - 删除角色分配时 HTTP 403 禁止响应
考虑具有修改角色分配的授权权限的主体,授权权限还包括 ABAC 条件。 如果主体尝试删除已删除或不存在的角色分配,则会接收 HTTP 403 Forbidden
响应而不是预期的 HTTP 204 No Content
响应。
原因
当主体具有包含 ABAC 条件的权限时,系统将尝试在条件评估期间读取属性。 如果该属性不存在,则可能会导致意外响应,而不是预期结果。
解决方案
处理包含条件的授权权限的响应时,还应处理 403 Forbidden
响应。 响应 403 Forbidden
可能指示权限不足、角色分配已被删除或角色分配不存在。