【问题标题】:How to access Redshift from a Lambda from a VPC in a different account如何从不同账户中的 VPC 从 Lambda 访问 Redshift
【发布时间】:2019-08-16 09:35:12
【问题描述】:

我已经阅读了互联网上的大多数 Stackoverflow 问题和大量文档,但由于某种原因,当 Redshift 位于不同的 VPC 和不同的 AWS 账户中时,无法让 lambda 连接到 Redshift。

我有两个与 VPC 关联的子网,并且一个 Internet 网关和 NAT 网关连接到 VPC。这是与 Lambda 函数关联的 VPC。我将NAT弹性ip添加到Redshift安全组的安全组中。 NAT 在指向 Redshift Elastic ip 的路由表中。

我以下方法确实有效:

  • 从 VPC 中取出 lambda 并将 Redshift 公开 (0.0.0.0),这并不理想
  • 向公众关闭 Redshift 并从 Lambda 函数所在的 VPC 中的 EC2 实例进行查询(将 EC2 ip 放入 Redshift 安全组)

知道如何让 lambda 使用 NAT 的弹性 IP 或类似的东西吗?路由表中的 NAT 是否需要指向 Redshift 的弹性 ip 或 CIDR 块或类似的东西?我错过了什么?

【问题讨论】:

    标签: amazon-web-services aws-lambda amazon-redshift amazon-vpc


    【解决方案1】:

    正如您所说,将 Redshift 开放到互联网确实不是最好的答案,您真的应该考虑仅以互联网方式使用它。

    因此,您将在下面找到我向您推荐的内容: - 使用 VPC 对等互连 (https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) 将您的 Lambda VPC 绑定到 Redshift VPC。请注意遵循路由表的所有步骤。 - 一旦您的 VPC 对等建立,您将能够直接向您的 Redshift 安全组声明您的 Lambda 安全组以允许入站访问。

    然后,您将能够移除您的 Redshift 集群面向 Internet 的部分,并仅以内部方式使用它。

    那么,如果您仍然想使用您的方式,请注意: - 小心地将您的 Lambda 部署到您的私有子网中(以便能够使用 NAT 网关 EIP)并确保配置了所有路由 (https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。如果您将 lambda 部署到您的公共子网中,那么配置您的 Redshift 安全组将会更加困难。 - 然后允许您的 Lambda VPC EIP 到 Redshift 安全组(入站规则)

    【讨论】:

    • 感谢您的回答,我会尝试将 Lambda 安全组添加到 Redshift 安全组,看看是否也可以。我认为只要您在 lambda VPC 的一个子网中有一个指向 0.0.0.0 的 NAT 就可以了。
    【解决方案2】:

    我使用以下要点弄清楚了:https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7

    基本上,我做错的是使用一个路由表。我还将 NAT 指向 Redshift 的弹性 IP。

    我所要做的就是从原始路由表中删除 NAT 并创建一个新的附加路由表。然后,我将 NAT 添加到新路由表中,并将该路由表与 VPC 中的另一个子网相关联。我将 NAT 指向 0.0.0.0 而不是 Redshift 弹性 ip。

    这让我摆脱了 Redshift 安全组中的“向公众开放”问题。我也相信 NAT 有助于 Lambda 保持安全,不受公共连接的影响,但需要对此进行澄清。

    【讨论】:

      猜你喜欢
      • 2020-07-18
      • 2020-09-27
      • 2020-10-21
      • 2020-09-27
      • 2020-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      • 2017-02-08
      相关资源
      最近更新 更多