背景:
我有一个具有 2 个私有子网的自定义 VPC,其中包含一个位于美国西部 2 区域内的 Postgres RDS 实例,以及一个包含美国西部 2 区域内 EC2 实例的公有子网。
专用子网ACL:
RDS 实例安全组:
公有子网 ACL:
公共子网在其路由表中有一个互联网网关
EC2实例安全组:
在SSH进入EC2实例后,我导出与RDS实例的Postgres凭据关联的环境变量(例如PGDATABASE=testdb,PGUSER=foo_user,PGHOST=identifier.cluster-foo.us-west-2.RDS.amazonaws.com,PGPASSWORD=bar),并使用python版本3.7.10运行以下python脚本:
import psycopg2
try:
conn = psycopg2.connect(connect_timeout=10)
cur = conn.cursor()
cur.execute("""SELECT now()""")
query_results = cur.fetchall()
print(query_results)
except Exception as e:
print("Database connection failed due to {}".format(e))
我收到以下超时错误:
Database connection failed due to connection to server at "foo-endpoint" (10.0.102.128), port 5432 failed: timeout expired
connection to server at "foo-endpoint (10.0.101.194), port 5432 failed: timeout expired
通常,网络访问控制列表(NACL)应保留其默认“允许所有入站”
NACL是有状态的,这意味着它们需要允许双向流量。这与安全组不同,后者是无状态的,允许返回流量发出以响应允许的入站流量。安全组可以配置为零出站规则,但仍允许用户连接到资源并接收响应。
您的场景的正确安全配置应该是:
EC2-SG
) 上的安全组,允许从您的 IP 地址进行入站 SSH 访问(端口 22)DB-SG
) 上的一个安全组,它允许从 EC2-SG
进行入站后显式登录 (端口 5432)也就是说,DB-SG
应该特别引用允许入站访问的EC2-SG
。这是最安全的配置,因为数据库只能从与EC2-SG
关联的EC2实例访问。如果该实例被替换为另一个EC2实例,如果它与EC2-SG
关联,它仍然能够连接。
请注意,EC2-SG不需要安全组中的任何出站规则,因为它可以自动响应任何入站请求。但是,通常建议保留默认出站规则,以便实例上运行的软件可以访问Internet(例如,安装psycopg2库)。由于您自己安装了该软件,因此通常可以信任实例具有对Internet的出站访问权限。
您是否检查过 VPC 的 DNS 主机名是否已启用?这更可能是由于无法解析同一子网中的 DNS(知道 RDS 的安全组欢迎来自任何地方的 Postgres 流量)。
除此之外,我还建议将 EC2 的安全组列入 RDS 安全组的安全组,即 Postgres 的端口。您可以看下图:
问题内容: 我们有许多应用程序使用一个位于VPC外部(经典实例)的ElasticCache实例(Redis)。一些应用程序位于VPC中,而某些应用程序位于VPC外部(经典实例)。我们如何将所有应用程序连接到缓存? 我们将VPC外部的应用程序连接到缓存没有问题,因为缓存也位于VPC外部。VPC内部的应用程序数量较少,无法连接到缓存。 谢谢。 问题答案: 无法从VPC实例直接访问经典群集。解决方法是在
问题内容: 我正在尝试从EC2实例i-78a8df00连接到RDS实例mysql。**。us- east-1.rds.amazonaws.com。他们俩都在美国东部地区。我将EC2实例的安全组(sg- **)添加到RDS安全组,但这无济于事。这似乎是防火墙/ DNS问题,因为运行此命令时超时: 错误2003(HY000):无法连接到“ mysql。**。us- east-1.rds.amazona
从EC2实例i-78a8df00中,我正在尝试连接到RDS实例他们都在美国东部地区。我将EC2实例的安全组(SG-*********)添加到RDS安全组中,但这没有帮助。运行此命令时超时,可能是防火墙/DNS问题: 错误2003(HY000):无法连接到“ 我可以从我的本地机器使用与上面相同的线路连接到RDS实例。我尝试了各种论坛解决方案,但那些都没有帮助。
问题内容: 在AWS中,我设置了带有堡垒主机的VPC。堡垒主机是具有公共地址槽的单个EC2实例,您可以将其SSH到VPC上的任何其他服务器。 我已经在VPC中创建了一个RDS MySQL实例,我想使用MySQL工作台连接到它。我已按照此处详细说明的步骤进行操作,但是在“步骤6:设置远程SSH配置”中,它要求我“提供Amazon EC2实例的公共DNS”(即堡垒主机)。 然后,MySQL工作台会检查
我有一个专有网络,在每个AZ为我的EC2提供专用子网。在专有网络中,我的ElastiCache(Redis)实例也有专用子网。设置是这样的 我还有安全组和NACL来控制对子网中资源的访问 当我想从运行在其中一个EC2实例上的程序访问ElastiCache群集时,我必须指定群集endpoint-例如: 我知道,使用读卡器endpoint可以实现读卡器实例之间的负载平衡,但由于所有资源都位于同一VPC
我已经创建了AWS ec2实例并关联到一个安全组。在关联的安全组中,我已经向所有人开放了HTTP(HTTP, TCP,80,0.0.0.0/0)、SSH(SSH, TCP,22,0.0.0.0/0)和ICMP(All ICMP, All, N/A,0.0.0.0/0)。 但当我尝试ping到实例时,它失败了;给出请求超时。入站规则设置 此外,使用PuTTY或openssh连接到实例也会失败。它给出