AWS Lambda:如何为具有 VPC 访问权限的 lambda 函数设置 NAT 网关
AWS Lambda: How to set up a NAT gateway for a lambda function with VPC access
根据 this document,如果我需要通过 VPC 访问从我的 Lambda 函数访问互联网资源,我需要设置一个 NAT 网关。
所以我跟着this guide设置了一个NAT网关。但是,在我需要编辑我的子网的路由表以添加一个带有目的地的条目的阶段:0.0.0.0/0 和目标作为我的 NAT 网关的 ID,我收到一个错误
An entry with this destination already exists
我检查并注意到,对于该现有条目,目标是我的 VPC 的互联网网关。如果我用 NAT 网关 ID 替换该条目,我将无法从外部世界通过 SSH 访问该 VPC 中的任何 EC2 实例。我如何才能实现此 VPC 中的所有 EC2 实例的解决方案:
- 只能通过 SSH 访问,其余流量被阻止
- 能够完全访问同一VPC中的其他EC2实例
- 有权访问此 VPC 的 Lambda 函数可以访问 SQS 和 Kinesis 等外部资源。
您需要 IGW 和 NAT 网关才能正常工作。
在 public 子网(您希望从外部访问的子网)中,将 0.0.0.0/0 流量指向 IGW 网关。 NAT 网关本身需要位于这些 public 个子网之一中。
在您想要将 NAT 点 0.0.0.0/0 流量指向 NAT 网关弹性网络接口的私有子网中。
如果 0.0.0.0/0 已经绑定到网关,您需要删除它并添加它指向 NAT 网关。
参见:
http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html
您需要两个不同的子网。听起来好像你只有一个。
Lambda 只能使用 VPC 内的 私有 子网。
私有子网的定义:默认路由是 NAT 实例(大多数在不同的 public 子网上)或 NAT 网关,并且 no子网中的机器有一个 public IP 地址。 IP 地址为 public 的机器可以在私有子网上使用,但在大多数情况下,它们将无法正常工作,因为这在技术上属于错误配置。
public 子网的定义:默认路由是 igw-xxxxxxxx
Internet 网关对象,机器分配有 public IP 地址。没有 public IP 地址的机器可以在 public 子网中使用,但它们将无法访问 Internet,因为这是错误配置。
听起来您正试图通过更改默认路由将现有子网从 public 更改为私有子网。不出所料,这破坏了其他东西。
另见 Why do we need private subnet in VPC?
我在此处找到了关于如何让您的 lambda 连接到 VPC 资源和互联网的详细教程:https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7
快速浏览:
- 为您的 lambda 设置新的子网(CIDR 不与您现有的子网重叠)。你需要:
- 一个子网将指向 NAT 使用的互联网网关 (IGW)(我们称之为 A)
- 几个指向您的 lambda(B、C 和 D)要使用的 NAT
- 添加NAT网关:设置子网为A
- 将您的 lambda VPC 子网设置为 B、C 和 D
- 创建 2 条路线 table:
- 一个指向目标地址为 0.0.0.0/0 的 NAT
- 一个指向您的 IGW(应该已经存在),目标地址为 0.0.0.0/0
- 更新子网 A 以使用指向 IGW
的路由 table
- 更新子网 B、C 和 D 以使用指向 NAT
的路由 table
希望对您有所帮助。
您实际上不再需要创建 Internet 和 NAT 网关:https://aws.amazon.com/blogs/security/how-to-connect-to-aws-secrets-manager-service-within-a-virtual-private-cloud/
大家好,我开发了一个分步教程,其中包含有关它的明确屏幕截图:
第一部分
- 在 AWS 中创建 lambda 函数
- 创建一个 API 网关以将所有请求重定向到您的 AWS Lambda 函数
https://medium.com/@shontauro/how-can-i-turn-my-restful-api-into-a-serverless-application-and-deploy-it-to-aws-lambda-step-by-ec7ce38e18be
第二部分
- 为您的 lambda 函数配置 VPC
- 以安全方式授予对 lambda 函数的 Internet 访问权限
- 将 Node.js Restful API 部署到您的 Lambda 函数中
https://medium.com/@shontauro/how-can-i-turn-my-restful-api-into-a-serverless-application-and-deploy-it-to-aws-lambda-step-by-8ff6cc97780f
在 VPC 和互联网访问中使用 Lambda:
我相信,你们中的大多数人已经拥有 IGW,你们正在使用 VPC 内部并使用互联网,因此无需创建新的。
对我有用的步骤:
在您的主 VPC 下创建一个新的子网(建议 2 个或更多)。给它一个带掩码的新 CIDR,你认为它会计算你的 Lambda 中使用的网络接口。(我做了 X.X.X.X/28 ,因为对我们来说已经足够了)
创建 NAT 网关,向其添加弹性 IP 或创建新的 EIP 并将其添加到您的 VPC 下的主子网。 (请记住,如果您已经拥有 Internet 网关,它就可以工作)
创建路由 table 并将 0.0.0.0/0 路由添加到我们创建的目标 - Nat 网关 ID (nat-xxxxxxxxxxxxxxxxx)(步骤 2)
为您的 lambda 创建新的安全组(ALL 到 ALL)以与 Internet 一起使用。我相信将 0.0.0.0/0 添加到 lambda for internet 是安全的。
打开 lambda - 选择您的 VPC,添加您正在使用的 SG,并添加从第 4 步创建的新对象以使用 Internet。按保存并测试。
根据 this document,如果我需要通过 VPC 访问从我的 Lambda 函数访问互联网资源,我需要设置一个 NAT 网关。
所以我跟着this guide设置了一个NAT网关。但是,在我需要编辑我的子网的路由表以添加一个带有目的地的条目的阶段:0.0.0.0/0 和目标作为我的 NAT 网关的 ID,我收到一个错误
An entry with this destination already exists
我检查并注意到,对于该现有条目,目标是我的 VPC 的互联网网关。如果我用 NAT 网关 ID 替换该条目,我将无法从外部世界通过 SSH 访问该 VPC 中的任何 EC2 实例。我如何才能实现此 VPC 中的所有 EC2 实例的解决方案:
- 只能通过 SSH 访问,其余流量被阻止
- 能够完全访问同一VPC中的其他EC2实例
- 有权访问此 VPC 的 Lambda 函数可以访问 SQS 和 Kinesis 等外部资源。
您需要 IGW 和 NAT 网关才能正常工作。
在 public 子网(您希望从外部访问的子网)中,将 0.0.0.0/0 流量指向 IGW 网关。 NAT 网关本身需要位于这些 public 个子网之一中。
在您想要将 NAT 点 0.0.0.0/0 流量指向 NAT 网关弹性网络接口的私有子网中。
如果 0.0.0.0/0 已经绑定到网关,您需要删除它并添加它指向 NAT 网关。
参见: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/vpc-nat-gateway.html
您需要两个不同的子网。听起来好像你只有一个。
Lambda 只能使用 VPC 内的 私有 子网。
私有子网的定义:默认路由是 NAT 实例(大多数在不同的 public 子网上)或 NAT 网关,并且 no子网中的机器有一个 public IP 地址。 IP 地址为 public 的机器可以在私有子网上使用,但在大多数情况下,它们将无法正常工作,因为这在技术上属于错误配置。
public 子网的定义:默认路由是 igw-xxxxxxxx
Internet 网关对象,机器分配有 public IP 地址。没有 public IP 地址的机器可以在 public 子网中使用,但它们将无法访问 Internet,因为这是错误配置。
听起来您正试图通过更改默认路由将现有子网从 public 更改为私有子网。不出所料,这破坏了其他东西。
另见 Why do we need private subnet in VPC?
我在此处找到了关于如何让您的 lambda 连接到 VPC 资源和互联网的详细教程:https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7
快速浏览:
- 为您的 lambda 设置新的子网(CIDR 不与您现有的子网重叠)。你需要:
- 一个子网将指向 NAT 使用的互联网网关 (IGW)(我们称之为 A)
- 几个指向您的 lambda(B、C 和 D)要使用的 NAT
- 添加NAT网关:设置子网为A
- 将您的 lambda VPC 子网设置为 B、C 和 D
- 创建 2 条路线 table:
- 一个指向目标地址为 0.0.0.0/0 的 NAT
- 一个指向您的 IGW(应该已经存在),目标地址为 0.0.0.0/0
- 更新子网 A 以使用指向 IGW 的路由 table
- 更新子网 B、C 和 D 以使用指向 NAT 的路由 table
希望对您有所帮助。
您实际上不再需要创建 Internet 和 NAT 网关:https://aws.amazon.com/blogs/security/how-to-connect-to-aws-secrets-manager-service-within-a-virtual-private-cloud/
大家好,我开发了一个分步教程,其中包含有关它的明确屏幕截图:
第一部分
- 在 AWS 中创建 lambda 函数
- 创建一个 API 网关以将所有请求重定向到您的 AWS Lambda 函数 https://medium.com/@shontauro/how-can-i-turn-my-restful-api-into-a-serverless-application-and-deploy-it-to-aws-lambda-step-by-ec7ce38e18be
第二部分
- 为您的 lambda 函数配置 VPC
- 以安全方式授予对 lambda 函数的 Internet 访问权限
- 将 Node.js Restful API 部署到您的 Lambda 函数中 https://medium.com/@shontauro/how-can-i-turn-my-restful-api-into-a-serverless-application-and-deploy-it-to-aws-lambda-step-by-8ff6cc97780f
在 VPC 和互联网访问中使用 Lambda:
我相信,你们中的大多数人已经拥有 IGW,你们正在使用 VPC 内部并使用互联网,因此无需创建新的。
对我有用的步骤:
在您的主 VPC 下创建一个新的子网(建议 2 个或更多)。给它一个带掩码的新 CIDR,你认为它会计算你的 Lambda 中使用的网络接口。(我做了 X.X.X.X/28 ,因为对我们来说已经足够了)
创建 NAT 网关,向其添加弹性 IP 或创建新的 EIP 并将其添加到您的 VPC 下的主子网。 (请记住,如果您已经拥有 Internet 网关,它就可以工作)
创建路由 table 并将 0.0.0.0/0 路由添加到我们创建的目标 - Nat 网关 ID (nat-xxxxxxxxxxxxxxxxx)(步骤 2)
为您的 lambda 创建新的安全组(ALL 到 ALL)以与 Internet 一起使用。我相信将 0.0.0.0/0 添加到 lambda for internet 是安全的。
打开 lambda - 选择您的 VPC,添加您正在使用的 SG,并添加从第 4 步创建的新对象以使用 Internet。按保存并测试。