【问题标题】:AWS Lambda behind VPC times out when communicating with S3 even with endpoint与 S3 通信时,VPC 后面的 AWS Lambda 超时,即使使用端点也是如此
【发布时间】:2020-02-22 00:52:15
【问题描述】:

我在 VPC 后面有一个 lambda。当我尝试获取 S3 对象时,出现“连接 ETIMEDOUT”错误。我设置了一个端点,但仍然有这个问题。

如果我删除 VPC,我能够获取对象,因此我知道 VPC 是问题而不是权限。

我已经设置了一个 Internet 网关来与外界通信(并且我已经确认它可以正常工作)。按照 Stack Overflow 和这些说明 (https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/),我创建了一个具有“完全访问权限”的服务端点“com.amazonaws.us-east-1.s3”,并将其与我创建的路由表相关联以获取外部 -世界访问。

Screenshot of VPC Gateway Endpoint created

VPC、lambda 和 S3 都在同一个区域。 (Lambda 和 S3 是通过 SAM 创建的。)

我最初有默认的 AWS 和 S3 对象。我试过为两者设置区域,但没有成功。

AWS.config.update({ region: 'us-east-1'});
const s3 = new AWS.S3({ region: 'us-east-1' });
const s3FileParams = {
  Bucket: srcBucket,
  Key: srcKey,
};
const resp = await s3.getObject(s3FileParams).promise();

我还尝试将 s3 端点明确设置为 s3 = new AWS.S3({ endpoint: 'https://s3.us-east-1.amazonaws.com' });

让我知道我可以提供的任何其他信息,并提前致谢。

【问题讨论】:

  • 可能更容易使用VPC endpoint。如果您不熟悉当前存在的网络/安全约束,则很难调试 VPC 连接
  • 我创建了一个 VPC 终端节点Screenshot。它与子网的路由表相关联。但是我仍然遇到同样的问题。 (为了澄清,我刚刚在问题中添加了该屏幕截图。)如果我使用 VPC 端点,在访问 S3 时是否需要做任何不同的事情?
  • 路由表附加到子网并且 lambda 与 vpc 和子网相关联,您为 lambda 选择的子网,它们是否都有带有 vpc 端点路由的路由表?我希望 ACL 允许流量?
  • 所有子网都与路由表关联,是的。

标签: node.js amazon-web-services amazon-s3 aws-lambda amazon-vpc


【解决方案1】:

使用 S3 网关端点的要求:

  • 确保端点策略允许对 S3 进行适当的访问。除了 Lambda 的 IAM 权限之外,这也是必需的。
  • 向需要使用网关的任何子网使用的路由表添加一个条目。
  • 确保 Lambda 的安全组允许传出 HTTPS 流量到 Internet (0.0.0.0/0) 或您所在地区 S3 的前缀列表 ID (pl-xxxxxxx)。
  • 您必须在您的 VPC 中启用 DNS 解析。在 VPC 上启用 enableDnsHostnamesenableDnsSupport 属性。
  • 要访问的 S3 存储桶必须与 VPC 位于同一区域。

【讨论】:

  • 逐点:-我在端点策略中授予了完全访问权限。 (认为​​一旦我开始工作,我就可以整理它。-端点链接到正确的路由表,我看到对 pl-xxxxxx 的引用(com.amazonaws.us-east-1.s3, 54.231.0.0/17 , 52.216.0.0/15) 与 VPC 端点的目标。-需要查看此内容,但它连接到外部 Internet。-两者都已启用。-同一区域。关于第 2 项,路由显示 com.amazonaws.us-east-1.s3 但是一般入口点是s3.us-east-1.amazonaws.com。我不知道这是否有问题。
  • 只是问一下,是否有一个特定链接是您上述项目的来源?
【解决方案2】:

答案是上面格雷格列表中的第 3 项。我切换到一个新的安全组(目前)允许所有流量到出站规则中的任何内容,这解决了我的问题。 (现在我知道有一条前进的道路,我可以尝试更好的出站规则。)

谢谢大家! (以及在其他问题中发布有关 VPC 端点的原始人。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-22
    • 2019-10-21
    • 2016-05-27
    • 2022-01-10
    • 2020-07-04
    • 1970-01-01
    • 2020-05-21
    • 2020-12-15
    相关资源
    最近更新 更多