AWS объединяет общедоступные RDS с Lambdas, выходящими в Интернет?
У меня есть VPC с 3 частными и одной общедоступной подсетями. В 3 частных подсетях я размещаю функции RDS и Lambda. В общедоступной подсети я размещаю шлюз NAT. 3 частные подсети указывают через таблицу маршрутизации на шлюз NAT. В рамках этой настройки мои функции Lambda успешно обмениваются данными с моим RDS и Интернетом, но я не могу получить доступ к RDS с моего домашнего компьютера, поскольку NAT блокирует внешний доступ к VPC. Мой вопрос сейчас:
Как я могу позволить функциям Lambda получить доступ к RDS в VPC и одновременно сделать RDS общедоступным с моего компьютера?
PS: до сих пор мне всегда приходилось вручную менять маршрутизацию моих 3-х частных подсетей на IGW, чтобы сделать RDS доступным.
3 ответа
Сначала уточнение: NAT не блокирует внешний доступ к VPC. Шлюз NAT просто обеспечивает доступ в Интернет к ресурсам вашего VPC, которые не имеют общедоступных IP-адресов. NAT не имеет отношения к вашей возможности внешнего доступа к VPC. На самом деле вы еще ничего не сделали, чтобы разрешить внешний доступ.
У вас есть следующие опции для внешнего доступа к вашему экземпляру RDS:
- Добавьте VPN-сервер к вашему VPC в общедоступной подсети, что позволит вам подключиться к RDS-серверу после установления VPN-подключения.
- Переместите сервер RDS в общедоступную подсеть и включите флаг "общедоступный", который позволит вам напрямую подключаться к серверу RDS.
- Создайте Linux Bastion Host в общедоступной подсети, который позволит вам подключаться к серверу RDS через переадресацию порта SSH.
В любом из этих сценариев, пока функция Lambda и экземпляр RDS находятся в одном и том же VPC, функция Lambda будет иметь доступ к экземпляру RDS. И пока функция Lambda остается в частной подсети с шлюзом NAT, она будет иметь доступ в Интернет.
Вам нужно создать Bastion Host в вашей общедоступной подсети. Хост Bastion обеспечивает подключение из общедоступного Интернета к вашим частным подсетям VPC.
Общий хост Bastion для AWS - OpenVPN. Вы можете найти предварительно сконфигурированные AMI в AWS Marketplace.
На gist.github есть руководство пользователя reggi
под названием Как настроить лямбда-функцию AWS для общения в интернете и VPC. Руководство проведет вас через шаги по настройке AWS Lambda для общения с Интернетом и VPC.
В комментариях вы можете найти решения для сложности подключения лямбда-данных к RDS и Интернету, в то же время поддерживая общедоступный RDS без VPN, часть этой информации содержится в комментариях. Я добавил эту информацию здесь на случай, если информация станет недоступной.
Чтобы позволить лямбдам иметь доступ к Интернету, доступ к RDS и сделать RDS общедоступным (возможно, в пределах определенного диапазона IP-адресов - т.е. вашего статического IP-адреса), группа подсетей вашей RDS должна содержать только общедоступные подсети; это подсети с таблицей маршрутов, которая указывает 0.0.0.0/0 на IGW, который подключен к вашему VPC. Вы должны создать группу подсетей в Amazon RDS > Группы подсетей, которая содержит общедоступные подсети, а затем запустить экземпляр RDS с этой новой группой подсетей (или настроить текущую систему в соответствии с этими спецификациями).
https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7