Azure Function权限配置:允许指定函数调用入站拒斥的Function
配置Azure Function间的权限与网络放行方案
一、先放行调用方的入站网络流量
如果你的目标Function配置了入站流量显式拒绝(比如IP限制、VNet隔离规则),首先需要在目标Function的网络设置中添加允许规则:
- 基于IP地址放行:
- 进入调用方Function的「概述」页面,复制它的出站IP地址(消费计划的Function出站IP可能动态变化,建议使用官方给出的IP范围而非单个IP)。
- 进入目标Function的「网络」→「访问限制」页面,添加一条允许规则,将调用方的出站IP/IP范围填入,优先级设为高于拒绝规则(数字越小优先级越高)。
- 基于VNet放行:
- 将两个Function都集成到同一个Azure虚拟网络(VNet),或者配置VNet对等连接。
- 在目标Function的「网络」→「访问限制」中,添加允许规则,选择「虚拟网络」,指定调用方所在的VNet子网,优先级高于拒绝规则。
二、配置Azure AD身份验证与授权
仅放行网络无法确保访问安全,需要通过身份验证限制只有授权的调用方Function能访问:
- 启用目标Function的Azure AD身份验证:
- 进入目标Function的「身份验证」页面,启用「App Service 身份验证」,设置「未经身份验证的请求」为拒绝,确保只有认证请求能进入。
- 添加Azure AD作为身份提供者,配置对应租户信息。
- 给调用方Function分配调用权限:
- 进入调用方Function的「身份」页面,启用「系统分配的托管标识」(也可使用用户分配的托管标识)。
- 进入目标Function的「访问控制(IAM)」页面,添加角色分配:
- 角色选择「函数应用调用者」(仅需调用权限时)或「函数应用参与者」(需要管理权限时)。
- 分配对象选择「托管标识」,然后选中调用方Function的系统托管标识。
- 调用方代码调整:
- 在调用方代码中,通过托管标识获取目标Function的访问令牌,携带令牌发起请求。以C#为例:
using Azure.Identity; using System.Net.Http; using System.Net.Http.Headers; var credential = new DefaultAzureCredential(); var token = await credential.GetTokenAsync(new Azure.Core.TokenRequestContext(new[] { "https://<目标Function域名>.azurewebsites.net/.default" })); using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Token); var response = await client.GetAsync("https://<目标Function域名>.azurewebsites.net/api/<函数名>");
- 在调用方代码中,通过托管标识获取目标Function的访问令牌,携带令牌发起请求。以C#为例:
三、验证配置
- 测试调用方Function发起请求,确认能成功调用目标Function。
- 使用未授权的IP或身份发起请求,确认会被拒绝,验证原有显式拒绝规则依然生效。
内容的提问来源于stack exchange,提问作者Rorepio
相关产品推荐
相关产品推荐

