如何在 CloudFormation 中将已签名的 S3 URL 指定为模板?

How can I specify a signed S3 URL as template in CloudFormation?

在 AWS CloudFormation 中,您可以通过上传模板文件或为模板指定 S3 URL 来指定模板。 (指定 Amazon S3 模板 URL)

如果桶是 public,你可以构建一个 URL 供任何人访问 object/template。只要 S3 模板 URL 是一个简单的 URL:

就可以正常工作

https://s3.amazonaws.com/public-bucket/unsigned.template

但是如果存储桶是私有的,如果您想与其他人共享对象,则可以生成签名的 S3 URL。我得到一个 URL,它是私有存储桶中模板的签名 S3 URL:

https://s3.amazonaws.com/private-bucket/signed.template?Signature=Cs6sqUABadcfZAuFu5FSMWAQ%3D&Expires=1459636414&AWSAccessKeyId=AKIAJ23456AXIOUBCNQ

不幸的是,CF 不尊重已签名的 URL 并删除了 .template 之后的所有内容。因此,我收到 Access Denied 错误。有谁知道在 CloudFormation 中将签名的 S3 URL 指定为模板的方法吗?

看来您只能使用您有权访问的 URL(已签名的 URL 已足够注意)。但是如果你愿意使用 aws cli,你也可以使用 curl 来获取模板的内容并使用 --template-body

创建堆栈
$ aws cloudformation create-stack --template-body "$(curl -s '<signed url>')" --stack-name test --parameters ParameterKey=string,ParameterValue=string

如果您正在编写脚本,请将模板保存到临时文件,然后将其传递给模板正文

AWS 终于承认这是 CloudFormation 中的一个错误,他们正在努力修复。尚无预计到达时间。