Я создал VPC и внутри него экземпляр RDS. Экземпляр RDS общедоступный и его настройки следующие:
Группа безопасности, прикрепленная к экземпляру RDS, принимает весь трафик:
Все мои сетевые ACL принимают весь трафик. Однако я не могу получить доступ к своему экземпляру с машины за пределами моего VPC. Я получаю следующую ошибку:
root@vps151014:~# mysql -h mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com -P 3306 -u skullberry -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'mysql1.xxxxxxxxxxxx.eu-west-1.rds.amazonaws.com' (110)
Если я запустил ту же команду из EC2 внутри моего VPC, я смогу подключиться. Я пробовал подключиться с нескольких машин, все они без брандмауэра (т. Е. Открыт порт 3306).
Мне явно чего-то не хватает, но вроде все настроено правильно. В чем может быть проблема?
Чтобы экземпляр RDS в VPC был «общедоступным» (Интернет), все подсети, к которым он подключен, должны быть «общедоступными» - в отличие от «частных» - подсетей VPC.
Общедоступная подсеть, по сути, определяется как подсеть, которая имеет объект Интернет-шлюз (igw-xxxxxxxx) в качестве маршрута к "Интернету" или, по крайней мере, к любым адресатам в Интернете, к которым вам необходимо получить доступ. Обычно это адрес назначения 0.0.0.0/0
. Общедоступные подсети должны использоваться для экземпляров (включая RDS), которые будут иметь связанный общедоступный IP-адрес, и не должны использоваться для экземпляров, которые не будут иметь общедоступных IP-адресов, поскольку частные адреса не работают в Интернете без преобразования.
В частной подсети, напротив, настроена таблица маршрутизации для достижения адресатов в Интернете через другой экземпляр EC2, обычно экземпляр NAT. Это отображается в таблице маршрутов VPC, связанной с этой подсетью, как i-xxxxxxxx, а не как «igw». Этот компьютер (который, по сути, будет находиться в другой подсети, чем те, для которых он действует как пункт назначения маршрута) служит транслятором, позволяя экземплярам с частным IP-адресом прозрачно выполнять исходящие интернет-запросы с использованием общедоступного компьютера NAT. IP для их интернет-нужд. Экземпляры с общедоступным IP-адресом не могут правильно взаимодействовать с Интернетом, если они подключены к частной подсети.
В конкретном случае здесь подсети, связанные с экземпляром RDS, на самом деле не были настроены как что-то, что можно было бы просто классифицировать как частную или общедоступную подсеть, потому что в подсети вообще не было маршрута по умолчанию. Добавление маршрута по умолчанию через объект «igw» или, как это сделал OP, добавление статического маршрута к IP-адресу Интернета, где требовалось подключение, в таблицу маршрутов VPC для подсетей устраняет проблему с подключением.
Однако ... Если вы столкнулись с подобной проблемой, вы не можете просто изменить таблицу маршрутов или создать новые таблицы маршрутов и связать с ними подсети, если только у вас нет ничего, что уже правильно работает в подсетях, потому что изменение может быть разумным. ожидается, что разорвет существующее соединение. В этом случае правильным курсом было бы предоставить экземпляры в разных подсетях с правильными записями в таблице маршрутов.
При настройке VPC идеально четко определить роли подсети и полностью предоставить необходимые маршруты при первом вводе VPC в эксплуатацию. Также важно помнить, что вся «LAN» VPC является программно определяемой сетью. В отличие от физической сети, где маршрутизатор может стать узким местом, и часто имеет смысл размещать машины с интенсивным трафиком среди них в одной подсети ... трафик, пересекающий подсети, не имеет недостатка в производительности в VPC. Машины должны быть размещены в подсетях, соответствующих потребностям IP-адресации машины - общедоступный адрес, общедоступная подсеть; нет публичного адреса, частная подсеть.
Более подробное обсуждение логистики частных / общедоступных подсетей в VPC можно найти в Зачем нужна частная подсеть в VPC (при переполнении стека).
Здесь уже есть отличный ответ, но AWS создает для вас общедоступную подсеть, когда вы выбираете вариант «общедоступный». Скорее для меня проблема заключалась в группе безопасности VPC по умолчанию. Я смотрел на Сетевой ACL правила - не Группа безопасности. (Выбор параметра «общедоступный» в RDS добавляет группу безопасности, но не добавляет автоматически правила для входящих подключений.)
Щелкните RDS, определите и щелкните группу безопасности. Затем в разделе «Правила для входящих подключений» добавьте порт 3306 и добавьте свой IPV4-адрес для подключения, x.x.x.x / 32 (или 0.0.0.0/32 - если вы хотите, чтобы подключался весь Интернет, но будьте осторожны с этим).
Также убедитесь, что сеть, к которой вы подключены, не блокирует подключения к другому серверу через порт 3306. Так было со мной при подключении к моей корпоративной сети.