在 Cloudformation 中,嵌套模板必须向 S3 对象提供 https:// URL。似乎不支持 s3:// URL。
除了使用预签名 URL 之外,嵌套堆栈是否可以使用没有公共读取 ACL 的 S3 对象?
请注意,从这个相关问题中也可以看出,预签名的 URL 有时也不是一个可行的选项,但该问题已得到解决。但是,预签名 URL 的最长 1 周到期仍然令人反感,因为可能需要重新生成嵌套堆栈的 URL 以供将来更新。
在 Cloudformation 中,嵌套模板必须向 S3 对象提供 https:// URL。似乎不支持 s3:// URL。
除了使用预签名 URL 之外,嵌套堆栈是否可以使用没有公共读取 ACL 的 S3 对象?
请注意,从这个相关问题中也可以看出,预签名的 URL 有时也不是一个可行的选项,但该问题已得到解决。但是,预签名 URL 的最长 1 周到期仍然令人反感,因为可能需要重新生成嵌套堆栈的 URL 以供将来更新。
简短的回答是必须指定允许“匿名”Web 请求获取定义嵌套堆栈的模板的策略或 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"
}
}
}
]
}