如何创建 lambda boto3 函数以在另一个 Aws 帐户中创建 cloudformation 堆栈

问题描述

我想创建一个 lambda 函数,它可以在另一个 Aws 帐户中创建 cloudformation 堆栈并从 S3 存储桶中获取模板 源帐户。

解决方法

AWS CloudFormation 只能从将部署资源的 AWS 账户运行。

因此,账户 A 中的 AWS Lambda 函数需要:

  • 对账户 B 中的 IAM 角色调用 AssumeRole(),这将为账户 B 提供临时凭证
  • 使用这些临时凭证调用 CreateStack() 在 Account-B 中创建 CloudFormation 堆栈

用于创建堆栈的模板文件可以作为 CreateStack() 调用的一部分传递,也可以通过 AmazonS3 URL 进行引用。如果模板来自账户 A,则 S3 存储桶需要使账户 B 可以访问该对象(例如,通过存储桶策略或 ACL)。

参考:https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html