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

时间:2016-03-03 23:05:58

标签: amazon-web-services amazon-s3 amazon-cloudformation

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

如果存储桶是公共存储的,则可以为任何人构建URL以访问对象/模板。只要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没有兑现已签名的网址,并在.template之后删除所有内容。因此,我收到Access Denied错误。有没有人知道在CloudFormation中将签名的S3 URL指定为模板的方法?

2 个答案:

答案 0 :(得分:4)

AWS终于承认它是CloudFormation中的一个错误,他们正在修复。那还没有ETA。

答案 1 :(得分:0)

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

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

如果您是脚本,请将模板保存到临时文件,然后将其传递给template-body