你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
排查 Azure 角色分配条件的问题(预览版)
重要
Azure ABAC 和 Azure 角色分配条件目前为预览版。 此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款。
症状 - 条件未强制实施
原因 1
安全主体在相同或更高的范围具有一个或多个角色分配。
解决方案 1
确保安全主体不存在多个对同一数据操作授予访问权限、导致不强制实施条件的角色分配(带有或不带有条件)。 有关评估逻辑的信息,请参阅 Azure RBAC 如何确定用户是否有权访问某个资源。
原因 2
你的角色分配包含多个授予权限的操作,并且你的条件不是以所有操作为目标。 例如,如果你有 /blobs/write
或 /blobs/add/action
数据操作,则可以创建 Blob。 如果你的角色分配包含这两个数据操作,并且你只在条件中以其中一个操作为目标,则该角色分配将授权创建 Blob,并绕过该条件。
解决方案 2
如果你的角色分配包含多个授予权限的操作,请确保以所有相关操作为目标。
原因 3
在角色分配中添加条件时,最多可能需要 5 分钟时间,该条件才会强制实施。 添加条件时,会向资源提供程序(例如 Microsoft.Storage)通知发生了更新。 资源提供程序将立即对其本地缓存进行更新,以确保使用最新的角色分配。 此过程将在 1 到 2 分钟内完成,但最长可能需要 5 分钟。
解决方法 3
等待 5 分钟,然后再次测试条件。
症状 - 添加条件时出现“条件无效”错误
尝试添加带有条件的角色分配时,出现如下所示的错误:
The given role assignment condition is invalid.
原因
条件的格式不正确。
解决方案
解决任何条件格式或语法问题。 或者,使用 Azure 门户中的视觉编辑器添加条件。
症状 - 添加条件时,主体未出现在属性源中
尝试添加带有条件的角色分配时,“主体”未出现在“属性源”列表中。
相反,你会看到以下消息:
若要使用主体(用户)属性,必须具有以下所有项: Azure AD Premium P1 或 P2 许可证、Azure AD 权限(如属性分配管理员角色)以及 Azure AD 中定义的自定义安全属性。
原因
你不符合先决条件。 若要使用主体属性,你必须具备以下所有条件:
- Azure AD Premium P1 或 P2 许可证
- 已登录用户的 Azure AD 权限,例如属性分配管理员角色
- Azure AD 中定义的自定义安全属性
重要
默认情况下,全局管理员和其他管理员角色无权读取、定义或分配自定义安全属性。
解决方案
打开“Azure Active Directory”>“概述”,并检查租户的许可证。
打开“Azure Active Directory”>“用户”>“用户名”>“分配的角色”并检查是否已为你分配“属性分配管理员”角色。 如果没有,请让你的 Azure AD 管理员为你分配此角色。 有关详细信息,请参阅为用户分配 Azure AD 角色。
打开“Azure Active Directory”>“自定义安全属性”,查看是否已定义自定义安全属性以及你有权访问哪些属性。 如果没有看到任何自定义安全属性,请让你的 Azure AD 管理员添加你可以管理的属性集。 有关详细信息,请参阅在 Azure AD 中管理对自定义安全属性的访问和在 Azure AD 中添加或停用自定义安全属性。
症状 - 使用 PIM 添加条件时,主体未出现在属性源中
使用 Azure AD Privileged Identity Management (PIM) 尝试添加带有条件的角色分配时,“主体”未出现在“属性源”列表中。
原因
PIM 目前不支持在角色分配条件中使用主体属性。
症状 - 使用 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 SubOperationMatches{'Blob.Read.WithTagConditions'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<`$key_case_sensitive`$>] StringEquals 'Cascade'))"
症状 - 使用 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 SubOperationMatches{'Blob.Read.WithTagConditions'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<\$key_case_sensitive\$>] StringEquals 'Cascade'))"
症状 - 在 Bash 中将条件字符串分配到变量时出错
尝试在 Bash 中将条件字符串分配到变量时出现 bash: !: event not found
消息。
原因
在 Bash 中,如果启用历史记录扩展,则可能会看到消息 bash: !: event not found
,因为有感叹号 (!)。
解决方案
使用命令 set +H
禁用历史记录扩展。 若要重新启用历史记录扩展,请使用 set -H
。
症状 - 使用 Azure CLI 添加条件时出现“无法识别参数”错误
尝试使用 Azure CLI 添加带有条件的角色分配时,出现如下所示的错误:
az: error: unrecognized arguments: --description {description} --condition {condition} --condition-version 2.0
原因
你可能正在使用早期版本的 Azure CLI,该版本不支持角色分配条件参数。
解决方案
更新到最新的 Azure CLI 版本(2.18 或更高版本)。 有关详细信息,请参阅安装 Azure CLI。
症状 - 视觉编辑器中无法识别条件
使用代码编辑器后,切换到视觉编辑器时出现如下所示的消息:
The current expression cannot be recognized. Switch to the code editor to edit the expression or delete the expression and add a new one.
原因
更新了该条件,使得视觉编辑器无法对其进行分析。
解决方案
解决任何条件格式或语法问题。 或者,可以删除该条件,然后重试。
症状 - 复制并粘贴条件时出错
原因
如果从某个文档复制条件,复制的内容可能会包含特殊字符,因而导致出错。 某些编辑器(例如 Microsoft Word)在设置文本格式时,会添加一些隐藏的控制字符。
解决方案
如果从富文本编辑器中复制了一个条件并且确定该条件是正确的,请删除所有空格并返回,然后重新添加相关的空格。 也可使用纯文本编辑器或代码编辑器,例如 Visual Studio Code。