如何在私有云内的特定主机上验证AWS用户

问题描述 投票:2回答:2

假设我的地下室中有一台服务器要复制到RDS数据库。为此,我在pg_hba.conf文件中添加了一个用户:

hostssl all             replica         64.222.124.22    md5

这样可行!直到IP地址发生变化。

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

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

但这与日志失败,如:

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上执行反向DNS请求时:

↪ 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.

所以我认为它无法将连接的IP地址解析回我放在pg_hba.conf文件中的主机名。我可以把根域名放在那里:

hostssl all             replica         .rds.amazonaws.com    md5

但是,如果所有AWS都可以连接到我的服务器,那么这种方法就无法限制为单个IP地址/主机。

这里有一个技巧可以让解决方案与AWS的主机名一起正常工作吗?

我真的不想在我的两台服务器之间设置一个代理,只是给它们一个静态IP。我查看了AWS弹性IP,但无法将它们分配给RDS实例。

postgresql amazon-web-services authentication amazon-rds
2个回答
2
投票

在验证pg_hba.conf时,Postgresql首先执行反向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并向postgres发送一个SIGHUP信号。这不是最漂亮的解决方案,但应该允许它半自动工作。如果不需要该连接的停机时间,那么这不太可能是理想的解决方案。


-1
投票

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

另一种可能性是使用动态DNS提供程序。我之前没有想过这个,因为它基本上只在你想在家里使用使用DHCP的连接托管服务器时使用,所以我实际上并不知道它有多好用。

实质上:

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

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

一些潜在的问题(除了传播延迟):

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

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

不过,这是一个权宜之计。我认为VPN和代理解决方案绝对是更强大的选择。

© www.soinside.com 2019 - 2024. All rights reserved.