EC2 无法连接到 VPC 上的 RDS。子网问题?

EC2 无法连接到 VPC 上的 RDS。子网问题?

我能够使用适用于 Visual Studio 的 AWS 工具包部署我们的 .NET 应用程序。我手动设置了 RDS 数据库 (MySQL),并使用 elastic beanstalk (在 VPC 上设置) 部署了应用程序。问题是,当我在 EC2 实例上运行的应用程序上测试注册表单时,它不会将用户数据存储到 RDS 上的 MySQL 数据库中。但是,如果我在本地运行应用程序,它会将其存储在 RDS 上的数据库中。所以这让我相信这是 EC2 无法正确访问 RDS 的问题。

问题是我非常熟悉 EC-classic,但现在我的地区不允许它,我必须使用 VPC。

现在,我甚至无法连接到 RDS 数据库...我尝试过设置不同的 VPC,但没有成功。我觉得这与子网/安全组有关。我已允许所有 IP (0.0.0.0/0) 访问 SSH、HTTP、HTTPS、MYSQL(3600)...入站。出站允许所有 IP 访问所有端口。

答案1

由于 RDS 要求您在 VPC 中部署时拥有两个可用区域,因此您需要确保 beanstalk 能够通过网络 ACL 以及基于实例的安全组的权限访问它们。

只有您的 ELB 和 NAT 实例/NAT 网关需要是公共子网,其他所有内容都应该位于私有子网中。

安全组是有状态的,而网络组是无状态的,因此,虽然您只需要允许安全组的入站规则,但您需要使用网络 ACL 允许从 beanstalk 子网到两个 RDS 子网的入站和出站端口。请参阅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 的补充说明——许多服务不会在原始端口上响应,而是使用临时端口。因此,您可能必须将以下内容添加到具有 EC2 实例的子网的入站和出站网络 ACL 中:

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

还有几个有用的场景为您的 VPC 推荐的网络 ACL 规则

我希望这有帮助。

相关内容