使用Paperclip访问拒绝S3

nea*_*lob 10 ruby ruby-on-rails amazon-s3 amazon-web-services aws-sdk

我熟悉使用S3和ruby将文件上传到Amazon Web Service.我最近遇到了以下错误:AWS::S3::Errors::AccessDenied Access Denied.在谷歌上四处寻找,我发现这篇文章的错误.它声称存储桶策略不足以允许通过Web应用程序进行访问,并且用户也必须获得"管理员访问权限".

我已经尝试了这个并且它工作正常但我觉得这表明我做得不对,因为在我读过的任何其他文档中都没有提到管理员访问权限.我正在使用aws-sdk gem.任何人都可以权衡管理员访问是否必要?非常感谢!

mxx*_*xxk 7

现有的答案都不实际上说明你需要授予哪些政策,所以在这里,他们是: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/*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)


Gui*_*rmo 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/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)


K M*_*lam 5

你不应该真的需要Admin Access实现这一目标.确保您的heroku配置中包含AWS access_key_idsecret_access_key设置.而且,您还需要确保您的用户帐户Access Policy在AWS IAM控制台中有一组.

有关更多信息,请参阅此帖子.

:public_read除非您将存储桶指定为私有,否则Paperclip的默认权限.

有关Module:Paperclip :: Storage :: S3的信息,请参阅此处