如何在私有云内的特定主机上对AWS用户进行身份验证

时间:2019-03-01 23:58:12

标签: postgresql amazon-web-services authentication amazon-rds

说我的地下室有一台服务器,我想复制到RDS数据库。为此,我在pip install numpy==1.16 文件中添加了一个用户,例如:

pg_hba.conf

那行得通!直到IP地址更改。

所以我尝试将AWS主机放在那里:

hostssl all             replica         64.222.124.22    md5

但是这样的日志失败了:

hostssl all             replica         my-db.random-string.us-west-2.rds.amazonaws.com    md5

当我在IP上执行反向DNS请求时:

2019-03-01 11:50:13.205 PST [28518] replica@server DETAIL:  Client IP address resolved to "ec2-64-222-124-22.us-west-2.compute.amazonaws.com", forward lookup not checked.
2019-03-01 11:50:13.251 PST [28519] replica@server FATAL: no pg_hba.conf entry for replication connection from host "64.222.124.22", user "replica", SSL off

因此,我发现无法将连接的IP地址解析回我在↪ host 64.222.124.22 49.221.155.35.in-addr.arpa domain name pointer ec2-64-222-124-22.us-west-2.compute.amazonaws.com. 文件中输入的主机名。我可以像这样将根域名放在其中:

pg_hba.conf

但是,如果所有的AWS都可以连接到我的服务器,则无法达到限制单个IP地址/主机的目的。

这里是否有技巧来使解析与AWS的主机名一起正常工作?

我真的不希望在两个服务器之间建立代理,只是给其中一个提供静态IP。我查看了AWS弹性IP,但无法将它们分配给RDS实例。

2 个答案:

答案 0 :(得分:2)

Postgresql在验证pg_hba.conf时首先进行反向DNS查找。因此,重要的是反向DNS。这也意味着这行不通:

hostssl all             replica         .rds.amazonaws.com    md5

您可以这样做:

hostssl all             replica         .us-west-2.compute.amazonaws.com    md5

但是,当您正确停留时,这将留下一个非常开放的配置,该配置将允许在该AWS区域中运行的任何计算机使用正确的md5密码进行连接。

从本质上讲,有两个不同的解决方案。

选项1-专用网络和VPN

使用AWS VPC,您可以为RDS实例设置专用网络和子网组,在其中您可以控制IP空间中为其分配IP地址。假设您有一个10.10.10.0/24子网。这意味着您可以随后在您的10.10.10.0/24中发布pg_hba.conf。这将需要在VPC和您的服务器之间建立某种VPN。

根据地下室中网络设备的类型,您可能可以使用AWS Site-to-site VPN。另外,您可以使用其他解决方案货架解决方案,例如OpenVPNWireGuard

选项2-动态更新pg_hba.conf

如果您不想要VPN的额外复杂性。您可能每隔5分钟就有一个脚本查询主机名my-db.random-string.us-west-2.rds.amazonaws.com,然后根据需要更新pg_hba.conf并将SIGHUP信号发送到postgres。这不是最漂亮的解决方案,但应允许它半自动运行。如果不需要在该连接上停机,那么这不太可能是理想的解决方案。

答案 1 :(得分:-1)

现在,在这里复制(嘿)这个想法,因为我知道如何实际“回答” SO上的问题。

另一种可能性是使用动态DNS提供程序。我以前没有想到这一点,因为它基本上只在您想使用连接DHCP的连接在家中托管服务器时使用,所以我实际上不知道它的工作原理。

本质上:

  1. 与DuckDNS.org之类的ddns提供者进行注册。
  2. 他们在您的某个域中为您提供了一个子域,例如flp.duckdns.org。
  3. 您在服务器上安装了更新客户端。
  4. 更新客户端(通常是守护程序)检查IP地址更新,然后在IP地址更改时通知提供商。
  5. 提供者在其名称服务器上更新A记录以反映更改。

我认为更新应该几乎是立即的,但是我不确定传播延迟是否仅限于主机名或A记录实际上是否沿途被缓存(从而绕过名称服务器查找)。

几个潜在问题(除了传播延迟):

  1. 在重启,迁移或其他AWS操作之间,更新客户端是否会保留?这主要是我遇到的一个问题,因为我不知道如何配置/管理用于RDS的实际ec2实例。甚至可以在服务器上安装一些额外的东西吗?
  2. 当IP地址解析为多个主机名时,反向DNS查找可能会出现问题。可以通过具有不同外部IP的多个网络接口来解决此问题,但是我们又回到了更多的基础架构更改中。

我认为,如果动态DNS提供程序具有API,则可以使用相当简单的Lambda函数和事件触发器来解决问题#1。

但这是权宜之计。我认为VPN和代理解决方案绝对是更可靠的选择。