如何使用 AWS 中的 vpc 流日志诊断跨账户 EC2/RDS 连接?

如何使用 AWS 中的 vpc 流日志诊断跨账户 EC2/RDS 连接?

在AWS上创建了2个账户。

  • 帐户 1:A | 已部署 EC2
  • 帐户 2:B | 已部署的 RDS

想要从账户 1 的 EC2 连接到账户 2 的 RDS,但不起作用。因此启用 VPC 流日志来诊断问题所在。这两个账户之间的连接使用传输网关。双方都已使用路由表连接到自己的 VPC。

通过 db connect client 从 A 到 B 进行连接测试后,尝试从 A 查找网络接口 ID(例如eni-XXXXXXXX属于 EC2 实例),但在 B 的 CloudWatch Logs Group 中找不到其名称。

我按照这个指南做了,使用 AWS VPC 流日志诊断间歇性 RDS 连接。但这些步骤不能解决我的问题,我无法用它来诊断:

确定您的 RDS 实例的弹性网络 ID (ENI)

  1. 使用 AWS RDS 控制台获取实例的端点(其格式为 [xxx].[region].rds.amazonaws.com)。
  2. 使用 dig 或类似工具查找端点的 IP 地址。CNAME 是不够的,您需要实际 IP。
  3. 使用 AWS 网络接口控制台搜索您获得的 IP 地址,并从结果记录中获取网络接口 ID(将是 eni-XXXXXXXX)。

查询您的流日志

  1. 使用 VPC 控制台找到您的 VPC。转到“流日志”选项卡,然后单击进入 CloudWatch Logs 组。
  2. 在 CloudWatch Logs 组中,使用搜索框查找您的网络接口 ID。
  3. 单击您找到的记录,您将看到您的实例的所有流量!

如何才能正确确认网络流量?

我在流日志中发现了一个未知端口。

2 023910321035 eni-12309fdsaj0jf012 ACCOUNT_1_EC2_IP ACCOUNT_2_RDS_IP 45052 31337 6 3 180 1619490209 1619490213 REJECT OK
2 023910321035 eni-12309fdsaj0jf012 ACCOUNT_1_EC2_IP ACCOUNT_2_RDS_IP 45052 31337 6 3 180 1619490209 1619490213 REJECT OK

端口31337没有开放,为什么会连接这个端口?

答案1

  1. 你真的需要吗中转网关?正如你回答中提到的其他问题 VPC 对等连接可能就足够了。如果不够,请告诉我们原因。

  2. 在那里面其他问题您确认您的设置最终有效,并且您可以从 EC2 连接到 RDS。如果现在无法连接,那么发生了什么变化?

  3. 正如其他答案以及 @Tim 在此评论中所建议的那样,请执行以下操作:

    • 在同一个子网安全组作为您的 RDS。
    • 用于netcat监听 DB 端口(例如 mysql 的 3306)并tcpdump观察来自“其他”EC2 的流量。

    使用该图查看您的连接是否正常 - 您是否看到传入的数据包tcpdump?您是否看到响应?

相关内容