Amazon Relational Database Service
用户指南 (API Version 2014-10-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

在 VPC 中访问数据库实例的方案

Amazon RDS 支持以下在 VPC 中访问数据库实例的方案:

VPC 中的数据库实例由同一 VPC 中的 EC2 实例访问

VPC 中的 RDS 实例通常用于与在相同 VPC 中的 EC2 实例中运行的应用程序服务器共享数据。如果您使用 AWS Elastic Beanstalk 在相同的 VPC 中创建 EC2 实例和数据库实例,则此实例为创建的用户场景。

下图演示了此情形。

 VPC 和 EC2 安全组情况

要管理相同的 VPC 中 EC2 实例与数据库实例之间的访问的最简单方法是执行以下操作:

  • 创建您的数据库实例将位于其中的 VPC 安全组。此安全组可用于限制对数据库实例的访问权限。例如,您可为此安全组创建自定义规则,该规则允许使用您创建数据库实例时分配给该实例的端口以及您将用来访问数据库实例的 IP 地址进行 TCP 访问 (用于开发或其他目的)。

  • 创建您的 EC2 实例 (Web 服务器和客户端) 将位于其中的 VPC 安全组。如果需要,此安全组可允许通过 VPC 的路由表从 Internet 访问 EC2 实例。例如,您可设置此安全组的规则以允许通过端口 22 对 EC2 实例进行 TCP 访问。

  • 为您的数据库实例的安全组创建自定义规则,该规则允许从您为 EC2 实例创建的安全组连接。这将允许安全组的任何成员均可访问数据库实例。

有关演示如何为此方案创建包含公有子网和私有子网的 VPC 的教程,请参阅教程:创建 Amazon VPC 以用于 Amazon RDS 数据库实例

要在 VPC 安全组中创建允许从另一安全组连接的规则,请执行以下操作:

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon VPC 控制台:https://console.amazonaws.cn/vpc

  2. 在导航窗格中,选择 Security Groups

  3. 选择或创建您要允许另一个安全组的成员访问的安全组。在上述情况中,此安全组将是您用于数据库实例的安全组。选择 Add Rule

  4. Type 中,选择 All ICMP。在 Source 框中,开始键入安全组的 ID;此操作会为您提供一个安全组列表。选择您希望其成员可以访问此安全组保护的资源的安全组。在上述情况中,此安全组将是您用于 EC2 实例的安全组。

  5. 通过在 Source 框中创建 TypeAll TCP 的规则和安全组,对 TCP 协议重复这些步骤。如果您打算使用 UDP 协议,请在 Source 框中创建 TypeAll UDP 的规则和安全组。

  6. 通过您创建数据库实例时使用的端口 (如适用于 MySQL 的端口 3306) 创建允许访问的自定义 TCP 规则。输入您将在 Source 框中使用的安全组或 IP 地址。

  7. 完成后选择 Save

 将安全组添加到另一安全组的规则

VPC 中的数据库实例由另一 VPC 中的 EC2 实例访问

当您的数据库实例与您用来访问它的 EC2 实例位于不同的 VPC 中时,有多种方式可访问数据库实例。如果数据库实例和 EC2 实例位于不同的 VPC 但位于相同区域中,则可使用 VPC 对等。如果数据库实例与 EC2 实例位于不同区域中,则您必须使用数据库实例的公有 IP 进行访问。

下图演示了此情形。

 VPC 中的数据库实例由另一 VPC 中的 EC2 实例访问

VPC 对等连接是两个 VPC 之间的网络连接,通过此连接,您可以使用私有 IP 地址在这两个 VPC 之间路由流量。这两个 VPC 中的实例可以彼此通信,就像它们在同一网络中一样。您可以在您自己的 VPC 之间创建 VPC 对等连接,也可以在您自己的 VPC 与同一区域内其他 AWS 账户中的 VPC 之间进行创建。要了解有关 VPC 对等的更多信息,请参阅 VPC 文档

当您需要从 EC2 实例连接到位于不同的 VPC 和区域中的数据库实例时,请使用数据库实例的公有 IP。数据库实例必须允许公开访问、必须位于公有子网中,而且该子网必须有 Internet 网关。在创建数据库实例时,如果将 VPC 选项设置为 Create new VPC 并将 Publicly Accessible 选项设置为 Yes,则 Amazon RDS 将自动为数据库实例创建公有子网。

您可通过使用 ClassicLink 在 Amazon RDS 数据库实例 (在 VPC 中) 和 EC2 实例 (不在 Amazon VPC 中) 之间通信。当您使用 Classic Link 时,EC2 实例上的应用程序可使用数据库实例的 RDS 终端节点连接到数据库实例。ClassicLink 是免费提供的。

下图演示了此情形。

 VPC 中的数据库实例由不在 VPC 中的 EC2 实例访问

通过使用 ClassicLink,您可将 EC2 实例连接到逻辑上隔离的数据库 (在其中定义 IP 地址范围并控制访问控制列表 (ACL) 以管理网络通信)。您不必使用公有 IP 地址或隧道即可与 VPC 中的数据库实例通信。此方案将提供用于实例间通信的吞吐量更大且延迟更少的连接。

在 VPC 中的数据库实例与不在 VPC 中的 EC2 实例之间启用 ClassicLink

  1. 登录 AWS 管理控制台 并通过以下网址打开 Amazon VPC 控制台:https://console.amazonaws.cn/vpc

  2. 在导航窗格中,选择 Your VPCs

  3. 对于 VPC,请选择由数据库实例使用的 VPC。

  4. 对于 Actions 菜单,请选择 Enable ClassicLink。在确认对话框中,选择 Yes, Enable

  5. 在 EC2 控制台上,选择要连接到 VPC 中的数据库实例的 EC2 实例。

  6. 对于 Actions 菜单,请选择 ClassicLink,然后选择 Link to VPC

  7. Link to VPC 页上,选择要使用的安全组,然后选择 Link to VPC

VPC 中的数据库实例由通过 Internet 的客户端应用程序访问

要从通过 internet 的客户端应用程序访问 VPC 中的数据库实例,您可配置包含一个公有子网的 VPC 以及一个 Internet 网关以实现通过 Internet 通信。

下图演示了此情形。

 VPC 中的数据库实例由通过 Internet 的客户端应用程序访问

推荐以下配置:

  • 大小为 /16 的 VPC (例如,CIDR:10.0.0.0/16)。此大小提供了 65536 个私有 IP 地址。

  • 大小为 /24 的子网 (例如,CIDR:10.0.0.0/24)。此大小提供了 256 个私有 IP 地址。

  • 将 VPC 连接到 Internet 和其他 AWS 产品的 Internet 网关。

  • 一个带有子网范围内的私有 IP 地址 (例如:10.0.0.6) 的实例,这使该实例可与 VPC 中的其他实例进行通信;还有一个弹性 IP 地址 (例如:198.51.100.2),使得可从 Internet 访问该示例。

  • 允许子网中的实例与 VPC 中的其他实例通信的路由表条目;以及允许子网中的实例直接通过 Internet 建立通信的路由表条目。

有关更多信息,请参阅 VPC 文档中的场景 1。

不在 VPC 中的数据库实例由在 VPC 中的 EC2 实例访问

在您有一个在 VPC 中的 EC2 实例和不在 VPC 中的 RDS 数据库实例的情况下,您可通过公共 Internet 连接它们。

下图演示了此情形。

 不在 VPC 中的数据库实例由在 VPC 中的 EC2 实例访问

注意

ClassicLink (如VPC 中的数据库实例由不在 VPC 中的 EC2 实例访问中所述) 不可用于此方案。

要通过公共 Internet 连接数据库实例和 EC2 实例,请执行以下操作:

  • 确保 EC2 实例位于 VPC 的公有子网中。

  • 确保 RDS 数据库实例标记为可公开访问。

  • 此处为有关网络 ACL 的备注。网络 ACL 类似于您的整个子网的防火墙。因此,该子网中的所有实例受网络 ACL 规则的限制。默认情况下,网络 ACL 允许所有流量而且您通常无需担心它们,除非您特别希望添加规则作为额外一层安全保护。而另一方面,安全组与单独的实例关联,而且您需要担心安全组规则。

  • 向 RDS 数据库实例的数据库安全组添加必要的入口规则。

    入口规则指定了网络端口和 CIDR/IP 范围。例如,您可添加允许端口 3306 连接到 MySQL RDS 数据库实例以及 CIDR/IP 范围 203.0.113.25/32 的入口规则。有关更多信息,请参阅 从 IP 范围向数据库安全组授予网络访问权限

注意

如果您想将现有数据库实例移至 VPC 中,可使用 AWS 管理控制台轻松执行此操作。有关. 请参阅 将不在 VPC 中的数据库实例移动到 VPC 中.

不在 VPC 中的数据库实例由不在 VPC 中的 EC2 实例访问

当数据库实例或 EC2 实例上的应用程序均不在 VPC 中时,您可通过使用其终端节点和端口访问数据库实例。

下图演示了此情形。

 不在 VPC 中的数据库实例由不在 VPC 中的 EC2 实例访问

您必须为实例创建数据库安全组,允许从创建实例时指定的端口访问。例如,您可使用类似于结合使用 sqlplus 的连接字符串的连接字符串访问 Oracle 数据库实例:

PROMPT>sqlplus 'mydbusr@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<endpoint>) (PORT=<port number>))(CONNECT_DATA=(SID=<database name>)))'

有关更多信息,请参阅以下文档。

注意

如果您想将现有数据库实例移至 VPC 中,可使用 AWS 管理控制台轻松执行此操作。有关. 请参阅 将不在 VPC 中的数据库实例移动到 VPC 中.

不在 VPC 中的数据库实例由通过 Internet 的客户端应用程序访问

新的 Amazon RDS 客户只能在 VPC 中创建数据库实例。但是,您可能需要从通过 Internet 的客户端应用程序连接到不在 VPC 中的 Amazon RDS 数据库实例。

下图演示了此情形。

 不在 VPC 中的数据库实例由通过 Internet 的客户端应用程序访问

在此方案中,您必须确保 RDS 数据库实例的数据库安全组包括您的客户端应用程序连接所必需的入口规则。入口规则指定了网络端口和 CIDR/IP 范围。例如,您可添加允许端口 3306 连接到 MySQL RDS 数据库实例以及 CIDR/IP 范围 203.0.113.25/32 的入口规则。有关更多信息,请参阅 从 IP 范围向数据库安全组授予网络访问权限

警告

如果您要访问位于防火墙后的数据库实例,请与您的网络管理员联系以确定应使用的 IP 地址。

注意

如果您想将现有数据库实例移至 VPC 中,可使用 AWS 管理控制台轻松执行此操作。有关. 请参阅 将不在 VPC 中的数据库实例移动到 VPC 中.