在单独的VM上使用应用程序和DB来简化Azure



我的Django应用程序(带有后Ql后端)托管在两个单独的Ubuntu VM上。我将Azure用作我的基础架构提供商,而VM为 Classic 。两者都是同一资源组的一部分,也映射到同一DNS(即它们都生活在xyz.cloudapp.net上)。目前,我在应用程序的设置中定义了以下数据库URL:

DATABASE_URL = 'postgres://username:password@public_ip_address:5432/dbname'

DB端口5432是公开打开的,我假设上述DB URL意味着Web应用程序正在连接到DB,就好像它在远程计算机上一样。如果是这样,那不是最好的做法:它具有安全性影响,更不用说它在每个查询(延迟)中添加了20-30毫秒至一百毫秒的任何内容。

我的问题是,一个程序如何在Azure上设置这样的Django Postgres设置,以使数据库仅在专用网络上公开?我想保持两个VM设置完整。一个说明性的示例会很好 - 我想我必须用私有IP替换我的设置中的公共IP地址?我可以在Azure门户中看到Virtual machines(classic) > VMname > Settings > IP Addresses下列出的一个私有IP地址。这是要使用的吗?如果是这样,它是动态分配的,因此一段时间后它不会改变吗?期待有关此的指导。


在经典(ASM)模式下,云服务是网络安全边界,使用ACL的端点用于限制从外部Internet的访问。

安全访问的简单解决方案是:

  • 确保从云服务端点中删除数据库端口(5432)(以避免将其暴露在整个互联网上)。
  • 上获取DB服务器的静态私有IP地址
  • 使用的私人IP地址连接字符串中的DB服务器。
  • 将服务器保持在同一云服务中。

您可以在这里找到详细说明:

https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-static-patic-pactatic-pactation-paclate-ip-classic-pportal/

这应该起作用。但是,对于将来的实施,我建议您使用更现代的Azure资源模型(ARM),您可以从许多不错的新功能中受益,包括虚拟网络(VNET),您可以获得更精细的安全性。

最新更新