Назад | Перейти на главную страницу

Публичные частные подсети AWS VPC - экземпляр EC2 не может подключиться к экземпляру RDS

Следуя шаблону rposcibed здесь: Сценарий 3: VPC с общедоступными и частными подсетями и аппаратным доступом к VPN

Краткое описание: Я настроил VPC с 1 общедоступной подсетью и 2 частными подсетями Каждая подсеть находится в другой зоне доступности. Есть две таблицы маршрутов: 1 для общедоступной подсети и 1 для 2 частных подсетей. Есть два NACL: 1 для общедоступной подсети и 1 для 2 частных подсети Есть интернет-шлюз (направленный в общедоступную подсеть) Есть группа безопасности для экземпляров EC2 Есть группа безопасности для экземпляров RDS У меня есть экземпляр EC2 Apache / Tomcat с веб-приложением в публичной подсети У меня есть RDS База данных PostgreSQL развернута в 2 частных подсетях (несколько зон доступности = ДА)

Вот что я умею:

  1. Я могу подключиться к экземпляру EC2 по SSH

  2. Я могу получить доступ к приложению Tomcat Manager через порт 80

  3. Я могу развернуть военный файл (мое приложение)

  4. Если я сделаю частные подсети общедоступными и установлю группы безопасности и NACL соответственно, я могу получить доступ к базе данных postgresql с помощью PGAdmin и запустить приложение со своего рабочего стола, используя конечную точку экземпляра RDS в качестве хоста. Итак, база данных в хорошем состоянии и доступна.

Вот что не получается:

  1. Когда я развертываю свое приложение в Tomcat и пытаюсь получить доступ к базе данных, он терпит неудачу: org.postgresql.util.PSQLException: соединение отклонено. Убедитесь, что имя хоста и порт указаны правильно и что почтмейстер принимает соединения TCP / IP.

  2. Когда я проверяю связь с конечной точкой RDS (DNS-именем), она правильно разрешается в частный IP-адрес, но не может достичь узла (ВСЕ трафик включен в NACL и группах безопасности).

Таким образом, я могу получить доступ к экземплярам EC2 и RDS со своего рабочего стола из общедоступного Интернета, но я не могу позволить им подключаться друг к другу из VPC.

Я установил все NACL и группы безопасности на максимальную разрешающую способность, просто чтобы установить успешное соединение. Но даже это не работает.

Немного позже я включу соответствующие детали. Если у кого-то есть предложения о том, что проверить, буду очень признателен !!!

Спасибо


Я наконец-то понял. Я закончу описывать проблему и дам ответ. Проблема была связана с NALCS и группами безопасности, поэтому я поделюсь только этими деталями. Маршруты и интернет-шлюз были простыми.

VPC NACL

In Bound
80  0.0.0.0/0 Allow
Out Bound
All 0.0.0.0/0 Allow

Публичная подсеть NACL

InBound
80  0.0.0.0/0 Allow
Out Bound
All 0.0.0.0/0 Allow
5432    172.30.4.0/24 Allow (PostgreSQL)

NACL частной подсети

InBound
5432    172.30.1.0/24 Allow
Out Bound
5432    172.30.1.0/24 Allow 

Группа безопасности VPC

InBound
80  VPC-Security-Group-ID Allow
Out Bound
All 0.0.0.0/0 Allow

Группа безопасности публичной подсети

InBound
80  0.0.0.0/0 Allow
Out Bound
5432    172.30.4.0/0 Allow

Группа безопасности частной подсети

InBound
5432    172.30.1.0/24 Allow
Out Bound
5432    172.30.1.0/24 Allow 

Если вы что-то знаете об этом (возможно, вы сетевой инженер), вы, вероятно, сразу поймете, в чем проблема.
Проблема кроется в следующих концепциях:

  • Эфемерные порты
  • Без сохранения состояния и с сохранением состояния
  • Отслеживание подключений
  • NACL не имеют гражданства
  • Группы безопасности отслеживают состояние

Об этом читайте здесь:

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Security.html

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_SecurityGroups.html

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html

https://en.wikipedia.org/wiki/Ephemeral_port

Исправленная конфигурация ниже. Изменение, которое действительно исправляло связь между общедоступной и частной подсетями, включало ответный трафик на эфемерных портах как для правил NACL для входящей общедоступной подсети, так и для правил NACL для исходящей частной подсети. Я также убрал некоторые избыточные и небезопасные правила Out Bound в NACLS и группах безопасности.

VPC NACL

In Bound
80  0.0.0.0/0 Allow
Out Bound
32768-65535 0.0.0.0/0 Allow

Публичная подсеть NACL

InBound
80  0.0.0.0/0 Allow
32768-65535 172.30.4.0/0 Allow
Out Bound
32768-65535 0.0.0.0/0 Allow
5432    172.30.4.0/24 Allow (PostgreSQL)

NACL частной подсети

InBound
5432    172.30.1.0/24 Allow
Out Bound
32768-65535 172.30.1.0/24 Allow 

Группа безопасности VPC

InBound
80  VPC-Security-Group-ID Allow
Out Bound

Группа безопасности публичной подсети

InBound
80  0.0.0.0/0 Allow
Out Bound
5432    172.30.4.0/0 Allow

Группа безопасности частной подсети

InBound
5432    172.30.1.0/24 Allow
Out Bound

Это рабочая конфигурация. Надеюсь, это кому-то поможет. Если вы увидите что-то, что можно улучшить, дайте мне знать и дайте мне знать, если у вас есть вопросы.