如何验证 EC2 中的应用程序是否使用 VPC 端点与 Dynamodb 通信?

问题描述

我有一个 Java 应用程序,它部署在 EC2 中并与 Dynamodb 通信。我已为 Dynamodb 启用 VPC 端点(网关端点)。但是我没有注意到这个变化有任何性能改进。从理论上讲,与公共访问相比,我应该通过 VPC 端点看到更少的延迟。 同样基于tcpdump,我可以看到我们的应用程序仍然使用dynamodb的公共IP进行通信。

TCP Dump

这里的 52.119.232.38 是 dynamodb 公共 IP。 如何验证我们在 EC2 中的应用程序是否使用 VPC 端点与 Dynamodb 通信?

  • EC2 和 VPC 端点都为同一个 VPC 启用。

解决方法

您可以使用 AWS cloudtrail 来验证这一点。如果您仅从 AWS 网络上托管且具有关联 VPC 网关终端节点的应用程序连接到 DynamoDB,那么您应该只会在 Cloudtrail 日志的源 IP 字段中看到私有 IP。如果您看到其他公共 IP,则表示 DyanmoDB 正在通过 Internet 访问。

  • 转到 AWS Cloudtrail 并筛选 EventSource dynamodb.amazonaws.com
  • 如果您没有看到任何 cloudtrail 事件,请确保选择您希望应用程序访问 DynamoDB 的时间段或手动 ssh 进入 EC2 实例并运行一些 cli 命令 aws dynamodb list-tables,然后等待 10- 15 分钟后此新活动才会出现。
  • 点击设置图标以显示事件的 Source IP address
  • 事件的 Source IP address 应该来自您的 VPC 的 CIDR 范围(在本例中是 EC2 实例的私有 IP)
  • 您可以点击事件名称并查看原始事件,该事件的键值为 vpcEndpointId,其值与 VPC 端点的 ID 相同

如果源 IP 不是 EC2 实例的私有 IP,请按照链接 here

To add or remove route tables used by a gateway endpoint 部分确保使用网关端点条目更新适用的路由表 ,

您可以简单地为 dynamodb 的端点执行 nslookup,它应该从 vpc 内的一个实例返回私有 IP 地址。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...