拒绝访问S3与Paperclip

11

我正在学习使用ruby上传文件至Amazon Web Service的S3。最近遭遇了以下错误:AWS::S3::Errors::AccessDenied Access Denied。在Google上翻阅后,我找到了这篇文章解决了这个问题。它声称桶策略不足以允许通过Web应用程序访问,并且用户必须被授予“管理员访问权限”。

我尝试了一下,它运行良好,但我觉得这表明我做错了什么,因为其他我阅读过的文档中没有提到需要管理员访问权限。我正在使用aws-sdk gem。 请问是否需要管理员访问权限?非常感谢!


你实际上不需要 Admin Access 来实现这个。你在 Heroku 配置中是否设置了 AWS 的 access_key_idsecret_access_key?你只需要确保你的用户账户在 IAM 控制台中设置了“访问策略”。查看此链接以获取更多信息:https://github.com/thoughtbot/paperclip/wiki/Paperclip-with-Amazon-S3 - K M Rakibul Islam
@KMRakibulIslam 谢谢您的回应!我实际上还没有在Heroku上尝试这个;我只是在本地主机上工作。我想我在IAM控制台中缺少必要的“访问策略”。我应该给用户分配哪个策略?AmazonsS3FullAccess? - neanderslob
应该可以的。 - K M Rakibul Islam
3个回答

8

现有答案都没有明确说明需要授予哪些权限,以下是需要的: 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/*"
        }
    ]
}

6

如已接受答案所述,您不应需要“管理员访问权限”。然而,亚马逊在一些示例中记录给予存储桶访问权限的典型策略可能不足以满足paperclip的要求。

以下策略对我有效:

{
    "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/*"
            ]
        }
    ]
}

这应该是被接受的答案。对我非常有效。谢谢 https://stackoverflow.com/users/92239/guillermo - chanko

5
你不需要真正的管理员权限来完成这个操作。请确保你在Heroku配置中设置了AWS access_key_idsecret_access_key,并且你的用户账户在AWS IAM控制台中设置了访问策略
参考此文章获取更多信息。
除非你指定存储桶为私有,否则Paperclip的默认权限是:public_read
关于Module: Paperclip::Storage::S3的信息,请查看此处。

1
最终为用户设置了AmazonS3FullAccess,效果非常好。如果我要与其他存储桶进行分区,我可以通过创建自定义策略来更精确地优化策略,但现在这个已经足够了。谢谢! - neanderslob
太好了!谢谢 :) - K M Rakibul Islam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接