我们在门户上部署了时间触发的 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函数安全地访问我们部署在虚拟机上的数据库呢?
我已经打开了issue在 github 上,但尚未收到回复。
最佳答案
经过深入研究,终于找到了解决方案。
需要将部署DB的虚拟机中Function App的所有出站IP列入白名单。出站 IP 地址可以从 resources.azure.com 找到。在搜索您的资源时(在我的例子中是 Function 应用程序的名称),将会有一个很长的 json 输出,您必须在其中选择 possibleOutboundIpAddresses
参数如图所示。将所有 Ips 列入白名单,然后您的 azure 函数应用程序就可以访问部署在虚拟机上的数据库。
此外,我还搜索了这些 IP 是否会定期更改。虽然我没有从中找到任何官方消息,但从各种互联网来源我了解到,即使计划更改 IP,每个人都会在此之前收到足够的通知以防止出现任何问题。嗯>
关于azure - 如何允许azure函数访问Azure VM上托管的数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49109310/