我正在使用MVC开发一个应用程序,该应用程序使用远程数据库(RDS amazon
)来填充应用程序的数据。在本地运行应用程序一切正常。当我将应用程序部署到EC2 instance
时,问题就出现了,我的在线应用程序无法访问RDS database
。启用EC2 instance
RDS database
的正确程序是什么?我的安全组具有所有流量和任何地方启用的入站和出站权限。
答案 0 :(得分:3)
我无法连接到我的Amazon RDS数据库实例。
尝试从不在VPC中的EC2实例进行连接时, 数据库实例的安全组未配置为允许访问 EC2实例。
如果尝试从EC2 classic实例连接失败,请从数据库实例安全组授予用户访问权限。有关更多信息,请查看以下内容:
如果要从Amazon EC2实例访问数据库实例,则必须首先确定您的EC2实例和数据库实例是否在VPC中。如果您使用的是默认VPC,则可以在创建或修改EC2实例将访问的数据库实例时分配用于EC2实例的相同EC2或VPC安全组。
如果您的数据库实例和EC2实例不在VPC中,则必须使用允许来自Amazon EC2实例的流量的入口规则配置数据库实例的安全组。您可以通过将EC2实例的Amazon EC2安全组添加到数据库实例的数据库安全组来完成此操作。在此示例中,您将入口规则添加到Amazon EC2安全组的数据库安全组。
将入口规则添加到Amazon EC2的数据库安全组 安全组仅授予从Amazon EC2访问您的数据库实例的权限 与该Amazon EC2安全组关联的实例。
您无法授权其中的Amazon EC2安全组 与您的数据库实例不同的AWS区域。您可以授权IP 范围,或在同一区域中指定Amazon EC2安全组 指另一个地区的IP地址。如果您指定IP范围,我们 建议您使用Amazon EC2的私有IP地址 实例,它提供来自您的亚马逊的更直接的网络路由 EC2实例到您的Amazon RDS数据库实例,并且不会发生 在亚马逊网络外发送的数据的网络费用。
将EC2安全组添加到数据库安全组
登录AWS管理控制台并在https://console.aws.amazon.com/rds/打开Amazon RDS控制台。
从控制台窗口左侧的导航窗格中选择安全组。
选择要授予访问权限的数据库安全组的详细信息图标。
要授予对Amazon EC2安全组的访问权限,请使用AWS CLI命令authorize-db-security-group-ingress。
示例强>
aws rds authorize-db-security-group-ingress \
--db-security-group-name default \
--ec2-security-group-name myec2group \
--ec2-security-group-owner-id 987654321021
aws rds authorize-db-security-group-ingress ^
--db-security-group-name default ^
--ec2-security-group-name myec2group ^
--ec2-security-group-owner-id 987654321021
该命令应产生类似于以下内容的输出:
SECGROUP Name Description
SECGROUP default default
EC2-SECGROUP myec2group 987654321021 authorizing
要授权对Amazon EC2安全组进行网络访问,请使用以下参数调用该Amazon RDS API函数http://docs.aws.amazon.com//AmazonRDS/latest/APIReference/API_AuthorizeDBSecurityGroupIngress.htmlAuthorizeDBSecurityGroupIngress:
EC2SecurityGroupName = myec2group
EC2SecurityGroupOwnerId = 987654321021
实施例
https://rds.amazonaws.com/
?Action=AuthorizeDBSecurityGroupIngress
&EC2SecurityGroupOwnerId=987654321021
&EC2SecurityGroupName=myec2group
&Version=2009-10-16
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&Timestamp=2009-10-22T17%3A10%3A50.274Z
&AWSAccessKeyId=<AWS Access Key ID>
&Signature=<Signature>
答案 1 :(得分:0)
请检查以下内容是否已完成。
答案 2 :(得分:0)
默认情况下,RDS不允许在安全组(SG)中未指定任何连接。您可以根据CIDR地址或亚马逊帐号允许,该帐号允许该帐户下的任何EC2访问它。
但也要检查:
(路由组是我的问题;在创建新子网时,我忽略了将其添加到带网关的路由组。)