跨 AWS 账户调用 Lambda 函数
最近,在处理项目任务时,我不得不检查跨 AWS 账户调用 Lambda 函数的选项。问题很简单:是否可以从源账户(我将其称为账户 1)调用 Lambda 函数到 AWS 中的目标账户(账户 2)?检查文档,我们知道这是可能的,但还有其他因素需要考虑:账户 2 中的 Lambda 函数将在 VPC 中定义并分配给无法访问 Internet 的私有子网。这就提出了另一个问题:这种情况需要什么额外的配置?下图代表了我们在本文中回顾的案例。

在同一组织内使用多个帐户是管理云解决方案的最佳实践。它允许您对工作负载进行分组、管理成本、应用安全控制并动态响应业务需求。但是,当您使用 AWS 时,跨越账户边界可能是安全配置的噩梦。
IAM 角色和策略
Lambda 函数需要一个执行角色。 Lambda 函数的执行角色是一个 AWS Identity and Access Management (IAM) 角色,它授予函数访问 AWS 服务和资源的权限。您在创建函数时提供此角色,而 Lambda 在调用您的函数时代入该角色。在我们的示例中,位于账户 1 中的源 Lambda 必须具有调用 Lambda 函数的权限,并且能够访问位于账户 2 中的目标 Lambda 函数。策略示例如下:

可以同步或异步调用 Lambda 函数。上述策略同时授予Lambda:InvokeFunction和Lambda:InvokeAsync权限。我们的目标是授予最小权限,因此我们应该只授予所需操作的权限。
在目标函数的情况下,需要将调用权限授予源函数所承担的角色。它创建了一种信任关系,允许执行跨越我们两个帐户之间边界的任务。对于需要从其基于资源的策略调用函数的权限的服务或任何其他 AWS 账户来说,这是必需的。有关 AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html?icmpid=docs_lambda_help)的[基于资源的策略的更多详细信息,请参阅文档。您可以使用 AWS CLI 向基于资源的策略添加权限。可以将权限授予角色、服务或整个组织。同样,这个想法是在分配权限时要细化。
根据文档中显示的示例,我们创建了下面的命令行来授予权限。该命令将帐户 ID 指定为主体111122223333以调用别名prod的my-function。

VPC 中的 Lambda 函数限制
默认情况下,Lambda 函数在安全的 VPC 中运行其函数。但这是 AWS Lambda 服务拥有的 VPC,并没有连接到我们在 AWS 中管理的账户的默认 VPC。当函数位于账户的 VPC 中时,Lambda 无法访问 Internet,除非其 VPC 提供访问权限。
Lambda 使用 ENI 超平面访问您的 VPC 中的资源。 Hyperplane 使用网络接口在 AWS 账户之间进行访问。
在 VPC 中放置 Lambda 函数时,我们会遇到三个可能影响执行的限制:
-
EC2ThrottledException:如果VPC在子网中没有足够的ENI或IP,就会发生这种情况。您需要配置 VPC 子网(以及 VPC)以获得足够的 IP 地址。
-
Client.NetworkInterfaceLimitExceeded:由于最近的增强,Lambda 函数扩展不再与网络接口的数量直接相关。超平面 ENI 现在可以扩展以支持大量并发函数执行。但是,每个区域的 ENI 数量是有限的,需要考虑这一点。有关更多详细信息,请参阅改进的 AWS Lambda 函数的 VPC 网络。
-
Client.RequestLimitExceeded:lambda 函数达到创建网络接口 (ENI) 请求速率限制。如果您的 lambda 函数出现并发峰值,您可能会达到此限制。
结论
POC 验证了跨 AWS 账户调用 Lambda 函数是可能的,并且使用正确的权限和配置甚至相对容易。但是,当涉及在 VPC 中运行的函数时,您必须考虑与 AWS 中的联网 Lambda 函数相关的限制以及它们对全负载测试方案设计的潜在影响。关于分析案例所需的配置,确定必须在源端和目标端都授予权限。对于源函数,必须授予使用 Lambda 函数的 API 的权限,而在目标中,必须建立一个资源策略来授予源账户的信任关系。
更多推荐
所有评论(0)