【问题标题】:How to setup private files with S3, CloudFront and Carrierwave如何使用 S3、CloudFront 和 Carrierwave 设置私有文件
【发布时间】: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


    【解决方案1】:

    TLDR:您应该将 fog_public 设置为 false,以确保文件在您的其他设置之外是私有的。然后,不要调用url,它会根据fog_public 设置而有所不同,而是调用public_url,它应该总是返回asset_host 样式的url。

    详情:

    config.fog_public = true 做了两件事:

    1. 在创建文件时设置公共可读
    2. 返回公共样式的 URL 以供阅读

    config.fog_public = false 做了两件不同的事情:

    1. 创建文件时将公共可读设置为 false
    2. 返回私有/签名样式的 URL 以供阅读

    不幸的是,您需要每种方法的 1/2,而carrierwave 中的url 不直接支持。

    我认为您可能想要离开 config.fog_public = false 以确保文件是您想要的私有文件,但您可能必须以不同的方式获取 url 才能让它们与您想要的看似公开的 url 一起显示。通常,使用carrierwave 建议您应该使用url 来获得您想要的东西,这具有基于fog_public 设置的分支逻辑。您可以跳过此逻辑并直接获取asset_host url,只需调用public_url

    说了这么多,出于我自己的好奇,如果这些文件无论如何都将通过 CDN 公开可用,为什么它们需要通过 S3 保密?

    【讨论】:

    • 我正在查看 Carrierwave::Uploader::Base 但没有找到 #public_url。你是说另一个图书馆吗?
    【解决方案2】:

    您可以在此处查看如何配置每个模型(一个公共,另一个私有):https://stackoverflow.com/a/18800662/5945650

    【讨论】:

      猜你喜欢
      • 2013-09-13
      • 2016-07-23
      • 2019-12-09
      • 2021-05-20
      • 2016-12-09
      • 2012-04-14
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多