在不同的 AWS 账户中连接 AWS Lambda 和 RDS

Connecting AWS Lambda and RDS in different AWS Accounts

我们有多个 AWS 账户供各个部门使用。我想授予一个帐户中的 Lambda 函数访问另一个帐户中的 RDS 实例的权限。

如果 Lambda 函数分配给 VPC 并且 RDS 可公开访问,是否有办法将对 RDS 的访问限制为仅 Lambda 函数?

如果 RDS 实例是私有的并且 Lambda 函数没有分配给 VPC,有没有办法做到这一点?

Public Amazon RDS 数据库

如果 Lambda 函数未分配给 VPC,则它已连接到 Internet。然后它可以连接到公开可用的 RDS 数据库。但是,无法预测 Lambda 函数将使用的 IP 地址。

私有 Amazon RDS 数据库

如果 RDS 数据库仅在 VPC 内可用,则 Lambda 函数需要以某种方式连接到 VPC。由于 Lambda 函数在不同的 AWS 账户中,您可以尝试:

  • VPC Peering 使一个账户中的 RDS 数据库可供不同账户中的 Lambda 函数访问
  • Shared VPCs:“在共享 VPC 中,每个参与者都为他们的应用程序资源付费,包括 Amazon EC2 实例、Amazon Relational Database Service 数据库、Amazon Redshift 集群和 AWS Lambda 函数。”

共享 VPC 看起来对您来说可能是一个不错的选择,因为(看起来)来自账户 A 的 AWS Lambda 函数可以与账户 A 放在同一个 VPC 中来自账户 B 的 Amazon RDS 数据库。

另请参阅:VPC sharing: A new approach to multiple accounts and VPC management | Networking & Content Delivery

让我们知道它是否适合您!

作为最佳实践,您应该始终将数据库保存在没有 public ip 和访问权限的私有子网中。然后在您的情况下,假设您的所有 AWS 帐户都在一个组织中,您可以通过 https://aws.amazon.com/premiumsupport/knowledge-center/vpc-share-subnet-with-another-account/

将 RDS 位于帐户 A 中的子网共享到帐户 B

然后在账户B中将Lambda配置到A的共享子网中,并设置Lambda函数的安全组,在RDS实例安全组中只允许从Lambda的安全组连接,然后全部设置。

请问为什么不想把Lambda放到VPC中?如果您担心 VPC 中的 Lambda 冷启动性能问题,请注意 AWS 已在 2019 年底解决该问题:https://aws.amazon.com/blogs/compute/announcing-improved-vpc-networking-for-aws-lambda-functions/