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

如何增强Azure Functions安全性,仅允许Azure Web App前端访问?

仅允许Azure Web App访问Azure Functions的实现方案

可行性说明

完全可行。单纯依赖函数密钥和CORS无法阻止Postman这类工具的模拟请求——CORS仅约束浏览器的同源策略,而函数密钥一旦泄露即可被复用。需要结合身份验证+请求来源校验的组合机制实现严格的访问控制。

具体实现方法

1. Azure AD服务主体身份验证(推荐)

通过Azure AD实现服务间的身份校验,只有Web App能获取到合法的访问令牌:

  • 在Azure AD中注册两个应用:一个对应Azure Functions,一个对应Azure Web App。
  • 配置Azure Functions的身份验证:
    1. 进入Functions的「身份验证」面板,启用「Microsoft Entra ID」作为身份提供者,关联为Functions创建的AD应用。
    2. 设置「未经过身份验证的请求」为「HTTP 401 未经授权」,直接拒绝无令牌请求。
  • 在Web App的React代码中,使用@azure/msal-browser库获取AD令牌,请求Functions时在请求头携带Authorization: Bearer <token>。
  • 此方案下,Postman无法获取Web App对应的合法令牌(除非拿到Web App的应用密钥,可通过权限限制降低风险),从而无法访问Functions。

2. 校验Azure内部请求头

Azure Web App向Functions发起请求时会携带专属的内部请求头,可在Functions代码中添加校验逻辑:

  • 检查X-Forwarded-For是否属于Web App的出站IP范围(可从Web App「属性」面板获取出站IP列表)。
  • 检查X-ARR-SSL头是否存在(该头由Azure App Service转发请求时自动添加)。

示例Node.js Functions代码:

module.exports = async function (context, req) {
    // 替换为你的Web App出站IP列表
    const allowedOutboundIPs = ["xxx.xxx.xxx.xxx", "yyy.yyy.yyy.yyy"];
    const clientIP = req.headers["x-forwarded-for"]?.split(",")[0]?.trim();
    const hasArrSslHeader = !!req.headers["x-arr-ssl"];

    if (!allowedOutboundIPs.includes(clientIP) || !hasArrSslHeader) {
        context.res = {
            status: 403,
            body: "Forbidden: Request not from allowed source"
        };
        return;
    }

    // 正常业务逻辑处理
    context.res = {
        status: 200,
        body: "Request processed successfully"
    };
};

3. 私有网络隔离(最高安全级别)

将Web App和Functions纳入同一Azure虚拟网络,彻底阻断公网访问:

  • 创建Azure虚拟网络,将Web App部署到虚拟网络的子网中;为Functions配置Private Link,使其仅在虚拟网络内可访问。
  • 配置Functions的网络访问控制,仅允许来自虚拟网络内部的请求,拒绝所有公网流量。
  • 此方案下,Postman等公网工具完全无法触及Functions,只有同虚拟网络内的Web App能发起请求。

4. 函数密钥+Referer头校验(临时过渡方案)

如果暂时无法部署AD或私有网络,可通过双重校验提升安全性:

  • 同时验证请求头中的函数密钥和Referer字段,确保Referer包含Web App的域名(如https://your-webapp.azurewebsites.net)。
  • 注意:Referer头可被篡改,仅能阻止非专业的模拟请求,适合临时过渡使用。

关键注意事项

  • 禁止在前端代码中硬编码密钥或敏感信息,应存储在Web App的「应用设置」中,前端通过环境变量读取。
  • 定期轮换函数密钥和AD应用密钥,降低泄露后的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 08:22:13