Этот пост изначально появился В моем блоге
RDS экземпляры в AWS не получают статический IP -адрес. Обычно это хорошая вещь, а не проблема. Это обеспечивает гибкость для сохранения доступности, в то время как физический хост RDS может сдвигаться для изменения размера или сбой в другую зону доступности (AZ). В любом случае, клиенты подключаются к RDS от HostName, и AWS волшебным образом обновляет имя хоста, чтобы указать на IP -адрес для активного хоста в настоящее время.
Единственный раз, когда это создает проблему, — это когда вы хотите подключиться к RDS из частной/корпоративной сети и необходимо обновить конфигурацию брандмауэра или туннеля VPN, чтобы позволить соединения с RDS. Если это не проблема для вас, вы можете перестать читать это.
Проблема заключается в правилах брандмауэра, туннелях VPN и NAT, и NAT правили, все работают по IP -адресам, а не на именах хостов. Вы не можете настроить свой брандмауэр для разблокировки трафика на экземпляр RDS, если вы не знаете его IP -адрес.
Обходной путь, который я обнаружил, заключалась в том, чтобы поместить сервер EC2 перед RDS в качестве прокси TCP. Вы можете дать статический IP -адрес экземпляру EC2 с Privateipaddress
свойство Aws:: ec2:: ancess
, или с Aws:: ec2:: eipassociation
Ресурс для статического общедоступного IP. Затем вы используете этот экземпляр EC2, чтобы перенаправить трафик в экземпляр RDS с помощью имени хоста. IP -адрес экземпляра EC2 становится статическим IP базы данных для целей брандмауэра.
Есть много разных способов перенаправить трафик от EC2 на RDS. Вы можете выбрать тот, который вам лучше всего подходит:
Socat
: например,SOCAT TCP-Listen, [Port], Fork, Reuseaddr TCP: [HOSTNAME]: [PORT]
Анкет- Плюсы: простой и удобный, простой в установке с
Yum установить Socat
Анкет - Минусы: не широко известно; Форки процесса на соединение, так что не подходит для большего объема
- Плюсы: простой и удобный, простой в установке с
Хапрокс
- Плюсы: надежный, масштабируемый
- Минусы: пакеты AWS Linux Не включайте последнюю версию с разрешением DNS Runtime ; Должен быть построен из источника, и даже тогда требуется некоторые конформы, чтобы разрешить имена хостов во время выполнения.
nginx
- Плюсы: Вы, возможно, уже используете его
- Минусы: излишний для портора
ssh
Перенаправление порта- Плюсы: широко понятно, SSH/SSHD уже установлен по умолчанию
- Минусы: требует установления и аутентификации соединения SSH, которое является избыточным, когда вы только хочу пересылку порта
На настройке группы безопасности : Поместите экземпляр EC2 и экземпляр RDS в две разные группы безопасности, а затем эти группы безопасности могут ссылаться друг на друга. Это идеальный вариант использования для CloudFormation’s AWS:: EC2:: SecurityGroupingRessress и AWS:: EC2:: SecurityGrougeGress
Ресурсы («Обычно для разрешения групп безопасности для ссылки друг на друга»). Поскольку вы не знаете IP -адрес экземпляра RDS, вы можете обратиться к группе безопасности экземпляра RDS. Группа безопасности EC2 будет иметь выходное правило для RDS Security Group и наоборот.
Иначе это хорошая идея, чтобы заблокировать группу безопасности EC2. Экземпляр EC2 должен разрешать только исходящий доступ к целевому экземпляру RDS и DNS для разрешения имени хоста. Экземпляр RDS должен разрешать входящий доступ только через прокси EC2.
Другие советы по облачной форме : Держите экземпляр EC2 в стеке сам по себе, чтобы его можно было восстановить независимо. Вы можете сделать перекрестные ссылки на экземпляр RDS из стека EC2. Кроме того, вы можете поместить сценарий в UserData
Свойство в EC2, чтобы внедрить имя хоста RDS (из ссылки на перекрестное стек) в файлы конфигурации Upstart ( /etc/init/your-proxy-service.conf
) Таким образом, ваша прокси -сервис будет автоматически начнеться на загрузке и обратится к правильному имени хоста.
Оригинал: «https://dev.to/wrschneider/ec2-proxy-to-rds-for-a-static-ip-address-11i8»