我熟悉使用S3和ruby将文件上传到Amazon Web Service。我最近遇到了以下错误:AWS::S3::Errors::AccessDenied Access Denied
。在google上四处寻找时,我发现了this post错误。它声称存储桶策略不足以允许通过Web应用程序进行访问,并且用户也必须获得“管理员访问权限”。
我已经尝试了这个并且它工作正常但我觉得这表明我做得不对,因为在我读过的任何其他文档中都没有提到管理员访问权限。我正在使用aws-sdk gem。任何人都可以权衡管理员访问是否必要?非常感谢!
答案 0 :(得分:6)
如接受的答案中所述,您不应该需要“管理员访问权限”。但是,如亚马逊提供的一些示例中所述,提供访问存储桶的典型策略对于回形针来说是不够的。
以下政策对我有用:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Resource": "arn:aws:s3:::*"
},
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket-name-to-be-set-by-you"
]
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name-to-be-set-by-you/*"
]
}
]
}
答案 1 :(得分:6)
现有的答案都没有说明您需要授予哪些政策,因此它们分别是:s3:PutObject
,s3:DeleteObject
和s3:PutObjectAcl
。
这是我用来允许Paperclip放置具有:public_read
权限的对象的完整S3存储桶策略:
{
"Version": "2008-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::IAM_USER_ID:user/IAM_USER_NAME"
},
"Action": [
"s3:PutObject",
"s3:DeleteObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::S3_BUCKET_NAME/*"
}
]
}
答案 2 :(得分:5)
你真的不需要Admin Access
来实现这一目标。
确保您在heroku配置中设置了AWS access_key_id
和secret_access_key
。而且,您还需要确保您的用户帐户在AWS IAM控制台中设置了Access Policy
。
有关详情,请参阅this post。
Paperclip的默认权限为:public_read
,除非您将存储桶指定为私有。