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

上次更新时间:2020 年 3 月 11 日

我希望为连接到 Amazon Virtual Private Cloud (Amazon VPC) 的 AWS Lambda 函数提供互联网访问权限。如何为此配置我的 Amazon VPC?

简短描述

要访问 Relational Database Service (Amazon RDS) 数据库实例或 Amazon Elastic Compute Cloud (Amazon EC2) 实例等私有 Amazon VPC 资源,请将 Amazon VPC 中的 Lambda 函数与一个或多个私有子网关联。

要授予对函数的互联网访问权限,其关联 VPC 必须有一个 NAT 网关(或 NAT 实例)在公有子网中。

注意:子网属于私有还是公有,取决于它的路由表。公有子网有一个路由指向互联网网关,私有子网则没有。

解决方法

如果您使用现有的 Amazon VPC,则从创建 VPC 组件开始创建一个带有 NAT 网关的公有子网以及一个或多个私有子网。如果您现有的 VPC 已经有一个带有 NAT 网关的公有子网以及一个或多个私有子网,请直接跳至为 VPC 创建 Lambda 执行角色

如果您希望为此设置创建一个新的 VPC,则使用 VPC 向导,然后选择带有公有子网和私有子网的 VPC。有关更多信息,请参阅带有公有子网和私有子网 (NAT) 的 VPC。(在 Amazon VPC 控制台中,您的子网分别命名为“Public subnet”和“Private subnet”。) 然后,向前跳转至为 VPC 创建 Lambda 执行角色

创建 VPC 组件

  1. 在 VPC 中创建两个或更多新子网。在创建时,对于名称标签,添加一个名称以帮助您识别哪个子网为公有子网,哪些子网为私有子网。例如,将一个命名为 Public Subnet ,将另一个命名为 Private Lambda(或对于多个私有子网,命名为 Private Lambda 1Private Lambda 2 等等)。
    注意:最佳实践是跨不同的可用区创建多个私有子网以实现冗余,从而让 Lambda 可以确保您的函数具有高可用性
  2. 创建互联网网关并将其附加到 VPC
  3. 创建 NAT 网关。在创建过程中,对于子网,请选择要使其成为公有子网的子网。(例如,您之前命名为 Public Subnet 的子网。)
    注意:为了帮助在创建后测试 NAT 网关,请参阅测试 NAT 网关

创建和修改子网的路由表

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

  1. 在 Amazon VPC 控制台的路由表窗格中,为 VPC 创建两个自定义路由表
    提示:在创建时,对于名称标签,添加一个名称以帮助您识别要将路由表关联到哪个子网。例如,将一个子网命名为 Public Subnet,将另一个子网命名为 Private Lambda
  2. 将公有子网路由表关联到 (Public Subnet) 您要使其成为公有子网的子网。
  3. 在此路由表中添加新路由。指定以下参数:
    对于目的地,输入 0.0.0.0/0
    对于目标,选择互联网网关,然后选择您创建的互联网网关 ID (igw-123example)。
    选择保存路由。关联的子网现在是一个公有子网。
  4. 将其他路由表关联到 (Private Lambda) 私有子网。
  5. 在此路由表中添加新路由。指定以下参数:
    对于目的地,输入 0.0.0.0/0
    对于目标,选择 NAT 网关,然后选择您创建的 NAT 网关 ID (nat-123example)。(如果您使用的是 NAT 实例,则选择网络接口。)
    选择保存路由

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

配置网络 ACL

您的 Amazon VPC 中的默认网络访问控制列表 (ACL)允许所有的入站和出站流量。如果您更改了网络 ACL 规则(或者计划更改它们),确保仍允许 Lambda 函数发出的出站请求。另外,务必允许 VPC 配置所需的入站流量:

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

为 VPC 创建 Lambda 执行角色

  1. 在 AWS Identity and Access Management (IAM) 控制台的角色窗格上的左导航窗格中,选择创建角色
  2. 创建角色页面执行以下操作:
    对于选择可信实体类型,确保选择 AWS 服务
    对于选择使用案例,选择 Lambda
    选择下一步:权限
  3. 附加权限策略下,搜索 AWSLambdaVPCAccessExecutionRole。选择具有该名称的策略,然后选择下一步:标签
  4. (可选)如果您愿意,也可添加标签,然后选择下一步:审核
  5. 审核下执行以下操作:
    对于角色名称,输入此 Lambda 执行角色的名称。例如,lambda_vpc_basic_execution
    (可选)对于角色描述,编辑您的首选项。
    选择创建角色

有关更多信息,请参阅 AWS Lambda 执行角色

配置 Lambda 函数

  1. 在 Lambda 控制台的函数窗格上,选择您想要连接到 Amazon VPC 的函数的名称。
  2. 配置窗格的执行角色下,对于现有角色,选择您创建的 IAM 执行角色。(例如,lambda_vpc_basic_execution。)
  3. 配置窗格的 VPC 下,执行以下操作:
    对于 Virtual Private Cloud (VPC),选择您的 VPC。
    对于子网,选择您创建的私有子网。通过其子网 ID(以及名称(如果您创建了名称))来识别子网。
    对于安全组,选择一个安全组。
    注意:默认安全组 允许所有出站互联网流量,足以满足大多数使用案例的要求。有关更多信息,请参阅您的 VPC 的安全组
  4. 选择保存