Rails 6.1 中 Active Storage 的公共访问

Jas*_*abe 8 ruby-on-rails amazon-s3 rails-activestorage

我在带有 AWS 的 Rails 站点上使用 Active Storage。升级到 6.1 后,我想根据指南配置公共访问以便我的图像具有永久 URL。

我已经确定我需要保持现有服务原样,以便之前上传的图像继续工作。我创建了一个新的服务和配置的应用程序使用它这样

以前的图像继续这样工作,但新图像上传会导致 Aws::S3::Errors::AccessDenied。请注意,使用的凭据与之前的工作非公共服务中的凭据完全相同。该指南提到存储桶需要具有适当的权限,但没有确切地需要设置什么。

在 AWS 中,“阻止公共访问(存储桶设置)”部分全部设置为“关闭”。在“访问控制列表 (ACL)”中,“存储桶所有者(您的 AWS 账户)”对“对象”和“存储桶 ACL”都有“列出、写入”。没有列出其他权限。我尝试将“所有人(公共访问)”更改为“对象”的“列表”和“存储桶 ACL”的“读取” - 似乎没有解决问题。

如何使用 Active Storage 获取公共 URL?

Jas*_*abe 3

从私人访问切换到公共访问时所需的权限是PutObjectAcl。将其添加到IAM 管理控制台即可使其正常工作。

此外,您可以通过 UI 或脚本将现有服务中的所有图像标记为公共可读,而不是创建新服务。