如何借助Azure API管理服务限制Azure Function App的访问权限?
限制文件上传Azure Function的外部访问方案
针对你的场景,已经设置authLevel为function,可以通过以下几种方式实现仅允许API Function访问文件上传Function:
虚拟网络隔离
将两个Function App部署到同一个Azure虚拟网络中,然后在文件上传Function的网络设置里:- 启用虚拟网络集成,将Function接入VNet;
- 在“访问限制”中设置为拒绝所有公共网络流量,仅允许虚拟网络内的流量访问。
这样外部无法直接访问文件上传Function,只有同VNet内的API Function能发起调用。
安全传递函数密钥
既然authLevel设为function,文件上传Function会生成专属的函数密钥。API Function调用时必须携带该密钥:- 将文件上传Function的密钥存储到API Function的应用设置中(比如命名为
UploadFunctionAuthKey); - API调用上传Function时,通过请求头
x-functions-key传递密钥。
示例代码(以C#为例):
var httpClient = new HttpClient(); var authKey = Environment.GetEnvironmentVariable("UploadFunctionAuthKey"); httpClient.DefaultRequestHeaders.Add("x-functions-key", authKey); var uploadResponse = await httpClient.PostAsync("https://your-upload-function-endpoint", fileContent);确保密钥仅在内部应用设置中存储,不对外暴露。
- 将文件上传Function的密钥存储到API Function的应用设置中(比如命名为
精准配置IP访问限制
之前IP限制失效是因为未添加API Function的出站IP。修正方式:- 在API Function的“概述”->“属性”中,复制所有出站IP地址;
- 在文件上传Function的“访问限制”中,添加这些IP地址到允许列表,同时设置默认规则为拒绝所有未匹配的流量。
这样只有API Function的出站IP能访问上传Function,外部其他IP会被拦截。
通过Azure API管理(APIM)管控流量
将对外提供服务的API Function接入APIM,文件上传Function不暴露到APIM前端:- API通过APIM对外提供访问入口;
- APIM内部调用文件上传Function时,携带函数密钥或通过VNet进行安全访问;
- 文件上传Function的访问限制设置为仅允许APIM的IP或VNet流量。
内容的提问来源于stack exchange,提问作者bowlingh23
相关产品推荐
相关产品推荐

