You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Azure服务主体仅访问以TEST开头的资源?

实现服务主体仅访问名称以"TEST."开头资源的方案

要给你的CI/CD服务主体设置仅对TEST.前缀资源的Contributor权限,核心是用Azure RBAC条件角色分配,通过过滤资源名称和类型来实现最小权限。具体步骤如下:

1. 获取服务主体的Object ID

先通过Azure CLI拿到目标服务主体的唯一标识:

az ad sp list --display-name "<你的服务主体名称>" --query "[].id" -o tsv

复制输出的ID,后续步骤会用到。

2. 创建带条件的角色分配

根据你的需求,分两种场景设置:

场景1:允许所有类型中名称以TEST.开头的资源

如果要覆盖所有资源类型(比如Container Apps、Container Registries等),执行以下命令:

az role assignment create \
  --assignee <服务主体Object ID> \
  --role "Contributor" \
  --scope "/subscriptions/<你的订阅ID>" \
  --condition "Microsoft.Resources/resourceNames[*] startswith 'TEST.'" \
  --condition-version "2.0"

场景2:仅允许指定资源类型(Container Apps、Container Registries)且名称以TEST.开头

如果要限定仅这两类资源,细化条件表达式:

az role assignment create \
  --assignee <服务主体Object ID> \
  --role "Contributor" \
  --scope "/subscriptions/<你的订阅ID>" \
  --condition "(Microsoft.Resources/resourceType == 'Microsoft.App/containerApps' or Microsoft.Resources/resourceType == 'Microsoft.ContainerRegistry/registries') AND Microsoft.Resources/resourceNames[*] startswith 'TEST.'" \
  --condition-version "2.0"

关键参数说明

  • --scope:这里用订阅范围表示对整个订阅内符合条件的资源生效;如果你的TEST资源都集中在某个资源组,也可以换成资源组的完整ID(比如/subscriptions/<订阅ID>/resourceGroups/<资源组名>),进一步缩小权限范围。
  • --condition:用Azure RBAC的条件语法过滤资源,startswith匹配名称前缀,resourceType限定资源类型,确保权限只给需要的资源。
  • --condition-version:必须指定2.0,因为1.0版本不支持资源名称过滤的完整语法。

验证权限设置

执行以下命令检查角色分配是否生效:

az role assignment list --assignee <服务主体Object ID> --query "[].{Role:roleDefinitionName, Condition:condition}" -o table

输出会显示你创建的带条件的Contributor角色分配。

注意事项

  • 服务主体默认无任何权限,这个分配完成后,它只能操作符合条件的TEST.前缀资源,访问其他资源会直接返回权限不足,完全符合你的需求。
  • Terraform执行时,确保所有要操作的资源名称都以TEST.开头,否则会因权限问题失败,这也能帮你避免误操作非测试资源。

内容的提问来源于stack exchange,提问作者Hiten Samalia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 05:07:03