【问题标题】:Trouble getting bastion instance to jump to RDS/Lambda instances无法让堡垒实例跳转到 RDS/Lambda 实例
【发布时间】:2018-07-31 18:50:37
【问题描述】:

我正在尝试为我的 lambda 和 RDS 工作设置一个良好且安全的 VPC。本质上,我希望我的 lambda 访问一个站点,获取一些数据,然后将其推送到数据库中。

在隔离的情况下,所有部分都可以工作。然而,第二次我去硬化一切,一切都崩溃了。这是我的工作:

  1. 从 RDS 实例禁用“公共可用”
  2. 将 RDS 实例更改为仅接受来自使用安全组的 VPC 内部的连接
  3. 将 lambda 与 VPC 相关联(这会中断互联网访问
  4. this tutorial 之后,我创建了一个 NAT 网关,从 VPC 子网中删除了 Internet 网关,并将其替换为 NAT。现在,正如预期的那样,没有什么可以说入站,但可以说出站。

此时我知道我需要一个堡垒实例,所以我启动了一个 EC2 实例。

EC2 实例设置为 RDS 和 Lambda 所在的同一子网,不幸的是,这意味着我遇到了问题 - NAT 网关当前正在通过0.0.0.0/0 吸收所有流量,这意味着没有空间互联网网关。如果没有 Internet 网关,我(显然)无法通过 SSH 连接到我的堡垒实例,因此我可以跳转以访问我的 RDS 数据库。

如何正确配置这一切?我的猜测是我需要以某种方式拆分子网并创建一个私有和公共子网,公众在其中拥有堡垒和互联网网关。但是,我不确定这一切将如何工作,因此堡垒实例仍然可以正确跳转到 RDS。

我对设置 AWS 服务真的很陌生,所以我希望我没有搞砸任何事情。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-lambda amazon-rds


    【解决方案1】:

    按照本教程,我创建了一个 NAT 网关,删除了互联网 VPC 子网中的网关,并将其替换为 NAT。现在,作为 预计,没有什么可以说入站,但事情可以说出来。

    简答

    简短的回答是您不应该“杀死 Internet 网关”;这不是您提供的链接中的一个步骤 :) 将 Internet 网关保留在您当前的子网中。您将需要一个公有子网,而将 0.0.0.0/0 路由到 IGW 的公有子网就是您可以使用的一个示例。

    所涉及的工作是将您的 NAT 网关放置在公共子网中,将堡垒主机放置在公共子网中,将 lambda 函数放置在私有子网中,将私有子网中的流量路由到公共子网中的 NAT 网关,以及通过将 lambda 函数放入其自己的 lambda 安全组并将 lambda 安全组“列入”保护数据库的安全组的入站规则中,为您的 lambda 函数提供对您的安全组的访问权限。

    背景

    下面我有一个扩展的答案,提供有关公共/私有子网的背景、授予对私有子网的 Internet 访问权限以及允许通过安全组进行 lambda 访问。如果您不想阅读背景知识,请跳到最后,我会在此处对您需要的步骤进行要点摘要。

    公共子网

    公有子网是指源自您的 VPC 外部或发往您的 VPC(互联网)外部目标的流量通过互联网网关 (IGW) 路由的子网。 AWS 为您提供了以这种方式配置的初始默认公有子网;您可以通过查看他们的路由表并在“目标”下找到针对 IGW 的“0.0.0.0/0”来在控制台中识别它们。这意味着公共子网更像是一种“互联网可访问”子网的设计模式,只需将其默认路由配置为指向 IGW。如果您希望创建一个新的公共子网,您可以创建一个新的路由表以及将 Internet 流量指向 IGW 并将该路由表链接到您的新子网。这在控制台中相当容易。

    私有子网

    私有子网是没有 IGW 且无法直接从 Internet 访问的子网,这意味着您无法连接到私有子网上系统的公共 IP 地址。除了 AWS 预配置的默认子网之外,您手动创建的新子网是这样设置的,除非您另行指定,否则将设置为黑框。

    授予对私有子网的 Internet 访问权限

    如果您希望私有子网中的内容能够访问外部互联网服务,您可以使用称为 NAT 网关的中介来实现。配置与公有子网中相同的路由表,唯一的区别是发往 0.0.0.0/0(Internet) 的流量,您的目标是位于公有子网内的 NAT 网关。最后一部分很关键。您的 NAT 网关需要位于公共子网中,但您的私有子网将其用作外部流量的目标。

    Lambda 的安全组访问权限

    允许您的 lambda 函数通过您的安全组/防火墙的一种简单方法是为您的 lambda 函数创建一个安全组,并配置保护您的 RDS 的安全组,以便它允许来自 lambda 安全组的流量。

    换句话说,在安全组设置中,您不必只指定 IP 地址作为源,您可以指定其他安全组,这是一种非常简洁的分组项目方式,无需知道其 IP 地址。您的 lambda 函数可以在“Lambda 安全组”中运行,并且您希望他们访问的任何受安全组保护的东西都可以配置为接受来自“Lambda 安全组”的流量。只需确保您确实将您的 lambda 函数与 lambda 安全组相关联,并将其放在私有子网中。

    Lambda VPC 步骤简述

    1. 创建一个新的 NAT 网关并将其放置在公共子网中。这 这一点很重要,NAT 网关进入公共子网(a 子网,其路由表将 0.0.0.0/0 路由到 IGW)
    2. 创建一个新的子网,你可以称之为 Private-Lambda-Subnet。不像 这 AWS 为您提供的默认预配置子网,这个新子网是 开箱即用。
    3. 创建一个新的路由表并将其链接到您的 Private-Lambda-Subnet
    4. 在您的私有子网的新路由表中添加一个条目 将 0.0.0.0/0 路由到 NAT 网关的目标。这就是你的 私有子网将通过转发间接访问互联网 到 NAT 的流量,然后将其转发到 IGW。
    5. 您的堡垒主机以及您想公开的任何其他内容 可访问的将需要位于公共子网中。这大概是 您已经拥有 RDS 实例的位置,如果它们有,那很好 防火墙/安全组保护。
    6. 为您的 lambda 函数创建一个新的安全组。你可以 称之为 LambdaSecurityGroup。
    7. 将您的 RDS 保护安全组的入站规则配置为 允许来自 LambdaSecurityGroup 的流量。这是可能的,因为 您可以使用其他安全组作为防火墙中的源 设置,而不仅仅是 IP 地址。

    【讨论】:

      【解决方案2】:

      您需要一个公共子网(默认路由是 Internet 网关)和一个私有子网(默认路由是 NAT 网关)。 NAT 网关本身位于公共子网中,因此它可以代表它为其提供服务的其他子网访问 Internet。堡垒也在公共子网上,但 Lambda 和 RDS 在私有子网上。

      只要安全组允许,任何东西都可以与 VPC 内任何子网上的任何东西(以及网络 ACL,但除非您有特定理由,否则不要更改这些内容 - 如果您不确定,那么默认设置就足够了)。

      【讨论】:

      • 是否有教程可供我参考?
      猜你喜欢
      • 2018-05-25
      • 1970-01-01
      • 2017-11-21
      • 2021-10-16
      • 2013-05-26
      • 1970-01-01
      • 2021-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多