Rails 5.2 Active Storage清除/删除附件不会删除Blob或Attachent记录

时间:2018-05-14 22:25:32

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

我正在使用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"
                ]
            }
        ]
    }

1 个答案:

答案 0 :(得分:3)

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