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

EC2 не может подключиться к RDS на VPC. Проблемы с подсетью?

Мне удалось развернуть наше .NET-приложение с помощью набора инструментов AWS для Visual Studio. Я вручную настроил базу данных RDS (MySQL) и развернул приложение, используя эластичный beanstalk (настроенный на VPC). Проблема заключалась в том, что когда я тестировал форму регистрации в приложении, запущенном на экземпляре EC2, он не сохранял пользовательские данные в базе данных MySQL на RDS. Однако он сохранит его в БД на RDS, если я запустил приложение локально. Это привело меня к мысли, что проблема в том, что EC2 не имеет правильного доступа к RDS.

Проблема в том, что я был хорошо знаком с EC-classic, но теперь мой регион не позволяет этого, и мне приходится использовать VPC.

Теперь я даже не могу подключиться к базе данных RDS ... Я пытался настроить другой VPC вместе, но безуспешно. У меня такое ощущение, что это связано с подсетями / группами безопасности. Я разрешил всем IP (0.0.0.0/0) доступ к SSH, HTTP, HTTPS, MYSQL (3600) .. входящий. Исходящий IP-адрес разрешен для всех портов.

Поскольку RDS требует наличия двух зон доступности при развертывании в VPC, вам необходимо убедиться, что beanstalk может получить доступ к ним обеим через сетевые ACL, а также разрешения для групп безопасности на основе экземпляра.

Только ваш ELB и ваш NAT-экземпляр / NAT-шлюз должны быть общедоступными подсетями, все остальное должно быть в частных подсетях.

Группы безопасности имеют состояние, а сетевые группы не имеют состояния, поэтому, хотя вам нужно разрешить только входящие правила для групп безопасности, вам необходимо разрешить ОБЕИ входящие и исходящие порты из вашей подсети beanstalk в обе подсети RDS с использованием сетевых ACL. Видеть Безопасность в вашем VPC.

Вот образец eb create для создания среды beanstalk (замените строки в квадратных скобках):

eb create [BEANSTALK_ENVIRONMENT] --instance_type m3.medium --branch_default --cname [BEANSTALK_CNAME] --database --database.engine postgres --database.version [x] --database.size 100 --database.instance db.m4.large --database.password xxxxxxxxx --database.username ebroot --instance_profile [BEANSTALK_EC2_IAM_PROFILE] --keyname [SSH_KEY_NAME] --platform "64bit Amazon Linux 2015.03 v1.3.0 running Ruby 2.2" --region us-east-1 --tags tag1=value1,tag2=value2 --tier webserver --verbose --sample --vpc.id [vpc-xxxxxx] --vpc.dbsubnets [subnet-db000001,subnet-db000002] --vpc.ec2subnets [subnet-ec200001] --vpc.elbsubnets [subnet-elb00001] --vpc.elbpublic --vpc.securitygroups [sg-00000001] --sample --timeout 3600

subnet-db000001 ПРАВИЛА ACL СЕТИ:

Inbound: Port Range: 5432, Source [subnet-ec200001 (as ip range)], Allow
Outbound: Port Range: 5432, Source [subnet-ec200001 (as ip range)], Allow

subnet-db000002 ПРАВИЛА ACL СЕТИ:

Inbound: Port Range: 5432, Source [subnet-ec200001 (as ip range)], Allow
Outbound: Port Range: 5432, Source [subnet-ec200001 (as ip range)], Allow

subnet-ec200001 ПРАВИЛА ACL СЕТИ:

Inbound: Port Range: 5432, Source [subnet-db000001 (as ip range)], Allow
Inbound: Port Range: 5432, Source [subnet-db000002 (as ip range)], Allow
Outbound: Port Range: 5432, Source [subnet-db000001 (as ip range)], Allow
Outbound: Port Range: 5432, Source [subnet-db000002 (as ip range)], Allow

subnet-elb00001 ПРАВИЛА ACL СЕТИ:

Inbound: Port Range: 80, Source 0.0.0.0/0, Allow
Inbound: Port Range: 443, Source 0.0.0.0/0, Allow
Outbound: Port Range: 80, Source 0.0.0.0/0, Allow
Outbound: Port Range: 443, Source 0.0.0.0/0, Allow

Дополнительное примечание о сетевых ACL - многие службы не отвечают на исходный порт, но используют эфемерный порт. Таким образом, вам, возможно, придется добавить следующее во входящие и исходящие сетевые ACL для подсетей с экземплярами EC2:

Outbound: Port Range: 1024-65535, Source 0.0.0.0/0, Allow
Outbound: Port Range: 1024-65535, Source 0.0.0.0/0, Allow

Также есть несколько полезных сценариев в Рекомендуемые сетевые правила ACL для вашего VPC.

Надеюсь, это поможет.