在EC2实例上运行的MVC应用程序无法访问RDS数据库

Jul*_*ira 6 asp.net-mvc amazon-ec2 amazon-web-services amazon-rds

我正在使用MVC开发一个应用程序,它使用远程数据库(RDS amazon)来填充应用程序的数据.在本地运行应用程序一切正常.当我将应用程序部署到一个时EC2 instance,问题就出现了,我的在线应用程序无法访问RDS database.启用操作的正确程序EC2 instanceRDS database什么?我的安全组具有所有流量和任何地方启用的入站和出站权限.

Sky*_*ker 4

如何解决连接到 Amazon RDS 数据库实例的问题?

\n\n

问题

\n\n
\n

我无法连接到我的 Amazon RDS 数据库实例。

\n
\n\n

你的问题:

\n\n
\n

尝试从不在 VPC 中的 EC2 实例进行连接时,数据库实例的安全组未配置为允许 EC2 实例进行访问。

\n
\n\n

解决方案:

\n\n

如果尝试从 EC2 经典实例连接失败,请从数据库实例安全组授予用户访问权限。欲了解更多信息,请检查以下内容:

\n\n

如果您想要从 Amazon EC2 实例访问数据库实例,您必须首先确定您的 EC2 实例和数据库实例是否位于 VPC 中。如果您使用默认 VPC,则在创建或修改 EC2 实例将访问的数据库实例时,可以分配用于 EC2 实例的相同 EC2 或 VPC 安全组。

\n\n

如果您的数据库实例和 EC2 实例不在 VPC 中,您必须使用允许来自 Amazon EC2 实例的流量的入口规则配置数据库实例的安全组。您可以通过将 EC2 实例的 Amazon EC2 安全组添加到数据库实例的数据库安全组来执行此操作。在此示例中,您将入口规则添加到 Amazon EC2 安全组的数据库安全组。

\n\n

重要的

\n\n
\n

将入口规则添加到 Amazon EC2\n 安全组的数据库安全组仅授予与该 Amazon EC2 安全组关联的 Amazon EC2\n 实例对数据库实例的访问权限。

\n\n

您无法授权与您的数据库实例位于不同 AWS 区域的 Amazon EC2 安全组。您可以授权 IP 范围,或在同一区域中指定引用另一个区域中的 IP 地址的 Amazon EC2 安全组。如果您指定 IP 范围,我们建议您使用 Amazon EC2 实例的私有 IP 地址,这会提供从 Amazon EC2 实例到 Amazon RDS 数据库实例的更直接的网络路由,并且不会在亚马逊网络之外发送的数据会产生\n 网络费用。

\n
\n\n

AWS 管理控制台

\n\n

将 EC2 安全组添加到数据库安全组

\n\n
    \n
  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. \n
  3. 从控制台窗口左侧的导航窗格中选择安全组。

  4. \n
  5. 选择要授予访问权限的数据库安全组的详细信息图标。

  6. \n
\n\n

在此输入图像描述

\n\n
    \n
  1. 在安全组的详细信息页面中,从连接类型下拉列表中选择 EC2 安全组,然后选择您要使用的 Amazon EC2 安全组。然后单击授权。
  2. \n
\n\n

在此输入图像描述

\n\n
    \n
  1. 在新的入口规则应用于与您修改的数据库安全组关联的所有数据库实例之前,入口规则的状态将为授权。成功应用入口规则后,状态将更改为已授权。
  2. \n
\n\n

命令行界面

\n\n

要授予对 Amazon EC2 安全组的访问权限,请使用 AWS CLI 命令authorize-db-security-group-ingress。

\n\n

例子

\n\n

对于 Linux、OS X 或 Unix:

\n\n
aws rds authorize-db-security-group-ingress \\\n    --db-security-group-name default  \\\n    --ec2-security-group-name myec2group \\\n    --ec2-security-group-owner-id 987654321021 \n
Run Code Online (Sandbox Code Playgroud)\n\n

对于 Windows:

\n\n
aws rds authorize-db-security-group-ingress ^\n    --db-security-group-name default  ^\n    --ec2-security-group-name myec2group ^\n    --ec2-security-group-owner-id 987654321021\n
Run Code Online (Sandbox Code Playgroud)\n\n

该命令应产生类似于以下内容的输出:

\n\n
SECGROUP  Name     Description \nSECGROUP  default  default\n      EC2-SECGROUP  myec2group  987654321021  authorizing\n
Run Code Online (Sandbox Code Playgroud)\n\n

应用程序编程接口

\n\n

要授权对 Amazon EC2 安全组的网络访问,请使用以下参数调用 Amazon RDS API 函数http://docs.aws.amazon.com//AmazonRDS/latest/APIReference/API_AuthorizeDBSecurityGroupIngress.htmlAuthorizeDBSecurityGroupIngress :

\n\n
EC2Security\xc2\xadGroupName = myec2group\n\nEC2SecurityGroupOwnerId = 987654321021\n
Run Code Online (Sandbox Code Playgroud)\n\n

例子

\n\n
https://rds.amazonaws.com/\n    ?Action=AuthorizeDBSecurityGroupIngress\n    &EC2SecurityGroupOwnerId=987654321021\n    &EC2Security\xc2\xadGroupName=myec2group\n    &Version=2009-10-16\n    &SignatureVersion=2\n    &SignatureMethod=HmacSHA256\n    &Timestamp=2009-10-22T17%3A10%3A50.274Z\n    &AWSAccessKeyId=<AWS Access Key ID>\n    &Signature=<Signature> \n
Run Code Online (Sandbox Code Playgroud)\n\n

资源链接:

\n\n
    \n
  1. 如何解决连接到 Amazon RDS 数据库\实例的问题?
  2. \n
  3. 授权从 Amazon EC2 对数据库实例进行网络访问\n实例
  4. \n
\n