我正在尝试保护部署在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文件将后端〉网络〉访问限制配置为允许公共访问:假的
1条答案
按热度按时间rdrgkggo1#
据我所知,你的Azure环境设置正确。我怀疑你的Angular前端中的代码要求你的Web浏览器直接调用后端。你可能希望你的浏览器调用前端,然后将其路由或传递到后端。
您可以在使用浏览器访问网站的计算机上运行Wireshark来确认当前行为。您将看到流向后端IP的流量。