Azure 容器注册表(ACR)支持 Microsoft Entra 属性基于的访问控制(ABAC) 来管理存储库权限。
此功能通过对容器注册表存储库启用更精细的权限管理来增强安全性。
ABAC 基于Microsoft Entra 基于角色的访问控制(RBAC)构建,方法是在角色分配中引入特定于存储库的条件。
ABAC 旨在通过 Microsoft Entra 基于角色的访问控制(RBAC)、Microsoft Entra 角色分配和Microsoft Entra 标识来管理存储库权限。
若要在不Microsoft Entra 的情况下管理存储库权限,请改用 非Microsoft基于 Entra 令牌的存储库权限 。
若要使用 Microsoft Entra ABAC 管理存储库权限,请确保注册表角色分配权限模式设置为“RBAC 注册表 + ABAC 存储库权限”。通过此模式,可以使用具有可选 ABAC 条件的 RBAC 角色分配(使用 ACR 内置角色)将角色分配限定为特定存储库。
可以在创建注册表期间或通过更新现有注册表来配置注册表的角色分配权限模式。
可以通过 Azure 门户或 Azure CLI 完成此角色分配。
无论其 SKU 如何,都可以为任何注册表启用 ABAC。
注释
确保已安装最新版本的 Azure CLI,方法是运行 Azure CLI 命令 az upgrade。
此外,如果以前曾参与过此功能的专用预览版,则可能已安装自定义的专用预览版扩展来管理 ACR ABAC。
不再需要此自定义扩展,应通过运行 Azure CLI 命令 az extension remove --name acrabac卸载(以避免冲突)。
对现有角色分配的影响
重要
如果将存储库配置为使用“RBAC 存储库 + ABAC 仓库权限”,则一些现有角色分配不会被尊重,因为对启用 ABAC 的存储库适用不同的 ACR 内置角色集。
例如,在启用 ABAC 的注册表中,AcrPull、AcrPush 和 AcrDelete 角色不被承认。
相反,在已启用 ABAC 的注册表中,使用Container Registry Repository ReaderContainer Registry Repository Writer和Container Registry Repository Contributor角色授予注册表范围或特定于存储库的映像权限。
有关基于方案的角色和注册表角色分配权限模式的详细信息,请参阅 ACR 内置角色的方案。
或者,有关每个角色的深入说明,请参阅 ACR 内置角色参考 。
创建启用了 ABAC 的注册表
运行 az acr create 时,使用 --role-assignment-mode 参数来设置注册表角色分配权限模式。
- 可以指定
rbac-abac 使用新的“RBAC 注册表 + ABAC 存储库权限”模式创建注册表,该模式允许将具有可选Microsoft Entra ABAC 条件的 RBAC 角色分配用于将角色分配限定为特定存储库。
- 还可以指定
rbac 创建具有较旧“RBAC 注册表权限”模式的注册表,该模式仅支持没有 ABAC 条件的 RBAC 角色分配。
若要使用“RBAC 注册表 + ABAC 存储库权限”创建已启用 ABAC 的注册表,请运行以下命令:
az acr create --name <registry-name> --resource-group <resource-group> --sku <sku> --role-assignment-mode 'rbac-abac' --location <location>
更新现有注册表以启用 ABAC
若要查看注册表的现有角色分配权限模式,请导航到注册表的“属性”边栏选项卡。
当前角色分配权限模式显示在“角色分配权限模式”字段中。
若要更新现有注册表的“角色分配权限模式”,请选择“RBAC 注册表 + ABAC 存储库权限”,然后单击“保存”以更新注册表。
在运行az acr update时,使用--role-assignment-mode参数设置注册表角色分配权限模式。
- 可以指定
rbac-abac 将注册表更新为新的“RBAC 注册表 + ABAC 存储库权限”权限模式,该模式允许将具有可选 ABAC 条件的 RBAC 角色分配用于将角色分配限定为特定存储库。
- 还可以指定
rbac 将注册表更新回旧的“RBAC 注册表权限”模式,该模式仅支持没有 ABAC 条件的 RBAC 角色分配。
若要显示注册表的当前角色分配权限模式,请运行以下命令:
az acr show --name <registry-name> --resource-group <resource-group> --query "roleAssignmentMode"
若要将现有注册表更新为“RBAC 注册表 + ABAC 存储库权限”,请运行以下命令:
az acr update --name <registry-name> --resource-group <resource-group> --role-assignment-mode 'rbac-abac'
分配 Microsoft Entra ABAC 存储库权限
可以使用 Azure 门户或 Azure CLI 将 Microsoft Entra ABAC 条件应用于角色分配,以限定在特定的存储库内。
本部分提供了有关如何为特定存储库、存储库前缀(通配符)或多个存储库前缀(多个通配符)添加 ABAC 条件的示例。
已启用 ABAC 的内置角色
以下 ACR 内置角色是已启用 ABAC 的角色。
可以将可选的 ABAC 条件指定为以下角色,以选择性地将角色分配范围限定为特定存储库。
Container Registry Repository Reader - 已启用 ABAC 的角色,授予对容器注册表中存储库内映像、标记和元数据的读取权限。
Container Registry Repository Writer - 已启用 ABAC 的角色,授予对容器注册表中存储库内映像、标记和元数据的读取、写入和更新权限。
Container Registry Repository Contributor - 启用 ABAC 的角色,授予在注册表存储库中 读取、写入、更新和删除 镜像、标签和元数据的权限。
请注意,这些角色不支持列出注册表中的存储库的目录列表权限。
若要列出注册表中的所有存储库(不授予读取存储库内容的权限),必须额外分配 Container Registry Repository Catalog Lister 角色。
此单独的角色 不支持 ABAC 条件 ,并且始终有权 列出注册表中的所有存储库 。
重要
如果在没有 ABAC 条件的情况下分配启用了 ABAC 的角色,则角色分配的范围不会限定为存储库。
这意味着,没有 ABAC 条件的角色分配将被视为注册表范围的角色分配,并授予对注册表中的所有存储库的权限。
若要将角色分配限定为特定存储库,必须在分配已启用 ABAC 的角色时包含 ABAC 条件。
有关基于方案的角色和注册表角色分配权限模式的详细信息,请参阅 ACR 内置角色的方案。
或者,有关每个角色的深入说明,请参阅 ACR 内置角色参考 。
将角色分配的范围限定为特定存储库
在此示例中,我们分配角色 Container Registry Repository Reader 以向单个存储库授予拉取权限。
通过添加 ABAC 条件,此角色分配允许标识仅从指定的存储库拉取映像、查看标记和读取元数据,从而阻止访问注册表中的其他存储库。
导航到注册表的“访问控制(IAM)”边栏选项卡。 单击“添加”,然后选择“添加角色分配”。
选择 Container Registry Repository Reader 为角色。
然后选择一个身份以分配角色。
之后,继续转到“条件”选项卡。选择“添加条件”按钮以添加新的 ABAC 条件以限制角色分配范围。
在 ABAC 条件生成器中选择“视觉对象”编辑器选项。
选择要在此存储库范围的角色分配中授予的操作(权限)。
对于大多数用例,请选择属于您之前选择的角色的所有操作(权限),确保身份只能在存储库范围内执行这些操作。
添加 ABAC 条件的表达式,以将角色分配限制为特定存储库。
为表达式配置以下选项,将 ABAC 条件限定为特定存储库:
- 属性源:
Request
- 属性:
Repository name
- 运算符:
StringEqualsIgnoreCase
- 值:
<repository-name> - 存储库的全名。
- 例如,如果完整存储库名称为
nginx,请输入 nginx。
- 如果完整存储库名称为
backend/nginx,请输入 backend/nginx。
单击“保存”以保存 ABAC 条件。
查看角色分配 ABAC 条件。
评审页包含 ABAC 条件的代码表达式,该表达式可用于使用 Azure CLI 通过同一 ABAC 条件执行相同的角色分配。
单击“查看 + 分配”来执行角色分配。
创建角色分配后,可以查看、编辑或删除角色分配。
导航到注册表的“访问控制(IAM)”,然后选择“角色分配”选项卡以查看适用于注册表的现有角色分配列表。
若要添加一项角色分配,其中 ABAC 条件限定于特定存储库,请使用 az role assignment create。
az role assignment create 命令包含以下与 ABAC 条件相关的参数。
| 参数 |
类型 |
DESCRIPTION |
role |
字符串 |
要分配的角色的 ID 的名称,例如 Container Registry Repository Reader。 |
scope |
字符串 |
注册表的完整资源 ID。 此参数应该是注册表资源 ID(没有存储库名称),即使角色分配的范围限定为特定存储库,格式也是如此 /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.ContainerRegistry/registries/{registry-name}。 还可以指定资源组或订阅范围,以跨资源组或订阅中的所有注册表执行此角色分配。 |
assignee |
字符串 |
要向其分配角色的 Microsoft Entra 标识的电子邮件地址或对象 ID。 例如,可以为用户被分配者指定 user@contoso.com 。 还可以指定标识的对象 ID。 |
assignee-object-id |
字符串 |
如果权限不足,请使用此参数而不是“--assignee”来绕过图形 API 调用。 此参数仅适用于用户、组、服务主体和托管标识的对象 ID。 对于托管标识,请使用主体 ID。 对于服务主体,请使用对象 ID,而不是应用程序 ID。 |
description |
字符串 |
角色分配的说明,以帮助确定角色分配的目的。 此参数是可选的。 |
condition |
字符串 |
定义角色分配的 ABAC 条件的代码表达式。 |
condition-version |
字符串 |
条件语法的版本。 如果指定了--condition而未指定--condition-version,则版本设置为默认值2.0。 |
ACR 团队建议使用 Azure 门户角色分配体验中的视觉编辑器为 ABAC 条件创建表达式。
对 ABAC 条件使用以下表达式将角色分配限制到存储库 nginx:
(
(
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/content/read'})
AND
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/metadata/read'})
)
OR
(
@Request[Microsoft.ContainerRegistry/registries/repositories:name] StringEqualsIgnoreCase 'nginx'
)
)
可以将此 ABAC 条件存储到一个名为 condition 的 shell 变量中,以供 az role assignment create 命令使用。
condition=$(cat <<'EOF' | tr -d '\n'
(
(
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/content/read'})
AND
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/metadata/read'})
)
OR
(
@Request[Microsoft.ContainerRegistry/registries/repositories:name] StringEqualsIgnoreCase 'nginx'
)
)
EOF
)
可以检查 condition 变量以验证它是否正确。
确保在使用condition变量时使用双引号 (")。
echo "$condition"
在执行角色分配之前,还必须查询参数的 --scope 注册表资源 ID。
参数 --scope 应始终是注册表资源 ID(没有存储库名称),即使角色分配范围限定为特定存储库。
还可以指定资源组或订阅范围,以跨资源组或订阅中的所有注册表执行此角色分配。
scope=$(az acr show --name <registry-name> --resource-group <resource-group> --query "id" -o tsv)
最后,若要执行角色分配,请运行以下命令:
az role assignment create \
--role "Container Registry Repository Reader" \
--scope "$scope" \
--assignee "user@contoso.com" \
--description "Read access to a specific repository" \
--condition "$condition" \
--condition-version "2.0"
下面显示了输出示例:
{
"canDelegate": null,
"condition": "( ( !(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/content/read'}) AND !(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/metadata/read'}) ) OR ( @Request[Microsoft.ContainerRegistry/registries/repositories:name] StringEqualsIgnoreCase 'nginx' ))",
"conditionVersion": "2.0",
"description": "{description}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
"name": "{roleAssignmentId}",
"principalId": "{userObjectId}",
"principalType": "User",
"resourceGroup": "{resourceGroup}",
"roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
"scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.ContainerRegistry/registries/{registryName}",
"type": "Microsoft.Authorization/roleAssignments"
}
若要更新或删除角色分配,可以使用 az role assignment update 或 az role assignment delete。
使用存储库前缀(通配符)将角色分配范围限定为多个存储库
在此示例中,我们分配角色 Container Registry Repository Reader 以向具有通用前缀(通配符)的多个存储库授予拉取权限。
通过添加 ABAC 条件,此角色分配允许标识仅从具有公共前缀的存储库拉取映像、查看标记和读取元数据,从而阻止访问注册表中的其他存储库。
如果已按照上述示例将 Container Registry Repository Reader 角色分配给特定存储库,则必须删除该角色分配(导航到“访问控制(IAM)”边栏选项卡并选择“角色分配”选项卡),然后创建一个范围限定为存储库前缀的具有 ABAC 条件的新角色分配。
按照 与上一示例中 相同的步骤,使用 ABAC 条件执行角色分配。
在为 ABAC 条件添加表达式的步骤中,配置 ABAC 条件的表达式,以将角色分配范围限定为具有通用前缀(通配符)的多个存储库。
配置以下选项:
- 属性源:
Request
- 属性:
Repository name
- 运算符:
StringStartsWithIgnoreCase
- 值:
<repository-prefix> - 存储库的前缀,包括尾部斜杠 /。
- 例如,若要向具有前缀
backend/的所有存储库授予权限,例如backend/nginx,请输入backend/redisbackend/。
- 若要向具有前缀
frontend/js/的所有存储库授予权限,例如frontend/js/react,请输入frontend/js/vuefrontend/js/。
重要
ABAC 条件表达式的 Value 字段中需要使用尾随左斜线 /。
如果未包含尾部斜杠 /,则可能无意中向与前缀不匹配的其他存储库授予权限。
例如,如果输入backend时省略尾部斜杠/,则角色分配会向具有前缀backend的所有存储库(例如backend/nginx、backend/redis、backend-infra/k8s、backend-backup/store、backend和backendsvc/containers)授予权限。
单击“保存”以保存 ABAC 条件。
查看角色分配 ABAC 条件。
评审页包含 ABAC 条件的代码表达式,该表达式可用于使用 Azure CLI 通过同一 ABAC 条件执行相同的角色分配。
单击“查看 + 分配”来执行角色分配。
创建角色分配后,可以查看、编辑或删除角色分配。
导航到注册表的“访问控制(IAM)”,然后选择“角色分配”选项卡以查看适用于注册表的现有角色分配列表。
如果按照前面的示例将角色分配给 Container Registry Repository Reader 特定存储库,则必须先删除该角色分配(使用 az role assignment delete),然后才能创建一个新角色分配,该角色分配的 ABAC 条件限定于存储库前缀。
要添加一个前缀下范围限定为多个存储库的具有 ABAC 条件的角色分配,请使用 az role assignment create。
ACR 团队建议使用 Azure 门户角色分配体验中的视觉编辑器为 ABAC 条件创建表达式。
对 ABAC 条件使用以下表达式将角色分配限制到存储库 nginx:
(
(
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/content/read'})
AND
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/metadata/read'})
)
OR
(
@Request[Microsoft.ContainerRegistry/registries/repositories:name] StringStartsWithIgnoreCase 'backend/'
)
)
可以将此 ABAC 条件存储到 shell 变量 condition 中,以便在 az role assignment create 命令中使用。
condition=$(cat <<'EOF' | tr -d '\n'
(
(
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/content/read'})
AND
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/metadata/read'})
)
OR
(
@Request[Microsoft.ContainerRegistry/registries/repositories:name] StringStartsWithIgnoreCase 'backend/'
)
)
EOF
)
可以检查 condition 变量以验证它是否正确。
确保在使用condition变量时使用双引号 (")。
echo "$condition"
在执行角色分配之前,还必须查询参数的 --scope 注册表资源 ID。
参数 --scope 应始终是注册表资源 ID(没有存储库名称),即使对于限定为存储库前缀的角色分配也是如此。
还可以指定资源组或订阅范围,以跨资源组或订阅中的所有注册表执行此角色分配。
scope=$(az acr show --name <registry-name> --resource-group <resource-group> --query "id" -o tsv)
最后,若要执行角色分配,请运行以下命令:
az role assignment create \
--role "Container Registry Repository Reader" \
--scope "$scope" \
--assignee "user@contoso.com" \
--description "Read access to a multiple repositories under a repository prefix" \
--condition "$condition" \
--condition-version "2.0"
下面显示了输出示例:
{
"canDelegate": null,
"condition": "( ( !(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/content/read'}) AND !(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/metadata/read'}) ) OR ( @Request[Microsoft.ContainerRegistry/registries/repositories:name] StringStartsWithIgnoreCase 'backend/' ))",
"conditionVersion": "2.0",
"description": "{description}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
"name": "{roleAssignmentId}",
"principalId": "{userObjectId}",
"principalType": "User",
"resourceGroup": "{resourceGroup}",
"roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
"scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.ContainerRegistry/registries/{registryName}",
"type": "Microsoft.Authorization/roleAssignments"
}
若要更新或删除角色分配,可以使用 az role assignment update 或 az role assignment delete。
使用多个存储库前缀(多个通配符)将角色分配范围限定为多个存储库
在此示例中,我们分配角色 Container Registry Repository Reader 以在两个不同的前缀(多个通配符)下向多个存储库授予拉取权限。
通过添加 ABAC 条件,此角色分配允许标识仅从指定的存储库拉取映像、查看标记和读取元数据,从而阻止访问注册表中的其他存储库。
如果已按照上述示例将 Container Registry Repository Reader 角色分配给特定存储库,则必须删除该角色分配(导航到“访问控制(IAM)”边栏选项卡并选择“角色分配”选项卡),然后创建一个范围限定为存储库前缀的具有 ABAC 条件的新角色分配。
按照 与上一示例中 相同的步骤,使用 ABAC 条件执行角色分配。
在为 ABAC 条件添加表达式的步骤中,将两个表达式配置为将角色分配范围限定为两个前缀下的多个存储库: backend/ 和 frontend/js/ (多个通配符)。
对于第一个表达式,请配置以下选项:
- 属性源:
Request
- 属性:
Repository name
- 运算符:
StringStartsWithIgnoreCase
- 值:
<repository-prefix> - 存储库的前缀,包括尾部斜杠 /。
- 例如,若要向具有前缀
backend/的所有存储库授予权限,例如backend/nginx,请输入backend/redisbackend/。
- 若要向具有前缀
frontend/js/的所有存储库授予权限,例如frontend/js/react,请输入frontend/js/vuefrontend/js/。
单击“添加表达式”。确保布尔运算符设置为“Or”。
可以选择“组”将表达式组合在一起,并控制计算顺序。
视觉编辑器还支持多个布尔运算符,包括“And”、“Or”、“分层分组”和反函数。
对于第二个表达式,请配置以下选项:
- 属性源:
Request
- 属性:
Repository name
- 运算符:
StringStartsWithIgnoreCase
- 值:
<repository-prefix> - 存储库的前缀,包括尾部斜杠 /。
- 例如,若要向具有前缀
backend/的所有存储库授予权限,例如backend/nginx,请输入backend/redisbackend/。
- 若要向具有前缀
frontend/js/的所有存储库授予权限,例如frontend/js/react,请输入frontend/js/vuefrontend/js/。
重要
ABAC 条件表达式的 Value 字段中需要使用尾随左斜线 /。
如果未包含尾部斜杠 /,则可能无意中向与前缀不匹配的其他存储库授予权限。
例如,如果你输入backend而没有尾部斜杠/,则角色分配会向具有前缀backend的所有存储库授予权限,例如backend/nginx、backend/redis、backend-infra/k8s、backend-backup/store、backend和backendsvc/containers。
单击“保存”以保存 ABAC 条件。
查看角色分配 ABAC 条件。
评审页包含 ABAC 条件的代码表达式,该表达式可用于使用 Azure CLI 通过同一 ABAC 条件执行相同的角色分配。
单击“查看 + 分配”来执行角色分配。
创建角色分配后,可以查看、编辑或删除角色分配。
导航到注册表的“访问控制(IAM)”,然后选择“角色分配”选项卡以查看适用于注册表的现有角色分配列表。
如果您按照前面的示例将 Container Registry Repository Reader 角色分配给特定存储库,则必须先使用 az role assignment delete 删除该角色分配,然后才能创建一个使用 ABAC 条件并限定为存储库前缀的新角色分配。
要添加多个前缀下范围限定为多个存储库的具有 ABAC 条件的角色分配,请使用 az role assignment create。
ACR 团队建议使用 Azure 门户角色分配体验中的视觉编辑器为 ABAC 条件创建表达式。
对 ABAC 条件使用以下表达式将角色分配限制到存储库 nginx:
(
(
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/content/read'})
AND
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/metadata/read'})
)
OR
(
@Request[Microsoft.ContainerRegistry/registries/repositories:name] StringStartsWithIgnoreCase 'backend/'
OR
@Request[Microsoft.ContainerRegistry/registries/repositories:name] StringStartsWithIgnoreCase 'frontend/js/'
)
)
可以将此 ABAC 条件存储到名为 condition 的 shell 变量中,以便在 az role assignment create 命令中使用。
condition=$(cat <<'EOF' | tr -d '\n'
(
(
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/content/read'})
AND
!(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/metadata/read'})
)
OR
(
@Request[Microsoft.ContainerRegistry/registries/repositories:name] StringStartsWithIgnoreCase 'backend/'
OR
@Request[Microsoft.ContainerRegistry/registries/repositories:name] StringStartsWithIgnoreCase 'frontend/js/'
)
)
EOF
)
可以检查 condition 变量以验证它是否正确。
确保在使用condition变量时使用双引号 (")。
echo "$condition"
在执行角色分配之前,您还必须查询与 --scope 参数相关的注册表资源 ID。
即使角色分配范围限定为多个存储库前缀,该 --scope 参数也应始终是注册表资源 ID(没有存储库名称)。
还可以指定资源组或订阅范围,以跨资源组或订阅中的所有注册表执行此角色分配。
scope=$(az acr show --name <registry-name> --resource-group <resource-group> --query "id" -o tsv)
最后,若要执行角色分配,请运行以下命令:
az role assignment create \
--role "Container Registry Repository Reader" \
--scope "$scope" \
--assignee "user@contoso.com" \
--description "Read access to a multiple repositories under multiple repository prefixes" \
--condition "$condition" \
--condition-version "2.0"
下面显示了输出示例:
{
"canDelegate": null,
"condition": "( ( !(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/content/read'}) AND !(ActionMatches{'Microsoft.ContainerRegistry/registries/repositories/metadata/read'}) ) OR ( @Request[Microsoft.ContainerRegistry/registries/repositories:name] StringStartsWithIgnoreCase 'backend/' ))",
"conditionVersion": "2.0",
"description": "{description}",
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
"name": "{roleAssignmentId}",
"principalId": "{userObjectId}",
"principalType": "User",
"resourceGroup": "{resourceGroup}",
"roleDefinitionId": "/subscriptions/{subscriptionId}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
"scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.ContainerRegistry/registries/{registryName}",
"type": "Microsoft.Authorization/roleAssignments"
}
若要更新或删除角色分配,可以使用 az role assignment update 或 az role assignment delete。
ABAC 条件的最大数目
Azure 门户每个角色分配仅支持有限数量的 ABAC 条件。
若要添加超过 Azure 门户对 ABAC 条件的限制,可以使用 Azure CLI 创建包含更多 ABAC 条件的角色分配。
后续步骤