如何在Azure SQL数据库中将功能应用列入白名单

时间:2020-06-02 13:49:39

标签: azure azure-functions azure-sql-database whitelist

我需要配置Azure SQL Database防火墙设置,以便只能由我的Azure Function应用访问。问题是我正在按消费计划运行该应用程序,据我所知,即使我不执行任何操作,出站IP地址也会更改。

是否可以将应用列入白名单,以保护数据库免受不必要的连接?

由于所有内容都托管在同一区域中,因此我想到了按Azure区域列入白名单,但是我该如何防范同一区域中的其他应用程序呢?这就是为什么我在考虑使用特定的IP地址。我对这种方法的唯一担心是,我不知道其他功能应用程序是否可以共享与我自己相同的出站IP地址。

P.S。目前,我的防火墙设置拒绝公共网络访问,并仅允许Azure服务连接。

6 个答案:

答案 0 :(得分:1)

有几种方法可以实现此目的。

您可能要集成VNet或获取Azure函数的静态IP地址

图片来自:https://docs.microsoft.com/en-us/azure/azure-functions/functions-networking-options

enter image description here

但是,我从您的评论中看到的是您不想参加高级计划。

最后我建议您实现托管服务身份。

其背后的想法是,您无需使用连接字符串连接数据库,而是使用您授予的访问令牌连接到数据库。如果您不在同一Identity中,则无法获取访问令牌。

本教程介绍了App Service的一般概念: https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-connect-msi

本教程几乎涵盖了您真正想要实现的目标。

https://www.azurecorner.com/using-managed-service-identity-in-azure-functions-to-access-azure-sql-database/

祝你好运!

答案 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();
}

https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-sql

答案 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 有一个 outboundIpAddressespossibleoutboundIpAddresses 列表,您可以将它们添加到您的 Azure SQL防火墙规则(我的大约有 10 个)。

您可以通过...找到它们

  1. 转到https://resources.azure.com
  2. 扩展订阅 -> [扩展订阅] -> 提供商 -> Microsoft.Web -> 站点
  3. 在 JSON 中找到您的 Azure Function Site,并找到 outboundIpAddressespossibleoutboundIpAddresses,它们将包含 IP 地址列表。
  4. 将它们全部添加到 SQL 服务器的防火墙中。

虽然我不确定这些是否会改变,但到目前为止,它们对我来说还没有,最初发布此解决方案的人也指出,他们还没有遇到此问题。

答案 4 :(得分:0)

我遇到了同样的问题,但托管身份没有太大区别。

在 SQL 服务器的防火墙设置中,有一个选项允许 Azure 资源访问服务器。对我来说,这被设置为 no,但需要设置为 yes。

enter image description here

答案 5 :(得分:-1)

虚拟网络在Azure上的工作方式与在本地工作的方式不同

如果创建虚拟网络,则将Azure函数添加到子网中,然后在sql server中允许该子网访问它,不幸的是无法使用

如果您可以允许“公共访问”和/或“ azure资源访问”,那么事情就很简单了。您使用sql凭据登录,就可以访问。

如果您阻止公共访问,我不确定您的资源是否能够访问数据库,因为所有连接都是从Internet而不是内部网络连接到SQL Server。

对我有用的解决方案是

  1. 创建vnet
  2. 在此vnet中为Sql Server创建一个专用终结点(自定义DNS记录由IT-OPS人员创建)。
  3. Azure函数使用此vnet的子网。

现在,您可以关闭数据库中的公共资源和天蓝色资源访问。

所有呼叫将通过您的虚拟网络(不再通过Internet)进行,并且只有使用此vnet子网的应用程序才能连接到数据库。