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

如何限制Azure Functions仅允许API Management服务访问?

无需VNet/APIM Premium层级的实现方案

完全可以实现,不需要把函数切到私有VNet访问模式,也不用采购高价的APIM Premium版,用公网链路配合三层访问控制就能做到仅指定APIM实例可调用你的Azure Function,所有用到的能力在APIM Basic/Standard/Developer层、Azure Function通用层全部自带,无额外成本:

  • 第一层:配置Azure Function公网IP白名单
    先到你的APIM实例概述页,把该实例所有的出站公网IP地址段全部复制出来——如果开了多区域部署、区域冗余,要把所有涉及区域的出站IP都找全,不要遗漏。之后进入Azure Function的「网络」-「访问限制」配置页,把上述IP段全部加为允许规则,最后加一条优先级最低的拒绝所有公网流量的规则,这一步会直接在平台层挡住所有非APIM来源IP的请求,根本到不了你的函数代码层。
  • 第二层:托管函数访问密钥,避免密钥外泄
    IP规则配置完不要直接开匿名访问,给这个函数生成一个专属的函数级访问密钥,这个密钥只存在APIM侧,绝对不对外暴露。所有转发到函数的请求,都通过APIM的后端策略自动把密钥拼到请求参数里,外部客户端完全接触不到这个密钥,从根源上避免密钥泄露被人直接调用的风险。
  • 第三层:自定义请求头校验做兜底
    为了规避极小概率的IP仿冒、同区域其他Azure服务IP误命中白名单的问题,你可以自定义一个只有APIM和函数两端知道的特殊请求头,比如X-Internal-Gate-Token,值设为32位以上的随机复杂字符串,同样通过APIM策略自动给转发到后端函数的请求加上这个头,在函数代码里加个前置校验:请求不带这个头、头值不匹配直接返回403,连业务逻辑都不进。

APIM侧自动加密钥和自定义头的策略示例如下:

<inbound>
    <base />
</inbound>
<backend>
    <!-- 自动注入函数访问密钥 -->
    <set-query-parameter name="code" exists-action="override">
        <value>你为APIM单独生成的Function访问密钥</value>
    </set-query-parameter>
    <!-- 自动注入自定义校验头 -->
    <set-header name="X-Internal-Gate-Token" exists-action="override">
        <value>你自定义的随机复杂校验串</value>
    </set-header>
</backend>
<outbound>
    <base />
</outbound>

注意点:不要为了省事跳过密钥和自定义头校验只配IP白名单,双层及以上的校验足够覆盖绝大多数非合规访问场景,安全性完全可以满足普通业务的要求,成本只有VNet+Premium方案的10%不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:48:19