ruby-on-rails - ActiveStorage 和 s3 - 默认设置所有公开的图像

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

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

实际上我正在发送链接到另一个应用:

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

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

enter image description here

和本政策:

{
"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>

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

最佳答案

好吧,我使用以下方法解决了这个问题:

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

代替:

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

即使您已阻止存储桶的所有公共(public)访问,它也能正常工作。

关于ruby-on-rails - ActiveStorage 和 s3 - 默认设置所有公开的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63200385/

相关文章:

amazon-s3 - MLflow Artifact 存储但未在 UI 中列出

amazon-s3 - 上传到 S3 Bucket 时如何解决最长执行时间?

ruby-on-rails - 未知关键字 : content_type in active storage 5. 2.1.1

ruby-on-rails - 重新轮胎 Elasticsearch 多表/索引搜索

ruby-on-rails - 路由错误-没有路由匹配[POST] "/posts/new"

ruby-on-rails - Rails 4 - 如果条件不适用

python - TypeError 使用 BOTO 库将图像文件上传到 Django 中的 Amazon S3

rails-activestorage - 如何为 ActiveStorage 添加权限?

ruby-on-rails - Rails、事件存储、尝试附加照片时出现错误消息

ruby-on-rails - 在 ruby​​ 中使用 .split 拆分 unicode(我认为)