【发布时间】:2016-11-13 13:14:54
【问题描述】:
目前我有一个 S3 存储桶,其访问策略仅允许从 CloudFront 源访问身份进行访问:
{
"Version": "2012-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "Grant a CloudFront Origin Identity access to support private content",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXX"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
这应该可以防止任何非通过 CloudFront 分配访问 S3 资产。
但是,当我在网络浏览器中输入 S3 url 时,我仍然可以访问该文件。
我正在使用 Carrierwave 和 Fog 将文件上传到 S3 并拥有 config.fog_public = true,所以我相信发生的事情是 Fog 在上传的对象上设置了公共访问设置。
我尝试将设置更改为 config.fog_public = false,但随后开始返回忽略我的 asset_host 设置的签名 URL(因此提供了签名的 S3 URL,而不是未签名的 CloudFront URL)。
我认为我需要保留 config.fog_public = true 并拥有一个 S3 存储桶策略来覆盖 Fog 对我的对象施加的公共访问设置。
谁能建议这是否正确或有更好的方法?
【问题讨论】:
标签: amazon-s3 carrierwave fog