在Cloudformation中,嵌套模板必须为S3对象提供https:// URL。似乎s3://不支持URL。
除了使用预签名URL之外,嵌套堆栈是否可以与没有公共读取ACL的S3对象一起使用?
请注意,从这个相关问题中也可以看出,预先签名的URL既不是可行的选择,但该问题已得到解决。但是,预签名URL的最长1周有效期仍然令人反感,因为嵌套堆栈的URL可能需要重新生成以供将来更新。
How can I specify a signed S3 URL as template in CloudFormation?
答案 0 :(得分:1)
简短的答案是必须指定一个策略或ACL,以允许“匿名” Web请求获取定义嵌套堆栈的模板。
但是,我发现了一个可以阻止真正的“公共”访问的小技巧。看来CloudFormation从10.0.0.0/8内的某个IP地址进行HTTP GET。 (至少就我而言,我认为是YMMV,因为AWS并不能保证在我发现的任何地方都可以做到这一点。)
因此,您可以在策略中添加一个条件,以限制对该私有范围的访问,从而有效地阻止了Internet读取模板。
合适的存储桶策略如下:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-cloudformation-bucket-name/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "10.0.0.0/8"
}
}
}
]
}