azure - 如何允许azure函数访问Azure VM上托管的数据库?

标签 azure azure-functions

我们在门户上部署了时间触发的 Azure 函数,以在特定时间执行某些迭代任务。我们的 azure 函数通过 AppSettings 中提供的连接字符串使用部署在 Azure VM 上的数据库。该函数在运行时抛出以下错误:

MySql.Data: Authentication to host 'xxx' for user 'xxx using method 'mysql_native_password' failed with message: Client with IP address 'x.x.x.x' is not allowed to connect to this MySQL server. MySql.Data: Client with IP address 'x.x.x.x' is not allowed to connect to this MySQL server*

当我们将错误消息中提到的 IP 列入白名单时,该函数会成功运行。但由于 azure 函数没有确定的工作站或具有相同 IP 的 PC 来处理执行,因此每当该函数从新 IP 运行时,它都会抛出错误。因此,我们需要一种机制,通过该机制可以将运行函数应用程序的 PC 的所有 IP 列入白名单,或者需要一些更好的机制来进行身份验证并允许 azure 函数访问 Azure VM 上托管的数据库。

我们尝试了什么?

  • 我们将函数应用的虚拟 IP 地址列入白名单。但并不是每次都有效。
  • 我们尝试将从部署函数应用的区域的 Microsoft 数据中心获取的 IP 范围列入白名单。但这个方法也行不通。

  • Azure application can't access database on Azure VM?

那么,有什么方法可以让azure函数安全地访问我们部署在虚拟机上的数据库呢?

我已经打开了issue在 github 上,但尚未收到回复。

最佳答案

经过深入研究,终于找到了解决方案。

需要将部署DB的虚拟机中Function App的所有出站IP列入白名单。出站 IP 地址可以从 resources.azure.com 找到。在搜索您的资源时(在我的例子中是 Function 应用程序的名称),将会有一个很长的 json 输出,您必须在其中选择 possibleOutboundIpAddresses参数如图所示。将所有 Ips 列入白名单,然后您的 azure 函数应用程序就可以访问部署在虚拟机上的数据库。

此外,我还搜索了这些 IP 是否会定期更改。虽然我没有从中找到任何官方消息,但从各种互联网来源我了解到,即使计划更改 IP,每个人都会在此之前收到足够的通知以防止出现任何问题。

Image

关于azure - 如何允许azure函数访问Azure VM上托管的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49109310/

相关文章:

C# Azure 函数 - 如何在 Azure 函数中使用 CrmOnline API 连接

azure - 不支持关键字 : @microsoft. keyvault

始终在线应用服务计划上的 Azure Function 超时且未设置 functionTimeout

azure - 将 blobTrigger 与 Azurite 结合使用会导致函数主机崩溃

angular - 使用 Azure Web 应用部署 Angular 2

azure - 在 Azure 数据工厂查找中处理 >5000 行

azure - 基于Message属性触发WebJob方法

azure - 步骤引用版本 1.152.1 的 InvokeRESTAPI 任务,该任务对于给定作业目标无效

azure - 无法从 CloudBlockBlob 向上转换到 CloudBlob

azure - 使用 Bicep 输出新创建的功能应用程序 key