Как аутентифицировать пользователя AWS на конкретном хосте внутри частного облака - PullRequest
0 голосов
/ 02 марта 2019

Скажем, у меня в подвале есть сервер, который я хочу скопировать в базу данных 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

И когда ясделать обратный DNS-запрос на 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.

Итак, я понял, что не удается разрешить IP-адрес соединения обратно на имя хоста, которое я поместил в свой файл pg_hba.confмог бы поместить туда имя корневого домена следующим образом:

hostssl all             replica         .rds.amazonaws.com    md5

Но такой тип поражает цель ограничения одним IP-адресом / хостом, если все AWS могут подключаться кмой сервер.

Есть ли здесь какой-то прием, чтобы разрешить правильную работу разрешения с именем хоста из AWS?

Я бы действительно не хотел настраивать прокси между двумя серверами, чтобыдать одному из них статический IP.Я посмотрел на эластичные IP-адреса AWS, но их нельзя назначить экземпляру RDS.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Воспроизведение (хех) этой идеи здесь и сейчас, когда я знаю, как на самом деле «отвечать» на вопросы по SO.

Другая возможность - использование динамического поставщика DNS.Я не думал об этом раньше, потому что он в основном используется, когда вы хотите разместить сервер дома, используя соединение, которое использует DHCP, поэтому я не знаю, насколько хорошо он будет работать.

По существу:

  1. Зарегистрируйтесь у провайдера ddns, например, DuckDNS.org.
  2. Они предоставляют вам поддомен в одном из своих доменов, например, flp.duckdns.org.
  3. Выустановить клиент обновления на сервере.
  4. Клиент обновления (в основном, демон) проверяет наличие обновлений IP-адресов, а затем уведомляет поставщика об изменении IP-адреса.
  5. Поставщик обновляет запись A.на их серверах имен, чтобы отразить изменение.

Я думаю, что обновление должно быть почти немедленным, но я не уверен, ограничена ли задержка распространения именами хостов или если записи A фактически кэшируются по пути(таким образом обходя поиск сервера имен).

Пара потенциальных проблем (помимо задержек распространения):

  1. Будет ли клиент обновления сохранен между reboots, миграции или другие действия AWS?Это в основном вопрос, который у меня возник, потому что я не знаю, как можно настроить / управлять фактическими экземплярами ec2, используемыми для RDS.Возможно ли даже установить что-то дополнительное на сервер?
  2. Могут возникнуть проблемы с обратным поиском DNS, когда IP-адрес разрешается на несколько имен хостов.Это может быть потенциально решено с помощью нескольких сетевых интерфейсов с разными внешними IP-адресами, но мы вернулись к большему количеству изменений инфраструктуры.

Я думаю, что проблему № 1 можно решить с помощью довольно простой лямбда-функции и триггеров событийесли бы у динамического DNS-провайдера был API.

Хотя это немного временное решение.Я думаю, что VPN и прокси-решения, безусловно, являются более надежными вариантами.

0 голосов
/ 10 марта 2019

Postgresql сначала выполняет обратный поиск DNS при проверке pg_hba.conf.Поэтому важно, что такое обратный 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.Это потребует какой-то VPN-настройки между VPC и вашим сервером.

В зависимости от типа сетевого оборудования, установленного в подвале, вы можете использовать AWS Site-to-Site VPN .В качестве альтернативы вы можете использовать другие решения, такие как OpenVPN или WireGuard .

Вариант 2 - Динамическое обновление pg_hba.conf

Если вы не хотите дополнительной сложности VPN.Вы можете иметь скрипт каждые 5 минут, запрашивать имя хоста my-db.random-string.us-west-2.rds.amazonaws.com, а затем обновлять pg_hba.conf по мере необходимости и отправлять сигнал SIGHUP в postgres.Это не самое симпатичное решение, но должно позволить ему работать полуавтоматически.Если для этого соединения не требуется простои, это вряд ли будет идеальным решением.

...