为什么我不能在对等后从另一个VPC中的EC2实例连接AWS RDS实例

ddd*_*ddd 10 amazon-ec2 amazon-web-services amazon-rds amazon-vpc

我在VPC A中的EC2实例上运行Tableau Server.同时,我在另一个VPC B中创建了一个postgres RDS.现在我想在Tableau Server和RDS之间建立连接.RDS VPC的CIDR为172.31.0.0/16,EC2 VPC的CIDR为10.0.0.0/16.

根据VPC中的A DB实例,在不同VPC中由EC2实例访问,我在VPC A和VPC B,pcx-xyz123之间创建了对等关系.此外,我还为VPC创建了以下路由表.

RDS VPC
Destination      Target
172.31.0.0/16    local
10.0.0.0/16      pcx-xyz123

EC2 VPC
Destination      Target
10.0.0.0/16      local
172.31.0.0/16    pcx-xyz123
Run Code Online (Sandbox Code Playgroud)

两个路由表都是主要的.每个都有0个子网(不确定这是否重要).

但是,我仍然无法从Tableau Server连接RDS.

这两个实例由同一帐户创建.它们都列在美国东部(俄亥俄州).所以我假设他们在同一个地区.另外两者都有us-east-2他们的主机名.从我的PC,我可以使用psql命令或pgAdmin连接到RDS.

为什么我不能连接这两个实例?

编辑:我在与Tableau Server相同的VPC的同一子网内创建了另一个EC2 Linux实例,仅用于调试目的.我以相同的方式配置了对等和路由表,并将子网与路由表相关联.但是,我仍然无法连接到EC2 Linux实例上的RDS.

Joh*_*ein 14

VPC Peering的工作方式与公共子网连接到Internet网关的方式大致相同 - 路由表定义了流量进出子网的方式.

对于VPC Peering工作:

  • 邀请并接受对等连接(完成)
  • 在每个VPC中创建一个路由表,指向其他VPC IP范围的对等连接(完成)
  • 将您希望能够对等的每个子网关联到路由表
  • 或者,编辑现有路由表以包括对等条目

路由的工作原理如下:

  • 当流量离开子网时,会查询路由表以确定将流量发送到何处
  • 最严格的(例如/ 24)首先进行评估,直到限制最少(例如/ 0)
  • 根据相应的路由表条目路由流量

这意味着您可以将某些子网配置为对等,而不必包含所有子网.传统上,私有子网是对等的,可能只是特定的私有子网 - 但这完全是您的选择.

将其视为路线图上的指示,告知交通应该指向哪里.

  • 您的 RDS 端点 xxxxxx-db.xxxxxxxxx.us-east-2.rds.amazonaws.com 可能需要 DNS 解析。进入您的对等连接并将 DNS 设置编辑为 true。在您的 EC2 实例中,nslookup 和 RDS 端点应更改为此范围内的 ip 172.31.0.0/16 (3认同)

Lie*_*ham 11

以下是通过VPC对等访问私有RDS的步骤:

假设您有2个VPC:

  • 生产VPC:10.0.1.0/24
  • RDS VPC:10.0.2.0/24

步骤1:在两个VPC之间创建VPC对等连接。然后接受建立连接的请求。您将获得一个连接ID,例如:pcx-e8e8e8e8

步骤2:在每个 VPC中配置路由表

  • 生产VPC:将此路线添加到RDS VPC: 10.0.2.0/24-> pcx-e8e8e8e8
  • RDS VPC:将此路由添加到生产VPC: 10.0.1.0/24-> pcx-e8e8e8e8

步骤3:通过添加此入站规则,将RDS的安全组配置为接受生产VPC的IP范围

  • 端口(MS SQL:1433,MySQL:3306等)—允许源:10.0.1.0/24

现在应该准备好进行连接。

注意:连接到RDS时,应使用提供的DNS名称以获得更好的弹性。AWS VPC DNS将负责将此名称解析为RDS实例的本地IP地址。

  • 必须将其设置为正确答案。 (2认同)

NJI*_*man 6

VPC 对等是关于细节的。以下是我们必须运行的项目才能使其正常工作。

对等 VPC 1 到 VPC 2(很明显,但包括那些没有执行此步骤的人)。从 VPC 1 建立与 VPC 2 的对等连接。接受请求。如果地域不同,切换到VPC 2地域并接受peer请求。

例子:

VPC 1 CIDR = 10.0.0.0/16
VPC 2 CIDR = 172.16.0.0/16

