跳至内容

如何为连接到 Amazon VPC 的 Lambda 函数提供互联网访问权限?

2 分钟阅读
0

我想向连接到 Amazon Virtual Private Cloud (Amazon VPC) 的 AWS Lambda 函数授予互联网访问权限。

简短描述

默认情况下,Lambda 函数在可以访问互联网的 Lambda 托管式 VPC 中运行。即使您将 Lambda 函数与公有子网相关联,它也无法连接到互联网,因为该函数具有私有 IP 地址。

要允许您的 Lambda 函数通过互联网访问您 AWS 账户中的 VPC 中的资源,请添加 NAT 网关或 NAT 实例。此配置会限制该函数仅访问 VPC 内的资源,除非 VPC 可以访问互联网。

**注意:**您可以使用接口 VPC 端点从 Amazon VPC 连接内部连接到支持的 AWS 服务,无需访问互联网。

解决方法

验证以下资源是否允许出站互联网访问 Lambda 函数:

如果以上任何资源未授予对 Lambda 函数的互联网访问权限,请重新配置资源以授予函数互联网访问权限。您可以运行 AWSSupport-TroubleshootLambdaInternetAccess,也可以手动授予互联网访问权限。

使用 AWSSupport-TroubleshootLambdaInternetAccess 运行手册

先决条件

在启动运行手册之前,请确保您的 AWS Identity and Access Management (IAM) 用户或角色具有所需的权限。有关详细信息,请参阅 AWSSupport-TroubleshootLambdaInternetAccessRequired IAM permissions(所需的 IAM 权限)部分。

完成以下步骤:

  1. 打开 Systems Manager 控制台
  2. 在导航窗格中,展开 Change Management Tools(变更管理工具),然后选择 Automation(自动化)。
  3. 选择 Execute runbook(执行运行手册)。
  4. 选择 Owned by Amazon(归 Amazon 所有)选项卡,然后搜索 TroubleshootLambdaInternetAccess
  5. 选择 AWSSupport-TroubleshootLambdaInternetAccess 卡。
    **注意:**请勿选择自动化名称。
  6. 选择 Next(下一步)。
  7. 选择 Execute(执行)。

查看运行手册的输出,以确定导致您的 Lambda 函数无法访问互联网的原因以及如何解决问题。

手动授予互联网访问权限

在 Amazon VPC 中创建公有子网和私有子网

为 Lambda 函数创建私有子网,为 NAT 网关创建公有子网。在 Name tag(名称标签)字段中,为每个子网输入一个名称,标识子网为公有或私有。例如,使用 Public subnetPrivate Lambda 1Private Lambda 2

**注意:**最佳实践是跨不同的可用区创建多个私有子网。此操作会创建冗余,并允许 Lambda 维持函数的高可用性

使用互联网网关向子网添加互联网访问权限

创建互联网网关。然后,将其连接到您的 VPC

创建 NAT 网关

创建 NAT 网关。对于 Subnet(子网),选择要设为公有的子网。例如,选择 Public subnet(公有子网)。

(可选)测试 NAT 网关设置

创建两个自定义路由表

**注意:**当 VPC 中的 Lambda 函数发出请求时,该函数会随机选择一个关联的子网。如果该函数使用的子网配置不正确,则会收到错误。为避免出现此问题,请确保对函数使用的所有子网使用相同的配置。

要设置您的自定义路由表,请完成以下步骤:

  1. 为公有子网创建路由表,并为私有子网创建路由表。
    Name tag(名称标签)字段中,为每个路由表输入一个名称,以帮助您识别与之关联的子网。例如,使用 Public subnetPrivate Lambda
  2. 将私有和公有子网与路由表相关联
  3. 向路由表中添加一条新路由,并包含以下配置:
    对于目标,输入 0.0.0.0/0
    对于 Target(目标),为公有子网选择 Internet gateway(互联网网关),然后输入互联网网关 ID。为私有子网选择 NAT gateway(NAT 网关),然后输入 NAT 网关 ID。
    **重要事项:**如果您使用 NAT 实例而不是 NAT 网关,请选择 Network interface(网络接口)而不是 NAT gateway(NAT 网关)。
  4. 选择 Save routes(保存路由)。

**注意:**确保通往 NAT 网关的路由处于 Active(活动)状态。如果您删除 NAT 网关但未更新路由,则路由将处于 Blackhole(黑洞)状态。

查看您的网络 ACL 配置

您的 VPC 中的默认网络 ACL 允许所有入站和出站流量。如果您更改网络 ACL 规则,请确保仍允许来自您的 Lambda 函数的出站请求。此外,请确保您的网络 ACL 允许以下入站流量:

  • 对于使用 NAT 网关的私有子网,允许临时端口 1024-65535 上的入站流量。
  • 对于使用 NAT 实例的私有子网,允许 NAT 实例操作系统 (OS) 使用的临时端口上的入站流量。

有关详细信息,请参阅确保 Amazon VPC 中的互联网络流量隐私

创建 Lambda 执行角色

为您的 VPC 创建 Lambda 执行角色。然后,更新 Lambda 函数以使用新的 Lambda 执行角色

配置 Lambda 函数以连接到您的 VPC

将您的函数连接到您的 VPC。对于 Subnets(子网),选择您的私有子网。对于 Security groups(安全组),选择一个安全组。

注意:默认安全组允许所有出站互联网流量,足以满足大多数使用案例的需求。有关详细信息,请参阅使用安全组控制指向 AWS 资源的流量

对于连接到 Amazon VPC 的 Lambda 函数,您可以使用仅限出站的互联网网关来访问互联网。有关详细信息,请参阅 IPv6 支持

相关信息

Lambda 中的联网问题疑难解答

如何排查 Amazon VPC 中 Lambda 函数的超时问题?

How do I troubleshoot an ETIMEDOUT error in my Lambda function?

授予 Lambda 函数访问 Amazon VPC 中资源的权限

如何排查 Lambda 函数故障?