【问题标题】:Rails 5.2 Active Storage purging/deleting attachements won't delete Blob or Attachent recordsRails 5.2 Active Storage 清除/删除附件不会删除 Blob 或附件记录
【发布时间】:2018-10-24 16:14:08
【问题描述】:

我正在使用 rails 5.2,并且正在尝试使用 Amazon S3 设置 Active Storage。我的应用程序具有对 S3 的完全访问权限,并且我可以将 avatar 图像附加到 user。但是当我尝试删除头像时,我遇到了以下问题:

> user.avatar.attached? #true`
> user.avatar.purge
   S3 Storage (697.9ms) Deleted file from key: Ns1KBRzdgxLNnY31sH72vT5t
   S3 Storage (227.0ms) Deleted files by key prefix: variants/Ns1KBRzdgxLNnY31sH72vT5t/
Aws::S3::Errors::AccessDenied: Access Denied

然后当我检查存储桶时,该文件实际上已被删除,但查看数据库,BlobAttachment 记录仍然存在。

任何想法为什么会发生这种情况?

编辑 根据接受的答案的建议,我对我的 IAM 权限进行了一些更新。这些是我更新的项目:

  • 将策略附加到我的 IAM 用户,而不是我的 s3 存储桶。
  • 列出了所有必需的操作。
  • 在资源字段中添加整个存储桶,而不仅仅是所有对象。

最后我的策略 json 看起来像这样:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": [
                    "s3:PutObject",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:DeleteObject"
                ],
                "Resource": [
                    "arn:aws:s3:::my-bucket/*",
                    "arn:aws:s3:::my-bucket"
                ]
            }
        ]
    }

【问题讨论】:

    标签: rails-activestorage ruby-on-rails-5.2


    【解决方案1】:

    您用于 Active Storage 的 S3 帐户必须拥有整个存储桶的 s3:DeleteObject 权限。 (在Active Storage guide 中指定,它还必须具有s3:ListBuckets3:PutObjects3:GetObject 权限。)

    【讨论】:

    • 谢谢,我找到原因了。就我而言,策略中的资源字段缺少整个存储桶的值。这是我的政策"Resource": [ "arn:aws:s3:::my-bucket/*", "arn:aws:s3:::my-bucket" ] 中的资源字段
    • @felix 你能把它作为另一个答案吗 - 很难在评论中阅读
    • @stevec 我编辑了问题,包括解决方案和评论中的代码,以便更好地阅读。
    猜你喜欢
    • 2019-11-01
    • 1970-01-01
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 2019-01-27
    • 1970-01-01
    • 2011-02-20
    相关资源
    最近更新 更多