VPC 1(具有 RDS 实例的 VPC)
1. RDS 实例的路由表服务子网 - 将路由目的地添加到 VPC 2 CIDR 块 (172.16.0.0/16) 和目标 VPC 2 对等连接(从列表中选择 - pcx-#### #)。
2. RDS 安全组 - 为源 IP 为 VPC 2 CIDR 块 (172.16.0.0/16) 的数据库端口添加入站规则。因此,对于 DB 端口,您将有两个入站规则。一种用于 VPC 1 (10.0.0.0/16) CIDR 块,一种用于 VPC 2 (172.16.0.0/16)。
3. 私有路由表的网络访问控制列表 - 如果您只允许某些端口,请为 DB 端口添加规则,源 = VPC 2 CIDR 块 (172.16.0.0/16) 并允许。

专有网络 2
1. EC2 实例的路由表服务子网 - 将路由目的地添加到 VPC 1 CIDR 块 (10.0.0.0/16) 和目标 VPC 1 对等连接(从列表中选择 - pcx-#####)。
2. 实例安全组 - 为源 IP 为 VPC 1 CIDR 块 (10.0.0.0/16) 的数据库端口添加入站规则。
3. 路由表的网络访问控制列表 - 如果您只允许某些端口,请为 DB 端口添加规则,源 = VPC 1 CIDR 块 (10.0.0.0/16) 并允许。

我想就是这样 - 但如果我找到另一个设置,我会更新这个消息。

只是一些历史,我们这样做是为了灾难恢复。我们的生产实例和 RDS MS SQL DB 在 us-east-1 (VPC 1) 中,我们的灾难恢复暖备用实例在 us-west-2 (VPC 2) 中。我们主要从美国获取流量,但我们可能会考虑使备用站点成为真正的生产副本(缩放组),然后将 Route 5 记录更改为基于延迟的路由。


pra*_*upd 5

这个问题已经得到解答,但我想补充一下,如果您要连接到 RDS 的公共 DNS(例如prod.upd9999upd.us-east-1.rds.amazonaws.com),那么您必须启用对私有 IP 的 DNS 解析。这是通过AllowDnsResolutionFromRemoteVpc.

示例:将 Vpc EC2_PROD( 172.0.0.0/16) 连接到 Vpc RDS_PROD( 30.0.0.0/16)。

1) 创建从 EC2 VPC(请求方)到 RDS VPC(接受方)的对等连接。确保AllowDnsResolutionFromRemoteVpc通过右键单击已创建的对等连接并“编辑 DNS 设置”来启用 UI。或者使用以下命令

aws ec2 modify-vpc-peering-connection-options --vpc-peering-connection-id "pcx-04a511409bb08ef16" --requester-peering-connection-options '{"AllowDnsResolutionFromRemoteVpc":true}' --accepter-peering-connection-options '{"AllowDnsResolutionFromRemoteVpc":true}' --region us-east-1
Run Code Online (Sandbox Code Playgroud)

您的最终对等连接将如下所示:

aws ec2 describe-vpc-peering-connections --profile aws-work --region us-east-1
{
    "VpcPeeringConnections": [
        {
            "Status": {
                "Message": "Active", 
                "Code": "active"
            }, 
            "Tags": [
                {
                    "Value": "ec2-to-rds-peering-connection", 
                    "Key": "Name"
                }
            ], 
            "AccepterVpcInfo": {
                "PeeringOptions": {
                    "AllowEgressFromLocalVpcToRemoteClassicLink": false, 
                    "AllowDnsResolutionFromRemoteVpc": true, 
                    "AllowEgressFromLocalClassicLinkToRemoteVpc": false
                }, 
                "VpcId": "vpc-RDS", 
                "Region": "us-east-1", 
                "OwnerId": "?", 
                "CidrBlockSet": [
                    {
                        "CidrBlock": "30.0.0.0/16"
                    }
                ], 
                "CidrBlock": "30.0.0.0/16"
            }, 
            "VpcPeeringConnectionId": "pcx-04a511409bb08ef16", 
            "RequesterVpcInfo": {
                "PeeringOptions": {
                    "AllowEgressFromLocalVpcToRemoteClassicLink": false, 
                    "AllowDnsResolutionFromRemoteVpc": true, 
                    "AllowEgressFromLocalClassicLinkToRemoteVpc": false
                }, 
                "VpcId": "vpc-ec2", 
                "Region": "us-east-1", 
                "OwnerId": "?", 
                "CidrBlockSet": [
                    {
                        "CidrBlock": "172.0.0.0/16"
                    }
                ], 
                "CidrBlock": "172.0.0.0/16"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

2) 您的请求者 VPC (Ec2 VPC)路由表必须添加接受者 IP cider(例如30.0.0.0/16)。(见Routes下面的标签)

aws ec2 describe-route-tables --filters Name=tag:Name,Values=EC2_PROD --profile aws-work --region us-east-1
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "RouteTableAssociationId": "rtbassoc-?", 
                    "Main": true, 
                    "RouteTableId": "rtb-?"
                }
            ], 
            "RouteTableId": "rtb-?", 
            "VpcId": "vpc-EC2_PROD", 
            "PropagatingVgws": [], 
            "Tags": [
                {
                    "Value": "EC2_PROD", 
                    "Key": "Name"
                }
            ], 
            "Routes": [
                {
                    "GatewayId": "local", 
                    "DestinationCidrBlock": "172.0.0.0/16", 
                    "State": "active", 
                    "Origin": "CreateRouteTable"
                }, 
                {
                    "Origin": "CreateRoute", 
                    "DestinationCidrBlock": "30.0.0.0/16",    // Accepter IP cider block
                    "State": "active", 
                    "VpcPeeringConnectionId": "pcx-04a511409bb08ef16"
                }, 
                {
                    "GatewayId": "igw-???", 
                    "DestinationCidrBlock": "0.0.0.0/0", 
                    "State": "active", 
                    "Origin": "CreateRoute"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

3) 同样,Acceptor VPC (RDS VPC)路由表必须添加Requester IP cider(例如172.0.0.0/16)。(见Routes下面的标签)

aws ec2 describe-route-tables --filters Name=tag:Name,Values=RDS_PROD --profile aws-work --region us-east-1
{
    "RouteTables": [
        {
            "Associations": [
                {
                    "SubnetId": "subnet-?", 
                    "RouteTableAssociationId": "rtbassoc-?", 
                    "Main": false, 
                    "RouteTableId": "rtb-?"
                }
            ], 
            "RouteTableId": "rtb-?", 
            "VpcId": "vpc-RDS", 
            "PropagatingVgws": [], 
            "Tags": [
                {
                    "Value": "RDS_PROD", 
                    "Key": "Name"
                }
            ], 
            "Routes": [
                {
                    "Origin": "CreateRoute", 
                    "DestinationCidrBlock": "172.0.0.0/16",    // Requester IP cider block
                    "State": "active", 
                    "VpcPeeringConnectionId": "pcx-04a511409bb08ef16"
                }, 
                {
                    "GatewayId": "local", 
                    "DestinationCidrBlock": "30.0.0.0/16", 
                    "State": "active", 
                    "Origin": "CreateRouteTable"
                }, 
                {
                    "GatewayId": "igw-???", 
                    "DestinationCidrBlock": "0.0.0.0/0", 
                    "State": "active", 
                    "Origin": "CreateRoute"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

4) 最后还更新接受器 VPC(RDS) 上的防火墙/安全组,以允许从端口 3306 上的 Ec2 VPC 连接(如果是 mysql)。

aws ec2 describe-security-groups --filters Name=tag:Name,Values=RDS_FIREWALL --profile aws-work --region us-east-1
{
    "SecurityGroups": [
        {
            "IpPermissionsEgress": [
                {
                    "IpProtocol": "-1", 
                    "PrefixListIds": [], 
                    "IpRanges": [
                        {
                            "CidrIp": "0.0.0.0/0"
                        }
                    ], 
                    "UserIdGroupPairs": [], 
                    "Ipv6Ranges": []
                }
            ], 
            "Description": "Dev", 
            "Tags": [
                {
                    "Value": "RDS_FIREWALL", 
                    "Key": "Name"
                }
            ], 
            "IpPermissions": [
                {
                    "PrefixListIds": [], 
                    "FromPort": 3306, 
                    "IpRanges": [
                        {
                            "Description": "EC2_VPC_IP_CIDER", 
                            "CidrIp": "172.0.0.0/16"
                        }
                    ], 
                    "ToPort": 3306, 
                    "IpProtocol": "tcp", 
                    "UserIdGroupPairs": [], 
                    "Ipv6Ranges": []
                }
            ], 
            "GroupName": "RDS_FIREWALL", 
            "VpcId": "vpc-???", 
            "OwnerId": "???", 
            "GroupId": "sg-???"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)