无法让堡垒实例跳转到 RDS/Lambda 个实例
Trouble getting bastion instance to jump to RDS/Lambda instances
我正在尝试为我的 lambda 和 RDS 工作设置一个良好且安全的 VPC。本质上,我希望我的 lambda 访问一个站点,获取一些数据,然后将其推送到数据库中。
孤立地,所有部分都可以工作。然而,我去硬化一切的那一刻,一切都崩溃了。这是我的工作:
- 从 RDS 实例中禁用 "Publically Available"
- 将 RDS 实例更改为仅接受来自使用安全组的 VPC 内部的连接
- 将 lambda 与 VPC 相关联(这会终止互联网访问)
- 在 this tutorial 之后,我创建了一个 NAT 网关,从 VPC 子网中删除了互联网网关,并将其替换为 NAT。现在,正如预期的那样,没有什么可以向内说话,但事物可以向外说话。
此时我知道我需要一个堡垒实例,所以我启动了一个 EC2 实例。
EC2 实例设置为 RDS 和 Lambda 所在的同一子网,不幸的是,这意味着我遇到了问题 - NAT 网关当前正在吸收通过 0.0.0.0/0
的所有流量,这意味着互联网网关没有空间。没有互联网网关,我(显然)无法通过 SSH 进入我的堡垒实例,因此我可以跳转到访问我的 RDS 数据库。
我怎样才能正确配置这一切?我的 猜测 是我需要以某种方式拆分子网并创建一个私有的 public 子网,其中 public 具有堡垒和互联网网关。但是,我不确定这一切将如何工作,以便堡垒实例仍然可以正确跳转到 RDS。
我对设置 AWS 服务真的很陌生,所以我希望我没有在很长一段时间内搞砸任何事情。
您需要一个 public 子网(默认路由是 Internet 网关)和一个私有子网(默认路由是 NAT 网关)。 NAT 网关本身位于 public 子网上,因此它可以代表它提供服务的其他子网访问 Internet。堡垒也在 public 子网上,但 Lambda 和 RDS 在私有子网上。
只要安全组允许,任何东西都可以与 VPC 内任何子网上的任何东西对话(和网络 ACL,但不要更改这些,除非你有特定的理由——如果你不确定,那么默认设置就足够了)。
Following this tutorial I created a NAT gateway, deleted the internet
gateway from the VPC subnet, and replaced it with the NAT. Now, as
expected, nothing can talk inbound, but things can talk outbound.
简答
简短的回答是你不应该 "Killed the Internet Gateway";这不是您提供的 link 中的一个步骤 :) 将 Internet 网关保留在您当前的子网中。您将需要一个 public 子网,而将 0.0.0.0/0 路由到 IGW 的子网就是您可以使用的一个示例。
涉及的工作是将您的 NAT 网关放在 Public 子网中,将您的堡垒主机放在 public 子网中,将您的 lambda 函数放在私有子网中,在私有子网中路由流量到 public 子网中的 NAT 网关,并通过将其放入自己的 lambda 安全组和 "white listing" 安全入站规则中的 lambda 安全组,为您的 lambda 函数提供对安全组的访问权限组保护您的数据库。
背景
下面我有一个扩展的答案,提供了关于 public/private 子网的背景,授予对私有子网的 Internet 访问权限,并允许通过安全组进行 lambda 访问。如果您不想阅读背景知识,请跳到最后,我将在此处提供您需要的步骤的要点摘要。
Public 子网
public 子网是通过互联网网关 (IGW) 路由源自 VPC 外部或发往 VPC 外部目标(互联网)的流量的子网。 AWS 为您提供以这种方式配置的初始默认 public 个子网;您可以通过查看他们的路由 table 并在 "destination" 下看到以 IGW 为目标的“0.0.0.0/0”来在控制台中识别它们。这意味着 public 子网更像是 "internet accessible" 子网的设计模式,只需将其默认路由配置为指向 IGW 即可。如果你想创建一个新的 public 子网,你可以创建一个新的路由 table 以及将互联网流量指向 IGW 和 link 路由 table 到你的新子网.这在控制台中相当简单。
私有子网
私有子网是没有 IGW 且无法直接从 Internet 访问的子网,这意味着您无法连接到私有子网上系统的 public IP 地址。除了 AWS pre-configured 默认子网外,这是您手动创建的新子网的设置方式,除非您另有指定,否则为黑框。
授予私有子网 Internet 访问权限
如果您希望私有子网中的内容能够访问外部互联网服务,您可以使用称为 NAT 网关的中介来实现。配置路由 table 与 public 子网中的路由相同,唯一的区别是流向 0.0.0.0/0(Internet) 的流量是位于 public 子网内的 NAT 网关的目标.最后一部分很关键。您的 NAT 网关需要位于 public 子网中,但您的私有子网将其用作外部流量的目标。
Lambda 的安全组访问权限
允许您的 lambda 函数通过您的安全性的一种简单方法 group/firewall 是仅为您的 lambda 函数创建一个安全组并配置保护您的 RDS 的安全组,以便它允许来自 lambda 安全组的流量.
换句话说,在安全组设置中,您不必仅指定 IP 地址作为源,您可以指定其他安全组,这是一种无需知道 IP 地址即可对项目进行分组的非常巧妙的方法。您的 lambda 函数可以 运行 在 "Lambda Security Group" 中,并且您希望它们访问的任何受安全组保护的内容都可以配置为接受来自 "Lambda Security Group" 的流量。只需确保您确实将 lambda 函数与 lambda 安全组相关联,并将其放置在私有子网中即可。
Lambda VPC 步骤简述
- 创建一个新的 NAT 网关并将其放置在 public 子网中。这个
这点很重要,NAT 网关进入 public 子网( a
路由 table 将 0.0.0.0/0 路由到 IGW 的子网)
- 创建一个新的子网,你可以称之为Private-Lambda-Subnet。不像
这
默认 pre-configured 子网 AWS 给你,这个新子网是
开箱即用。
- 创建一条新路线 table 并 link 到您的 Private-Lambda-Subnet
- 在您的私有子网的新路由 table 中添加一个条目
将 0.0.0.0/0 路由到 NAT 网关的目标。这就是你的
私有子网将通过转发间接访问互联网
到 NAT 的流量,然后将其转发到 IGW。
- 您的堡垒主机以及您希望成为的任何其他 publicly
accessible 需要在 public 子网中。这大概是
您已经拥有 RDS 实例的地方,如果它们是
firewalled/security 群组受保护。
- 为您的 lambda 函数创建一个新的安全组。你可以
称之为 LambdaSecurityGroup。
- 配置你的RDS守护安全组的入站规则为
允许来自 LambdaSecurityGrou 的流量.这是可能的,因为
您可以使用其他安全组作为防火墙中的来源
设置,而不仅仅是 IP 地址。
我正在尝试为我的 lambda 和 RDS 工作设置一个良好且安全的 VPC。本质上,我希望我的 lambda 访问一个站点,获取一些数据,然后将其推送到数据库中。
孤立地,所有部分都可以工作。然而,我去硬化一切的那一刻,一切都崩溃了。这是我的工作:
- 从 RDS 实例中禁用 "Publically Available"
- 将 RDS 实例更改为仅接受来自使用安全组的 VPC 内部的连接
- 将 lambda 与 VPC 相关联(这会终止互联网访问)
- 在 this tutorial 之后,我创建了一个 NAT 网关,从 VPC 子网中删除了互联网网关,并将其替换为 NAT。现在,正如预期的那样,没有什么可以向内说话,但事物可以向外说话。
此时我知道我需要一个堡垒实例,所以我启动了一个 EC2 实例。
EC2 实例设置为 RDS 和 Lambda 所在的同一子网,不幸的是,这意味着我遇到了问题 - NAT 网关当前正在吸收通过 0.0.0.0/0
的所有流量,这意味着互联网网关没有空间。没有互联网网关,我(显然)无法通过 SSH 进入我的堡垒实例,因此我可以跳转到访问我的 RDS 数据库。
我怎样才能正确配置这一切?我的 猜测 是我需要以某种方式拆分子网并创建一个私有的 public 子网,其中 public 具有堡垒和互联网网关。但是,我不确定这一切将如何工作,以便堡垒实例仍然可以正确跳转到 RDS。
我对设置 AWS 服务真的很陌生,所以我希望我没有在很长一段时间内搞砸任何事情。
您需要一个 public 子网(默认路由是 Internet 网关)和一个私有子网(默认路由是 NAT 网关)。 NAT 网关本身位于 public 子网上,因此它可以代表它提供服务的其他子网访问 Internet。堡垒也在 public 子网上,但 Lambda 和 RDS 在私有子网上。
只要安全组允许,任何东西都可以与 VPC 内任何子网上的任何东西对话(和网络 ACL,但不要更改这些,除非你有特定的理由——如果你不确定,那么默认设置就足够了)。
Following this tutorial I created a NAT gateway, deleted the internet gateway from the VPC subnet, and replaced it with the NAT. Now, as expected, nothing can talk inbound, but things can talk outbound.
简答
简短的回答是你不应该 "Killed the Internet Gateway";这不是您提供的 link 中的一个步骤 :) 将 Internet 网关保留在您当前的子网中。您将需要一个 public 子网,而将 0.0.0.0/0 路由到 IGW 的子网就是您可以使用的一个示例。
涉及的工作是将您的 NAT 网关放在 Public 子网中,将您的堡垒主机放在 public 子网中,将您的 lambda 函数放在私有子网中,在私有子网中路由流量到 public 子网中的 NAT 网关,并通过将其放入自己的 lambda 安全组和 "white listing" 安全入站规则中的 lambda 安全组,为您的 lambda 函数提供对安全组的访问权限组保护您的数据库。
背景
下面我有一个扩展的答案,提供了关于 public/private 子网的背景,授予对私有子网的 Internet 访问权限,并允许通过安全组进行 lambda 访问。如果您不想阅读背景知识,请跳到最后,我将在此处提供您需要的步骤的要点摘要。
Public 子网
public 子网是通过互联网网关 (IGW) 路由源自 VPC 外部或发往 VPC 外部目标(互联网)的流量的子网。 AWS 为您提供以这种方式配置的初始默认 public 个子网;您可以通过查看他们的路由 table 并在 "destination" 下看到以 IGW 为目标的“0.0.0.0/0”来在控制台中识别它们。这意味着 public 子网更像是 "internet accessible" 子网的设计模式,只需将其默认路由配置为指向 IGW 即可。如果你想创建一个新的 public 子网,你可以创建一个新的路由 table 以及将互联网流量指向 IGW 和 link 路由 table 到你的新子网.这在控制台中相当简单。
私有子网
私有子网是没有 IGW 且无法直接从 Internet 访问的子网,这意味着您无法连接到私有子网上系统的 public IP 地址。除了 AWS pre-configured 默认子网外,这是您手动创建的新子网的设置方式,除非您另有指定,否则为黑框。
授予私有子网 Internet 访问权限
如果您希望私有子网中的内容能够访问外部互联网服务,您可以使用称为 NAT 网关的中介来实现。配置路由 table 与 public 子网中的路由相同,唯一的区别是流向 0.0.0.0/0(Internet) 的流量是位于 public 子网内的 NAT 网关的目标.最后一部分很关键。您的 NAT 网关需要位于 public 子网中,但您的私有子网将其用作外部流量的目标。
Lambda 的安全组访问权限
允许您的 lambda 函数通过您的安全性的一种简单方法 group/firewall 是仅为您的 lambda 函数创建一个安全组并配置保护您的 RDS 的安全组,以便它允许来自 lambda 安全组的流量.
换句话说,在安全组设置中,您不必仅指定 IP 地址作为源,您可以指定其他安全组,这是一种无需知道 IP 地址即可对项目进行分组的非常巧妙的方法。您的 lambda 函数可以 运行 在 "Lambda Security Group" 中,并且您希望它们访问的任何受安全组保护的内容都可以配置为接受来自 "Lambda Security Group" 的流量。只需确保您确实将 lambda 函数与 lambda 安全组相关联,并将其放置在私有子网中即可。
Lambda VPC 步骤简述
- 创建一个新的 NAT 网关并将其放置在 public 子网中。这个 这点很重要,NAT 网关进入 public 子网( a 路由 table 将 0.0.0.0/0 路由到 IGW 的子网)
- 创建一个新的子网,你可以称之为Private-Lambda-Subnet。不像 这 默认 pre-configured 子网 AWS 给你,这个新子网是 开箱即用。
- 创建一条新路线 table 并 link 到您的 Private-Lambda-Subnet
- 在您的私有子网的新路由 table 中添加一个条目 将 0.0.0.0/0 路由到 NAT 网关的目标。这就是你的 私有子网将通过转发间接访问互联网 到 NAT 的流量,然后将其转发到 IGW。
- 您的堡垒主机以及您希望成为的任何其他 publicly accessible 需要在 public 子网中。这大概是 您已经拥有 RDS 实例的地方,如果它们是 firewalled/security 群组受保护。
- 为您的 lambda 函数创建一个新的安全组。你可以 称之为 LambdaSecurityGroup。
- 配置你的RDS守护安全组的入站规则为 允许来自 LambdaSecurityGrou 的流量.这是可能的,因为 您可以使用其他安全组作为防火墙中的来源 设置,而不仅仅是 IP 地址。