使用应用程序和数据库在单独的VM上简化Azure设置

时间:2016-06-27 14:43:11

标签: django postgresql azure ubuntu

我的Django应用程序(带有postgresql后端)托管在两个独立的Ubuntu VM上。我使用Azure作为我的基础架构提供商,而虚拟机是经典。两者都是同一资源组的一部分,并且也映射到相同的DNS(即它们都存在于xyz.cloudapp.net)。目前,我在我的应用程序的settings.py中定义了以下数据库网址:

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

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

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

1 个答案:

答案 0 :(得分:1)

在Classic(ASM)模式下,Cloud Service是网络安全边界,带有ACL的端点用于限制来自外部Internet的访问。

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

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

您可以在此处找到详细说明:

https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-static-private-ip-classic-pportal/

这应该有效。但是对于将来的实现,我会推荐更现代的Azure资源模型(ARM),您可以从中受益于许多不错的新功能,包括虚拟网络(VNET),您可以获得更细粒度的安全性。