
Я создал два экземпляра EC2 в одной и той же AZ и на одной и той же учетной записи. Они используют разные группы безопасности. Я хочу, чтобы экземпляр A принимал соединения на определенном порту только от экземпляра B.
Я не верю, что эти экземпляры — VPC, но не знаю, как подтвердить. Я не смог изменить группу безопасности, что заставляет меня думать, что они не VPC.
В группе безопасности, например, AI добавил правило для порта и использовал публичный IP /32 экземпляра B для источника. Затем я попытался подключиться из экземпляра B, используя публичный IP экземпляра A, но попытка подключения сразу же завершилась неудачей.
Я попробовал те же шаги с частным IP каждого экземпляра. Что я упускаю?
Вот статья, которая отвечает на аналогичный вопрос, но с участием VPC:Невозможно подключиться к экземпляру EC2 в VPC (Amazon AWS).
Оба экземпляра имеют одинаковый идентификатор VPC и идентификатор подсети.
Я также попробовал установить в качестве источника группу безопасности экземпляра B, но это тоже не сработало.
Я пытаюсь сделать это с помощью mysql. Клиент mysql, запущенный на экземпляре B, немедленно завершился с ошибкой:
ОШИБКА 2003 (HY000): Невозможно подключиться к серверу MySQL на «54.xx.xx.xx» (113)
Чтобы убедиться, что проблема не в настройке mysqld, я попробовал сделать то же самое с ICMP Echo Reply, но это тоже не сработало.
Редактировать Благодаря первоначальным ответам я смог подтвердить, что эти два экземпляра работают в VPC (перейдя в консоль VPC). Итак, мой вопрос очень похож на связанную статью. Но в этом случае проблема была в том, что экземпляры не были экземплярами по умолчанию, поэтому не были созданы правильный маршрут и подсеть. Вот как настроен мой VPC: VPC является экземпляром по умолчанию и имеет связанную с ним таблицу маршрутизации. Таблица маршрутизации неявно связана с подсетью, связанной с VPC. Таблица маршрутизации имеет в себе один маршрут, а цель — «локальная».
Они все создаются по умолчанию, поскольку, как я понимаю, документы должны позволять двум экземплярам подключаться друг к другу. Что я (все еще) упускаю?
решение1
Я решил эту проблему с помощью техподдержки AWS. Вот информация для будущих новичков вроде меня:
Проблема была в том, что iptables был запущен на экземпляре B и не пропускал трафик. Я узнал, что для экземпляров EC2 есть два уровня брандмауэра: группы безопасности (управляемые на консоли AWS) и iptables (управляемые на хосте). Существуют причины использовать iptables, например https://wincent.com/wiki/Использование_iptables_на_экземплярах_EC2
Большую часть времени вам не нужно беспокоиться об использовании брандмауэра на уровне хоста, такого как iptables, при работе Amazon EC2, поскольку Amazon позволяет вам запускать экземпляры внутри «группы безопасности», которая фактически является политикой брандмауэра, которую вы используете для указания того, каким соединениям из внешнего мира должен быть разрешен доступ к экземпляру. Однако это подход «белого списка», и его нелегко использовать для целей «черного списка» на работающем экземпляре.
В моем случае мне не нужен брандмауэр на уровне хоста, поэтому я отключил iptables:
sudo service chkconfig stop
sudo chkconfig iptables off
Вот некоторые результаты, которые я получил по комментариям, опубликованным по этому вопросу:
- подключение с частным ip сработало
- подключение с частным DNS-именем сработало
- подключение с публичным ip сработало
- подключение к публичному EIP сработало
- подключение к публичному DNS сработало, но как сказал Чад Смит в своем ответе DNS возвращаетчастныйIP для этого имени
Причина, по которой это сработало для меня на другом экземпляре, заключается в том, что образ, который я использовал в том экземпляре, не запускал iptables — все образы разные. Образ, который я использовал в этом случае, использовал iptables для запрета всех соединений, кроме SSH.
решение2
Немного не по теме, но это единственный результат поиска по этой проблеме.
У нас была похожая проблема, но наши существующие экземпляры были перезагружены и внезапно перестали общаться. Оказалось, что в группе безопасности было слишком много правил — просто удалялись некоторые разрешенные коммуникации для возобновления. До перезагрузки все работало, потому что правила добавляются со временем автоматическими вызовами API.
Надеюсь, это поможет кому-нибудь в будущем.
решение3
Если вы не можете изменить настройки безопасности запущенных экземпляров, они НЕ запускаются в VPC.
Даже для экземпляров не в VPC, EC2 запускает их в частных сетях, которые взаимосвязаны. Поэтому вам следует указатьчастный IP-адресэкземпляра B в группе безопасности экземпляра A.
решение4
AWS имеет отдельные группы безопасности для экземпляров VPC и не-VPC, поэтому вам нужно каким-то образом выяснить, находитесь ли вы в VPC или нет (просто зайдите в консоль VPC и проверьте, видите ли вы там свои экземпляры), а затем убедитесь, что созданные вами группы безопасности находятся в одном контексте. Затем вы можете просто добавить группу безопасности A в группу безопасности B как доверенную и сделать наоборот. Таким образом вы просто разрешаете весь трафик между двумя хостами на отдельных портах (я предполагаю, что это было вашим намерением).