Следуя шаблону rposcibed здесь: Сценарий 3: VPC с общедоступными и частными подсетями и аппаратным доступом к VPN
Краткое описание: Я настроил VPC с 1 общедоступной подсетью и 2 частными подсетями Каждая подсеть находится в другой зоне доступности. Есть две таблицы маршрутов: 1 для общедоступной подсети и 1 для 2 частных подсетей. Есть два NACL: 1 для общедоступной подсети и 1 для 2 частных подсети Есть интернет-шлюз (направленный в общедоступную подсеть) Есть группа безопасности для экземпляров EC2 Есть группа безопасности для экземпляров RDS У меня есть экземпляр EC2 Apache / Tomcat с веб-приложением в публичной подсети У меня есть RDS База данных PostgreSQL развернута в 2 частных подсетях (несколько зон доступности = ДА)
Вот что я умею:
Я могу подключиться к экземпляру EC2 по SSH
Я могу получить доступ к приложению Tomcat Manager через порт 80
Я могу развернуть военный файл (мое приложение)
Если я сделаю частные подсети общедоступными и установлю группы безопасности и NACL соответственно, я могу получить доступ к базе данных postgresql с помощью PGAdmin и запустить приложение со своего рабочего стола, используя конечную точку экземпляра RDS в качестве хоста. Итак, база данных в хорошем состоянии и доступна.
Вот что не получается:
Когда я развертываю свое приложение в Tomcat и пытаюсь получить доступ к базе данных, он терпит неудачу: org.postgresql.util.PSQLException: соединение отклонено. Убедитесь, что имя хоста и порт указаны правильно и что почтмейстер принимает соединения TCP / IP.
Когда я проверяю связь с конечной точкой 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
Если вы что-то знаете об этом (возможно, вы сетевой инженер), вы, вероятно, сразу поймете, в чем проблема.
Проблема кроется в следующих концепциях:
Об этом читайте здесь:
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
Это рабочая конфигурация. Надеюсь, это кому-то поможет. Если вы увидите что-то, что можно улучшить, дайте мне знать и дайте мне знать, если у вас есть вопросы.