CloudFormation嵌套模板能否在没有预签名URL的情况下到达私有S3对象?

时间:2018-07-07 00:34:01

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

在Cloudformation中,嵌套模板必须为S3对象提供https:// URL。似乎s3://不支持URL。

Stack Template Parameter

除了使用预签名URL之外,嵌套堆栈是否可以与没有公共读取ACL的S3对象一起使用?

请注意,从这个相关问题中也可以看出,预先签名的URL既不是可行的选择,但该问题已得到解决。但是,预签名URL的最长1周有效期仍然令人反感,因为嵌套堆栈的URL可能需要重新生成以供将来更新。

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

1 个答案:

答案 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"
                }
            }
        }
    ]
}