ActiveStorage 和 s3 - 默认设置所有图像 public
ActiveStorage and s3 - setup all images public by default
我需要将我的 rails 6 应用程序中的文件上传到 s3,以便生成 public link 与第三方应用程序共享。
实际上我正在将 link 发送到另一个应用:
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>
我还缺少其他一些配置吗?
好吧,我使用以下方法解决了这个问题:
Rails.application.routes.url_helpers.url_for(object.media)
而不是:
object.media.service_url.sub(/\?.*/, '')
即使您已阻止对存储桶的所有 public 访问,它仍然有效。
我需要将我的 rails 6 应用程序中的文件上传到 s3,以便生成 public link 与第三方应用程序共享。
实际上我正在将 link 发送到另一个应用:
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>
我还缺少其他一些配置吗?
好吧,我使用以下方法解决了这个问题:
Rails.application.routes.url_helpers.url_for(object.media)
而不是:
object.media.service_url.sub(/\?.*/, '')
即使您已阻止对存储桶的所有 public 访问,它仍然有效。