我需要配置Azure SQL Database
防火墙设置,以便只能由我的Azure Function
应用访问。问题是我正在按消费计划运行该应用程序,据我所知,即使我不执行任何操作,出站IP地址也会更改。
是否可以将应用列入白名单,以保护数据库免受不必要的连接?
由于所有内容都托管在同一区域中,因此我想到了按Azure区域列入白名单,但是我该如何防范同一区域中的其他应用程序呢?这就是为什么我在考虑使用特定的IP地址。我对这种方法的唯一担心是,我不知道其他功能应用程序是否可以共享与我自己相同的出站IP地址。
P.S。目前,我的防火墙设置拒绝公共网络访问,并仅允许Azure服务连接。
答案 0 :(得分:1)
有几种方法可以实现此目的。
您可能要集成VNet或获取Azure函数的静态IP地址
图片来自:https://docs.microsoft.com/en-us/azure/azure-functions/functions-networking-options
但是,我从您的评论中看到的是您不想参加高级计划。
最后我建议您实现托管服务身份。
其背后的想法是,您无需使用连接字符串连接数据库,而是使用您授予的访问令牌连接到数据库。如果您不在同一Identity中,则无法获取访问令牌。
本教程介绍了App Service的一般概念: https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi
本教程几乎涵盖了您真正想要实现的目标。
祝你好运!
答案 1 :(得分:0)
您可以做的一件事就是为您的功能分配一个托管身份。它将从Azure AD检索令牌,并将其用于连接到Azure SQL:
if (accessToken != null) {
string connectionString = "Data Source=<AZURE-SQL-SERVERNAME>; Initial Catalog=<DATABASE>;";
SqlConnection conn = new SqlConnection(connectionString);
conn.AccessToken = accessToken;
conn.Open();
}
答案 2 :(得分:0)
您可以通过在SQL Server -INbound Networking端为功能应用和白名单分配静态IP并拒绝所有请求来实现。但是,您必须将使用计划更改为Appservice才能分配静态IP。
https://docs.microsoft.com/en-us/azure/azure-functions/ip-addresses#dedicated-ip-addresses
此外,您可以尝试为这些服务创建Vnet对等并阻止其他请求。
答案 3 :(得分:0)
我找不到答案(所以不是我的答案,而是在这里分享),您的 Azure Functions 有一个 outboundIpAddresses
和 possibleoutboundIpAddresses
列表,您可以将它们添加到您的 Azure SQL防火墙规则(我的大约有 10 个)。
您可以通过...找到它们
outboundIpAddresses
和 possibleoutboundIpAddresses
,它们将包含 IP 地址列表。虽然我不确定这些是否会改变,但到目前为止,它们对我来说还没有,最初发布此解决方案的人也指出,他们还没有遇到此问题。
答案 4 :(得分:0)
答案 5 :(得分:-1)
虚拟网络在Azure上的工作方式与在本地工作的方式不同
如果创建虚拟网络,则将Azure函数添加到子网中,然后在sql server中允许该子网访问它,不幸的是无法使用。
如果您可以允许“公共访问”和/或“ azure资源访问”,那么事情就很简单了。您使用sql凭据登录,就可以访问。
如果您阻止公共访问,我不确定您的资源是否能够访问数据库,因为所有连接都是从Internet而不是内部网络连接到SQL Server。
对我有用的解决方案是
现在,您可以关闭数据库中的公共资源和天蓝色资源访问。
所有呼叫将通过您的虚拟网络(不再通过Internet)进行,并且只有使用此vnet子网的应用程序才能连接到数据库。