我已经阅读了Internet上的大多数Stackoverflow问题和大量文档,但是由于某些原因,当Redshift使用不同的VPC和不同的AWS帐户时,lambda无法连接到Redshift。
我有两个与VPC关联的子网,并且Internet网关和NAT网关连接到VPC。这是Lambda函数关联的VPC。我将NAT弹性ip添加到Redshift安全组的安全组中。 NAT在指向Redshift Elastic ip的路由表中。
我可以使用以下方法:
有什么想法如何让lambda使用NAT的弹性IP或类似的东西吗?路由表中的NAT是否需要指向Redshift的弹性IP或CIDR块或类似的东西?我想念什么?
答案 0 :(得分:1)
正如您所说的那样,将Redshift打开互联网确实不是最好的答案,您应该真正考虑仅以互联网方式使用它。
所以您会在下面找到我向您推荐的内容: -使用VPC对等(https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)将Lambda VPC绑定到Redshift VPC。请注意遵循路由表的所有步骤。 -建立VPC对等后,您就可以直接向Lambda Security组声明您的Lambda安全组,以允许入站访问。
然后,您将能够删除Redshift Cluster的面向互联网,而仅以内部方式使用它。
然后,如果您仍然想使用自己的方式,请当心: -请小心将Lambda部署到专用子网中(以便能够使用NAT网关EIP),并确保已配置所有路由(https://docs.aws.amazon.com/vpc/latest/userguide/vpc-nat-gateway.html)。如果您将lambda部署到公共子网中,则配置Redshift Security组将变得更加困难。 -然后将您的Lambda VPC EIP移至Redshift安全组(入站规则)
答案 1 :(得分:0)
我使用以下要点弄清楚了:https://gist.github.com/reggi/dc5f2620b7b4f515e68e46255ac042a7
本质上,我做错的是使用一个路由表。我还把NAT指向Redshift的弹性IP。
我要做的就是从原始路由表中删除NAT并创建一个新的附加路由表。然后,我将NAT添加到新的路由表中,并将该路由表与VPC中的另一个子网相关联。我将NAT指向0.0.0.0,而不是Redshift弹性IP。
这使我摆脱了Redshift安全组中的“向公众开放”问题。我还相信NAT可以帮助Lambda保持公共连接的安全性,但需要对此进行澄清。