Rails 5.2 Active Storage purging/deleting 附件不会删除 Blob 或附件记录
Rails 5.2 Active Storage purging/deleting attachements won't delete Blob or Attachent records
我正在使用 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
然后当我检查存储桶时,文件实际上被删除了,但在数据库中查看,Blob
和 Attachment
记录仍然存在。
知道为什么会这样吗?
编辑
我根据接受的答案的建议对我的 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"
]
}
]
}
您用于 Active Storage 的 S3 帐户必须对整个存储桶具有 s3:DeleteObject
权限。 (如 Active Storage guide 中指定,它还必须具有 s3:ListBucket
、s3:PutObject
和 s3:GetObject
权限。)
我正在使用 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
然后当我检查存储桶时,文件实际上被删除了,但在数据库中查看,Blob
和 Attachment
记录仍然存在。
知道为什么会这样吗?
编辑 我根据接受的答案的建议对我的 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"
]
}
]
}
您用于 Active Storage 的 S3 帐户必须对整个存储桶具有 s3:DeleteObject
权限。 (如 Active Storage guide 中指定,它还必须具有 s3:ListBucket
、s3:PutObject
和 s3:GetObject
权限。)