azure 前端应用程序服务在具有私有端点的VNet中调用后端应用程序服务时返回403 IP禁止错误

yfwxisqw  于 2023-03-19  发布在  其他
关注(0)|答案(1)|浏览(179)

我正在尝试保护部署在Azure中的应用程序,该应用程序由Angular前端和Node(Nest.js)后端组成。我希望前端可以通过互联网访问,而后端只能从前端访问(不能通过互联网访问)。后端似乎通过获取客户端的IP而不是前端的IP来限制访问,这会导致403 IP Forbidden错误。

总结(以下版本包含Bicep文件路径)

为此,我创建了:

  • 1个前端应用程序服务
  • 1个后端应用程序服务
  • 1个具有2个子网的VNet:
  • 1个专用端点对应1个子网
  • 1个用于前端应用程序服务的子网
  • 1 Private DNS Zone用于专用端点路由(创建专用端点时自动创建)

我做了如下配置:

  • 应用服务前端〉网络〉
  • 访问限制:允许公共访问
  • VNet集成:已将应用程序服务添加到先前创建的子网
  • 应用服务后端〉网络〉访问限制:允许公共访问但“拒绝”所有“不匹配的规则操作”。我添加了一个允许访问前端子网的规则(操作:允许,键入:选择VNet,子网:选择前端所在的子网)Like this
  • 应用服务后端〉CORS:添加了前端URL
    结果

在前端,我向后端API发出HTTP请求。后端响应ERR_FAILED 403(IP禁止)。在响应头中,我看到“x-ms-forbidden-ip:xxx.xxx.xx.xx”(我的PC所在公司网络的公共IP).See here。我是否应该看到我的前端应用程序服务IP?
仅供参考,如果在应用服务后端〉网络〉访问限制中,我添加了授权公司公共IP的规则,请求将返回代码200,而不再是403。
如何阻止对后端的公共访问,但仍然能够执行来自前端的请求?(经过多次研究,我还没有找到任何成功的答案来解决这个问题)。

带二头肌锉的版本

我跟踪了这个tutorial,在文章的最后,有一个二头肌文件可用。
所以我做了以下几点:

  • az group create --name SecureNTierApp --location "France Central"
  • az deployment group create --name DeployementSecureNTierApp --resource-group SecureNTierApp --template-file <file-name>.bicep
  • 为使用Azure DevOps部署重新激活基本身份验证:
  • az resource update --resource-group SecureNTierApp --name scm --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<frontend-name> --set properties.allow=true
  • az resource update --resource-group SecureNTierApp --name scm --namespace Microsoft.Web --resource-type basicPublishingCredentialsPolicies --parent sites/<backend-name> --set properties.allow=true
  • 在访问限制〉高级工具站点(在两个应用服务上)中:添加新规则(操作:允许,键入:服务标签,服务标签:碧云科技)
  • 应用服务后端〉CORS:添加了前端URL
  • 注意bicep文件将后端〉网络〉访问限制配置为允许公共访问:假的
rdrgkggo

rdrgkggo1#

据我所知,你的Azure环境设置正确。我怀疑你的Angular前端中的代码要求你的Web浏览器直接调用后端。你可能希望你的浏览器调用前端,然后将其路由或传递到后端。
您可以在使用浏览器访问网站的计算机上运行Wireshark来确认当前行为。您将看到流向后端IP的流量。

相关问题