【问题标题】:ActiveStorage and s3 - setup all images public by defaultActiveStorage 和 s3 - 默认情况下将所有图像设置为公开
【发布时间】:2020-07-31 23:48:24
【问题描述】:

我需要将我的 rails 6 应用程序中的文件上传到 s3 以生成公共链接以与第三方应用程序共享。

实际上我将链接发送到另一个应用程序:

object.media.service_url.sub(/\?.*/, '')

并且存储桶配置具有以下配置:

以及本政策:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Stmt1420751757000",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::XXXXXXXXXXXX:user/YYYYYYYYY"
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::bucket-dev",
            "arn:aws:s3:::bucket-dev/*"
        ]
    }
]

}

但是当我尝试查看 URL 内容时,我仍然收到 AccessDenied 响应:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access Denied</Message>
    <RequestId>CD3A94D81CC8418D</RequestId>
    <HostId>5OFKgoUzoDxoB72g4AIYePONGkn7FtulUNk6kCga57FDSBACzenjipxyeekGNiRbBmXVKsEdxxfiQehb06z4wQ== 
  </HostId>
</Error>

还有其他一些我还缺少的配置吗?

【问题讨论】:

    标签: ruby-on-rails amazon-s3 rails-activestorage


    【解决方案1】:

    我解决了这个问题:

    Rails.application.routes.url_helpers.url_for(object.media)
    

    代替:

    object.media.service_url.sub(/\?.*/, '')
    

    即使您已阻止存储桶的所有公共访问,它仍然有效。

    【讨论】:

      猜你喜欢
      • 2013-10-11
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      相关资源
      最近更新 更多