排查 Azure 角色分配条件的问题(预览版)

重要

Azure ABAC 和 Azure 角色分配条件目前为预览版。 此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 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 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 @Request[subOperation] ForAnyOfAnyValues:StringEqualsIgnoreCase {'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 @Request[subOperation] ForAnyOfAnyValues:StringEqualsIgnoreCase {'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)在设置文本格式时,会添加一些隐藏的控制字符。

解决方案

如果你确定条件正确,请删除所有空格和回车符,然后重新添加相关的空格。

后续步骤