【问题标题】:Can a CloudFormation nested template reach a private S3 object without Presigned URL?CloudFormation 嵌套模板可以在没有预签名 URL 的情况下访问私有 S3 对象吗?
【发布时间】:2018-12-15 13:44:57
【问题描述】:

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

Stack Template Parameter

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

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

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

【问题讨论】:

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


    【解决方案1】:

    简短的回答是必须指定允许“匿名”网络请求获取定义嵌套堆栈的模板的策略或 ACL。

    但是,我想出了一个可以阻止真正“公共”访问的小技巧。似乎 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"
                    }
                }
            }
        ]
    }
    

    【讨论】:

    • 这是一个有趣的答案。 AWS 确实发布了 AWS 服务的 IP 地址 (CIDR) 列表。 10.0.0.0/8 不在列表中。您指定了专用网络 CIDR。您必须进行其他设置以允许此访问。 docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html
    • > 您必须进行其他设置以允许此访问。不,我不知道,没有 VPC 端点或类似的东西。这是一个没有特殊设置的普通新帐户。 CloudFormation 的目的不是为了覆盖整个世界,而且嵌套堆栈不会跨区域,所以我并不觉得它会是一个私有 CIDR 很令人惊讶。它没有理由离开互联网网关,因此没有理由拥有可公开路由的源 IP。
    • 你让我思考这个问题,但我不知道答案。感谢您的回复。
    猜你喜欢
    • 2017-11-17
    • 2021-02-25
    • 2011-04-11
    • 2020-11-17
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多