如何在 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 中的一个错误,他们正在努力修复。尚无预计到达时间。
在 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 中的一个错误,他们正在努力修复。尚无预计到达时间。