0

我有一个 lambda 函数,它每 15 分钟运行一次,并在 DynamoDB 中保存一些数据。

现在我想保护我的 lambda 发出的 DynamoDB 调用,这样请求就不会通过 Internet,而是通过 Amazon 内部网络。虽然这里没有涉及 EC2 实例。

我已经看到了一些使用 PrivateLink 的建议,它将 Dynamo 绑定到 VPC 端点,以便从 EC2 实例发出的调用始终通过内部网络绕过 Internet。

我想知道这样的配置对于调用 DynamoDB 的 lamda 是可能的,因为 lamda 本身不在任何 EC2 实例中运行并且相当无服务器?

4

3 回答 3

5

我要说的第一件事是,您在 Lambda 和 DynamoDB 之间的所有流量都经过签名和加密,所以这通常就足够了。

当这还不够时,有一些用例,最典型的是合规性原因。在这种情况下,您可以将 Lambda 函数部署到您制作的 VPC 中,并使用DynamoDB 的私有 VPC 终端节点配置 VPC 。通常,VPC 将配置为没有 Internet 网关或 NAT,因此它没有到公共 Internet 的出口路由。请注意,您的 Lambda 函数启动延迟会比平时高,因为每个 Lambda 函数环境都需要附加一个ENI才能访问私有端点。

请参阅配置 Lambda 函数以访问 Amazon VPC 中的资源

于 2018-08-17T15:24:09.347 回答
2

如果您不需要访问 VPC 中的资源,AWS 建议不要在 VPC 中运行 AWS Lambda 函数。来自AWS Lambda 最佳实践

除非必须,否则不要将您的 Lambda 函数放在 VPC 中。除了使用它来访问您无法公开公开的资源(例如私有 Amazon 关系数据库实例)之外,没有任何好处。Amazon Elasticsearch Service 之类的服务可以通过 IAM 使用访问策略进行保护,因此公开终端节点是安全的,并且不需要您在 VPC 中运行您的函数来保护它。

在 VPC 中运行 Lambda 函数会增加额外的复杂性,这会对可扩展性和性能产生负面影响。VPC 中的每个 Lambda 函数都需要一个弹性网络接口 (ENI)。供应 ENI 的速度很慢,而且您可以拥有的 ENI 数量有限,因此当您扩大规模时,您可能会遇到 ENI 短缺的情况,从而阻止您的 Lambda 函数进一步扩大规模。

于 2018-08-17T15:21:41.517 回答
1

这是一种方法。

步骤 1) 在 VPC 中部署您的 lambda。

步骤 2) 为 DynamoDB 创建 VPC 端点。

这应该会有所帮助:https ://aws.amazon.com/blogs/aws/new-vpc-endpoints-for-dynamodb/

于 2018-08-17T15:18:28.460 回答