使用目标账户门防止 StackSet 部署失败 - AWS CloudFormation

使用目标账户门防止 StackSet 部署失败

账户门是一项可选功能,用于 CloudFormation 在目标账户中开始执行 StackSet 操作之前验证该账户是否满足特定要求。此验证是通过充当先决条件检查的 AWS Lambda 函数执行。

账户门的一个常见示例是确认目标账户上无有效或未解决的 CloudWatch 警报。CloudFormation 将在您每次在目标账户中启动堆栈操作时调用此 Lambda 函数,并且仅在此函数返回 SUCCEEDED 代码时继续。如果 Lambda 函数返回 FAILED 状态,则 CloudFormation 不会继续执行请求的操作。如果您未配置账户门 Lambda 函数,CloudFormation 会跳过检查并继续执行操作。

如果您的目标账户的账户门检查失败,则失败的操作将计入您指定的堆栈容错数量或百分比。有关容错能力的更多信息,请参阅StackSet 操作选项

账户门仅适用于 StackSets 操作。此功能不适用于 StackSet 外部的其他 CloudFormation 操作。

要求

必须满足以下要求才能使用账户门:

  • Lambda 函数必须命名为 AWSCloudFormationStackSetAccountGate 才能使用此功能。

  • AWSCloudFormationStackSetExecutionRole 要有权调用 Lambda 函数。如果没有这些权限,CloudFormation 会跳过账户门检查,并继续堆栈操作。

  • 必须在目标账户中添加 Lambda InvokeFunction 权限,账户门才能正常工作。目标账户信任策略必须具有与管理员账户的信任关系。下面是一个示例策略语句,可授予 Lambda InvokeFunction 权限。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "*" } ] }

用于创建 Lambda 函数的 CloudFormation 模板

使用以下示例模板创建 Lambda AWSCloudFormationStackSetAccountGate 函数。要使用这些模板中的任意一种创建新堆栈,请参阅通过 CloudFormation 控制台创建堆栈

模板位置

描述

https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateSucceeded.yml

创建实现 Lambda 账户门函数(将返回 SUCCEEDED 状态)的堆栈。

https://s3.amazonaws.com/cloudformation-stackset-sample-templates-us-east-1/AccountGateFailed.yml

创建实现 Lambda 账户门函数(将返回 FAILED 状态)的堆栈。