如何为其他Azure租户的service principal授予本租户VNET访问权限
Azure跨租户Service Principal VNET权限配置操作指引
操作前提
你需要持有TenantA的全局管理员/用户访问管理员角色,同时拥有TenantA内中央VNET所属订阅的所有者或用户访问管理员权限。
操作步骤
步骤1:将TenantB的Service Principal注册到TenantA目录
- 切换Azure操作上下文到TenantA目录,打开Azure Cloud Shell,执行以下任一命令完成SP注册:
- PowerShell命令:
New-AzADServicePrincipal -ApplicationId <替换为TenantB SP的应用(客户端)ID> - Azure CLI命令:
az ad sp create --id <替换为TenantB SP的应用(客户端)ID>
- PowerShell命令:
- 命令执行完成后,可在TenantA的Azure AD「企业应用程序」列表中搜索到该SP,确认注册成功。
步骤2:为TenantB的SP授予TenantA中央VNET的对应权限
- 进入TenantA的中央VNET资源详情页,点击左侧菜单「访问控制(IAM)」→「添加」→「添加角色分配」
- 角色选择页勾选「网络贡献者」(如需最小权限可自定义包含
Microsoft.Network/virtualNetworks/peer/action和VNET读权限的自定义角色),点击「下一步」 - 分配对象选择「用户、组或服务主体」,点击「选择成员」,搜索刚才注册的TenantB SP的名称并选中,点击「下一步」→「审查+分配」完成授权
- 权限最长需要15分钟生效,建议等待5分钟后再做权限验证
步骤3:适配Terraform脚本支持跨租户部署
在原有Terraform配置中新增TenantA的专属azurerm provider实例,示例配置如下:
# 主Provider,用于在TenantB部署业务资源 provider "azurerm" { tenant_id = "<TenantB租户ID>" client_id = "<TenantB SP客户端ID>" client_secret = "<TenantB SP客户端密钥>" subscription_id = "<TenantB目标订阅ID>" features {} } # 别名Provider,用于操作TenantA的中央VNET资源 provider "azurerm" { alias = "tenant_a" tenant_id = "<TenantA租户ID>" client_id = "<TenantB SP客户端ID>" client_secret = "<TenantB SP客户端密钥>" subscription_id = "<TenantA中央VNET所属订阅ID>" features {} }
后续调整VNET peering资源配置,分别关联两个Provider创建双向 peering 即可。
权限验证方法
本地使用TenantB的SP身份执行命令登录TenantA:az login --service-principal -u <TenantB SP客户端ID> -p <TenantB SP客户端密钥> --tenant <TenantA租户ID>
登录成功后尝试查询TenantA中央VNET信息、执行peering创建测试,确认操作可正常执行即代表权限配置生效。
注意:不要在Terraform脚本中硬编码SP密钥等敏感信息,可通过Jenkins环境变量传递对应参数,避免敏感信息泄露。
内容的提问来源于stack exchange,提问作者chitender kumar
相关产品推荐
相关产品推荐

