我正在尝试安全地让 Azure 应用服务连接到 Azure SQL Server 数据库。
之前,为了“让它正常工作”,我将 SQL Server 防火墙打开到互联网。应用服务从应用服务获取连接字符串,并使用它来连接到 .database.windows.net。
到目前为止,我只能看到两种可能性:
1) 特别让 App Service 的出站 IP 通过 SQL Server 的防火墙。这很危险,因为 IP 可能会改变,每次发生这种情况时我都必须更改它们。
2)将 SQL Server 和 App Service 放入 vnet 中。
我尝试了 2),但有点失败了。我在 SQL Server 防火墙设置中将我的虚拟网络添加到允许的虚拟网络,并拒绝互联网连接。
然后我将应用服务从 B1 升级到 S1,因为显然我的 11 欧元应用服务不允许在虚拟网络上使用(这也是我在这里寻找其他解决方案的原因)。
这以前有效,但现在我改变了一些东西来尝试一些东西,改回来后它就不再起作用了。我不确定为什么,设置是一样的。
所以我一开始的问题还在这里:
如何正确、安全地将应用服务连接到 SQL Server DB?
更新:
因此我暂时采用 vnet/endpoint 解决方案,但它不起作用。
- 我在没有 NSG 的 vnet 子网中拥有 WebAPI,我可以从互联网(swagger)访问它。
- vnet 已为该子网激活服务端点 Microsoft.Sql。
- WebAPI 尝试使用连接字符串连接到 SQL Server。一旦我学会了这一点,我就会将其更改为 Azure AD。现在必须让网络正常工作。
- SQL Server 防火墙:
- 拒绝公众访问
- 允许 Azure 资源访问
- 允许通过子网访问。服务端点状态显示已启用。
SQL Server 防火墙设置:
答案1
您实际上已经了解了有关此问题的选项:
- 使用“允许访问所有 Azure 服务”复选框允许访问,不推荐
- 允许访问你的 Web 应用的出站 IP 集
- 将您的 Web 应用加入到 vNet,并使用服务端点将 SQL 锁定到该 vNet
除非您想查看应用服务环境(它是在您的 vNet 中部署的单一租户解决方案(并且非常昂贵),否则这些就是您的选择。
我还建议您考虑使用托管标识针对 SQL 数据库对 Web 应用程序进行身份验证,而不是使用连接字符串。