重要的

重要的

重要的

我正在动态构建 TemplateURL。

"TemplateURL" : { "Fn::Join" : ["", [  { "Ref" : "TemplateURL"}, "substack.template" ]] }

我正在 AWS 控制台中运行 CloudFormation 模板。

直接运行 Stack

我从使用 IAM 资源的模板开始,控制台提示我在直接运行堆栈时确认 IAM 功能。

小时候玩 Stack

然后我尝试从父堆栈调用相同的堆栈,但没有收到相同的提示。

然后堆栈失败并显示以下消息:

需要功能:[CAPABILITY_IAM]

研究

文档表明我可以通过多种方式运行 CF 脚本。有很多关于 CLI/API 和提供功能参数的文档,但似乎没有关于如何确保在通过控制台运行时应用它的信息。

http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-iam-template.html

AWS CloudFormation 模板中的 IAM 资源

  • CF 控制台
  • 命令行界面
  • API

我做过的事/我的想法

我目前已通过论坛提出了一个问题,但尚未得到回复: https://forums.aws.amazon.com/thread.jspa?threadID=139160

我怀疑这是控制台中的一个错误,因为似乎没有任何关于如何通过控制台改变行为的文档,而且据我所知,这应该可以工作。

有人遇到过同样的问题吗,或者可以报告说它对他们来说运行良好?

答案1

我刚刚遇到了这个问题,我的问题是我没有在更新堆栈之前的最后一个屏幕上选中复选框“我承认此模板可能会导致 AWS CloudFormation 创建 IAM 资源。”。在此处输入图片描述

答案2

如果您使用的是 CLI 或 boto,则可以包含“capabilities”参数。这将接受一个列表,但目前唯一接受的条目是“CAPABILITY_IAM”。

cf.update_stack(..., capabilities=['CAPABILITY_IAM'])

或者

cf.create_stack(..., capabilities=['CAPABILITY_IAM'])

这授予整个堆栈树 IAM 创建权限。

答案3

在动态构建 TemplateURL 时,验证检查器无法提前查看是否存在 IAM 资源,这就是它不会要求 IAM_CAPABILITIES 的原因。

解决此问题的最佳方法(目前)是在主模板中创建一个虚拟 IAM 资源来获取提示。

相关内容