无法以私有IAM用户AWS S3存储桶的身份进行读写

时间:2019-02-09 20:54:37

标签: ruby-on-rails heroku amazon-s3 paperclip amazon-iam

我在S3上创建了一个存储桶,我希望它是一个私有存储桶,因此没有任何对象直接链接的人不能访问该对象,并且只能通过我的应用访问该存储桶的所有对象。

我已经在 Ruby on Rails 中开发了我的应用,并部署在 Heroku 上,并使用 PaperClip 进行文件存储。

由于我不想公共访问,因此我在 权限 下的 公共访问设置 中阻止了公共访问。桶信息中心的“ strong>”标签。

设置屏幕截图图像: enter image description here 我创建了一个IAM用户,还创建了一个IAM策略并分配给该用户。这是我的政策。 但是我收到访问被拒绝错误

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

在我的production.rb中,我正在使用Paper3cip的S3凭据,如下所示:

config.paperclip_defaults = {
    storage: :s3,
    s3_credentials: {
      bucket: ENV['S3_BUCKET_NAME'],
      access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
      s3_region: ENV['AWS_REGION'],
    }
  }

并且我已经在Heroku中定义了这些环境变量。访问密钥ID和秘密访问密钥是我的IAM用户的。

在我的paperclip.rb中,我有:

Paperclip::Attachment.default_options[:s3_host_name] = 's3.amazonaws.com'

错误:

我在Chrome控制台中收到的错误是Failed to load resource: the server responded with a status of 403 (Forbidden)

0 个答案:

没有答案