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

Azure跨租户专用端点创建失败:LinkedAuthorizationFailed问题解决

问题描述

环境与上下文

  • 租户A:托管运行Go程序的虚拟机
  • 租户B:拥有已启用防火墙、完全禁用公共访问的存储账户

已完成的手动操作

已在租户A中手动创建指向租户B存储账户资源ID的专用端点,并配置了对应专用DNS区域,租户A虚拟机上的Go程序已能通过该专用端点访问租户B存储账户中的Blob。

自动化目标

使用Azure Function App实现上述专用端点创建流程的自动化。

当前设计

  1. 在租户A注册多租户Entra(AAD)应用,并已投影到租户B
  2. 租户A中的Function App:
    • 包含HTTP触发器,接收指定待链接存储账户的请求负载
    • 将负载加入队列
    • 队列触发器读取负载,使用Entra应用的ClientSecretCredential尝试在租户A中创建引用租户B存储账户的专用端点

已配置权限

多租户应用注册权限

  • Microsoft Graph:Application.Read.All、AppRoleAssignment.ReadWrite
  • Azure Service Management:user_impersonation

租户B侧权限分配

在租户B的目标订阅上,已为该应用注册授予:

  • Storage Account Contributor
  • Private Endpoint Contributor

错误信息

Function App尝试创建专用端点时触发以下错误:

(LinkedAuthorizationFailed) 客户端有权对范围'/subscriptions/87332a70-7c1b-4437-aa3b-ec7c00d72de0/resourceGroups/ash-private-link-rg/providers/Microsoft.Network/privateEndpoints/testPe'执行操作'Microsoft.Storage/storageAccounts/PrivateEndpointConnectionsApproval/action',但当前租户'68b76eeb-dd53-4531-9550-3e6702ad1a1f'无权访问链接订阅'7cc25562-a9a4-42a5-813c-56b5b7a9f3dc'。

核心疑问

如何确保租户A中的多租户应用在专用端点审批流程中有权访问租户B的链接订阅?需要哪些跨租户配置来授予该授权?


解决方案

要解决跨租户专用端点创建的授权问题,需完成以下关键配置:

1. 确认多租户应用在租户B中生成服务主体

多租户应用投影到租户B后,需确保已在租户B中生成对应的服务主体:

  • 在租户B的Entra ID控制台进入「企业应用」,搜索该多租户应用名称,确认其存在
  • 若未自动生成,可由租户B管理员手动同意应用权限,或通过PowerShell命令创建:
    New-AzADServicePrincipal -ApplicationId <多租户应用的ClientID>
    

2. 为租户B订阅配置跨租户访问权限

在租户B的Azure门户中,为目标订阅添加角色分配:

  • 进入租户B的目标订阅,选择「访问控制(IAM)」
  • 添加角色分配,将Reader角色授予租户B中该多租户应用的服务主体
  • 确认该应用已拥有Microsoft.Storage/storageAccounts/privateEndpointConnections/write权限(Storage Account Contributor角色已包含此权限,用于专用端点连接审批)

3. 在Function App中切换租户上下文操作

创建跨租户专用端点时,需分两步切换上下文:

  • 先使用租户B的Tenant ID初始化ClientSecretCredential,获取租户B的访问令牌
  • 调用租户B的Azure资源管理器API,预批准存储账户的专用端点连接请求
  • 再切换回租户A的上下文,创建专用端点资源指向已预批准的连接

4. 配置租户B的跨租户访问策略

在租户B的Entra ID控制台进入「跨租户访问设置」:

  • 将租户A添加到「允许的外部租户」列表
  • 针对应用访问设置为「允许访问」,并将该多租户应用纳入允许范围

补充必要权限

确保租户B中该应用服务主体拥有:

  • Microsoft.Resources/subscriptions/read权限(用于读取租户B订阅信息)
  • Microsoft.Network/privateEndpoints/read权限(可选,用于排查资源状态)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 23:38:27