我的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),您可以获得更精细的安全性。