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

Azure私有网络环境下通过托管身份获取Access Token可行吗?请指导步骤

无互联网环境下Azure Function通过托管身份访问Synapse REST API方案

可行。依赖Azure私有链接和Azure AD私有端点,可在虚拟网络内部完成令牌获取与API调用,无需互联网访问。具体步骤如下:

1. 搭建私有网络环境

  • 确保Azure Function与Synapse实例处于同一VNet或通过VNet peering连通的网络中
  • 为Azure AD令牌服务创建私有端点:资源类型选Microsoft.AzureActiveDirectory/,资源值填租户ID,端点子类型选token
  • 为Synapse工作区创建私有端点:资源类型选Microsoft.Synapse/workspaces,对应目标实例,子类型按需选sql或dev
  • 禁用所有资源的公共网络访问,仅允许私有端点接入

2. 配置Azure Function网络与应用设置

  • 将Function集成到目标VNet,并启用私有端点,限制其仅能通过VNet内部访问
  • 添加应用设置:
    • AZURE_IDENTITY_DISABLE_METADATA_DISCOVERY = true:强制托管身份使用私有端点获取令牌
    • AZURE_AD_ENDPOINT = https://<你的Azure AD私有端点FQDN>:指定私有令牌服务地址

3. 配置托管身份权限

  • 在Synapse工作区的IAM界面,为Function的托管身份分配对应权限(如Synapse Contributor或自定义权限),确保其有权调用目标REST API

4. 调整代码中的DefaultAzureCredential配置

  • 初始化凭据时指定私有Azure AD端点并禁用实例发现:
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
    AuthorityHost = new Uri("https://<你的Azure AD私有端点FQDN>"),
    DisableInstanceDiscovery = true
});
  • 获取Synapse API令牌时,使用正确的资源范围:
var tokenRequest = new TokenRequestContext(new[] { "https://dev.azuresynapse.net/.default" });
var accessToken = await credential.GetTokenAsync(tokenRequest);

5. 验证连通性与DNS配置

  • 确保VNet的DNS能正确解析私有端点的FQDN(推荐使用Azure专用DNS区域)
  • 在Function中测试与Azure AD私有端点、Synapse私有端点的连通性,确认无网络阻断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:07:31