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

上次更新日期:2022 年 11 月 23 日

我想要连接到 Amazon Virtual Private Cloud (Amazon VPC) 的 AWS Lambda 函数有权访问互联网。该如何设置?

简短描述

从私有子网访问互联网需要进行网络地址转换 (NAT)。要向与 Amazon VPC 连接的 Lambda 函数提供互联网访问权限,请将其出站流量路由到公有子网中的 NAT 网关NAT 实例

有关更多信息,请参阅 Amazon VPC 用户指南中的互联网网关。有关示例设置,请参阅带有公有和私有子网 (NAT) 的 VPC

要排查与 Amazon VPC 连接的 Lambda 函数的互联网访问问题

请参阅如何使用 Systems Manager Automation 排查通过 Amazon S3 事件通知调用 Lambda 函数时出现的问题?

注意:您还可以使用 Amazon VPC 端点,在没有互联网访问权限的情况下从 Amazon VPC 内连接到受支持的 AWS 服务。无法将 Lambda 置于具有互联网网关的公有子网中,因为无法向 Lambda 函数授予公有 IP 地址。要通过启用 VPC 函数访问公有互联网,您必须在使用 NAT 网关、NAT 实例或其他客户管理的默认路由进行公有互联网访问的私有子网中设置此函数。

解决方法

(可选) 使用 AWS 管理控制台中的 VPC 向导新建 Amazon VPC

注意:如果您使用 VPC 向导新建 Amazon VPC,则可以跳至以下部分:为您的 VPC 创建 Lambda 执行角色。

1.    在 AWS 管理控制台中打开 VPC 向导

2.    选择带有公有和私有子网的 Amazon VPC。新的公有子网私有子网,包括其关联的互联网网关和 NAT 网关,将显示在 Amazon VPC 控制台中。

在您的 Amazon VPC 中创建公有子网和一个或多个私有子网

有关说明,请参阅在 VPC 中创建子网以创建每个子网。

创建子网时,对于名称标签,为每个子网输入一个名称,将其标识为公有或私有子网。例如:公有子网私有 lambda 1私有 lambda 2

注意:最佳实践是在不同的可用区之间创建多个私有子网。这种做法会形成冗余,并允许 Lambda 服务保持函数的高可用性

创建互联网网关并将其附加到 Amazon VPC

有关说明,请参阅创建和连接互联网网关

创建 NAT 网关

有关说明,请参阅创建 NAT 网关。创建 NAT 网关时,对于子网,选择要成为公有的子网。(来自上一个示例:公有子网。)

注意:要测试 NAT 网关设置,请参阅 Amazon VPC 用户指南中的测试公有 NAT 网关

创建两个自定义路由表—一个用于公有子网,另一个用于私有子网

注意:连接 Amazon VPC 的 Lambda 函数在进行请求时随机选择关联的子网。您的函数使用的所有子网应具有相同的配置,以防止 Lambda 使用配置错误的子网造成的随机错误。

有关说明,请参阅创建自定义路由表。创建路由表时,对于名称标签,输入每个路由表的名称,以帮助您识别与其关联的子网。例如:公有子网私有 Lambda

对于每个路由表,请确保执行以下操作:

对于公有子网的路由表

1.    将公有子网的路由表公有子网)关联到您要使其成为公有的子网。

2.    向路由表中添加包含以下配置的新路由:
对于目的地,输入 0.0.0.0/0
对于目标,选择互联网网关,然后选择创建的互联网网关 ID (igw-123example)。选择保存路由

对于私有子网的路由表

1.    将私有子网的路由表私有 Lambda)关联到私有子网。

2.    向路由表中添加包含以下配置的新路由:
对于目的地,输入 0.0.0.0/0
对于目标,选择 NAT 网关。然后,选择创建的 NAT 网关的 ID (nat-123example)。
重要提示:如果您使用的是 NAT 实例,则选择网络接口。选择保存路由

注意:确保至 NAT 网关的路由处于活动状态。如果 NAT 网关被删除且您没有更新路由,它们将处于黑洞状态。有关更多信息,请参阅更新路由表

验证您的网络 ACL 是否允许来自 Lambda 函数的出站请求,并根据需要允许入站流量

您的 Amazon VPC 中的默认网络访问控制列表 (ACL) 允许所有的入站和出站流量。如果您更改了网络 ACL 规则,请确保仍然允许来自 Lambda 函数的出站请求。

另外,请确保您的网络 ACL 根据 VPC 配置允许以下入站流量:

注意:有关更多信息,请参阅 Amazon VPC 中的互联网络流量隐私

为 VPC 创建 Lambda 执行角色

1.    打开 AWS Identity and Access Management (IAM) 控制台中的角色页面

2.    选择创建角色。这将打开创建角色页面。

3.    在“创建角色”页面执行以下操作:
对于选择受信任实体的类型,请选择 AWS 服务
对于常见使用案例,请选择 Lambda
选择下一步:权限
附加权限策略下,搜索 AWSLambdaVPCAccessExecutionRole
选择具有该名称的策略。然后,选择下一步:标签
(可选)为使用案例添加标签
选择下一步:检查
对于角色名称,输入 Lambda 执行角色的名称。例如:lambda_vpc_basic_execution
(可选)对于角色描述,输入角色的描述。选择创建角色

有关更多信息,请参阅 AWS Lambda 执行角色在 IAM 控制台中创建执行角色

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

1.    打开 Lambda 控制台中的函数页面

2.    选择要连接到 Amazon VPC 的函数的名称。

3.    选择配置

4.    在执行角色下,对于现有角色,选择您之前创建的 Lambda 执行角色。

5.    在 VPC 下,选择编辑。然后执行以下操作:
对于 Virtual Private Cloud (VPC),选择您的 VPC。
对于子网,选择您创建的私有子网。通过其子网 ID(以及名称(如果您创建了名称))来识别子网。
对于安全组,选择一个安全组。
注意:默认安全组 允许所有出站互联网流量,足以满足大多数使用案例的要求。有关更多信息,请参阅您的 VPC 的安全组。选择保存