所有
我的一切工作正常:图片正在上传,可以通过Web使用回形针和S3进行访问,除非我登录rails c
并输入类似的内容:
> User.first.avatar.exists?
[AWS S3 400 0.093287 0 retries] head_object(:bucket_name=>"mozg-staging-static",:key=>"users/avatars/000/000/001/original/289736.jpg") AWS::S3::Errors::BadRequest AWS::S3::Errors::BadRequest
=> false
clear
方法也是如此。找不到解决方案。
我有此权限政策:
{
"Sid": "Stmt1436958517000",
"Effect": "Allow",
"Action": [
"s3:AbortMultipartUpload",
"s3:DeleteObject",
"s3:DeleteObjectVersion",
"s3:GetBucketAcl",
"s3:GetBucketCORS",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectVersionAcl",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:ListBucketVersions",
"s3:ListMultipartUploadParts",
"s3:ListObjects",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:PutObjectVersionAcl",
"s3:RestoreObject"
],
"Resource": [
"arn:aws:s3:::mozg-staging-static",
"arn:aws:s3:::mozg-staging-static/*"
]
}
感谢您的支持。
答案 0 :(得分:0)
这可能是您的政策的问题,您可以尝试:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": ["arn:aws:s3:::mozg-staging-static"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::mozg-staging-static/*"]
}
]
}
需要在存储桶级别设置ListBucket
操作,而需要针对存储桶中的对象设置PutObject
,GetObject
和DeleteObject
。我遗漏了其他行动以保持答案简短。如果需要,您当然需要重新添加它们。您可以在此处找到操作列表以及它们是桶操作还是对象操作:http://docs.aws.amazon.com/AmazonS3/latest/dev/using-with-s3-actions.html