【问题标题】:Simple Amazon IAM policy for s3 using Rails and Paperclip使用 Rails 和 Paperclip 的 s3 简单 Amazon IAM 策略
【发布时间】:2017-11-27 09:17:41
【问题描述】:

我的 IAM 策略应该是什么样子才能允许用户 my-user 访问名为 my-bucket 的 Amazon S3 存储桶?

目前,我将以下策略分配给my-user

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

我从以下链接的“示例 1”中获得了此政策:

http://blogs.aws.amazon.com/security/post/Tx3VRSWZ6B3SHAV/Writing-IAM-Policies-How-to-grant-access-to-an-Amazon-S3-bucket

在我的production.rb 文件中,我已经实现了配置设置来告诉回形针使用 S3:

config.paperclip_defaults = {
  :storage => :s3,
  :s3_credentials => {
    :bucket => 'my-bucket',
    :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
    :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
  }
}

当我尝试使用我的应用上传照片时,我收到 AWS::S3::Errors::AccessDenied 异常。

奇怪的是,如果我加载 rails 控制台,并运行以下代码手动上传文件,它可以正常工作:

s3 = AWS::S3.new(access_key_id: ENV['AWS_ACCESS_KEY_ID'], secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
bucket = s3.buckets['my-bucket']
obj = bucket.objects['new_file']
obj.write(Pathname.new('/path/to/file'))

这会将文件正确上传到我的 S3 存储桶。我很困惑为什么我显然有权以这种方式上传文件,但是当我尝试通过具有相同凭据的回形针进行上传时,我收到了权限被拒绝错误。

更令人困惑的是,当我将AdministratorAccess 策略分配给my-user 时,回形针能够成功上传文件。

知道如何解决这个问题吗?

【问题讨论】:

    标签: ruby-on-rails amazon-web-services amazon-s3 paperclip


    【解决方案1】:

    解决办法在这里:https://stackoverflow.com/a/19185045/736864

    当回形针将文件上传到 S3 时,它也会尝试将文件设置为公开可见,这意味着需要授予用户访问权限才能设置权限。将 s3:PutObjectAcl 权限添加到我的 IAM 策略解决了该问题。

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 2015-08-02
      • 2023-03-29
      • 2023-04-07
      • 2013-10-11
      • 2015-10-06
      • 2013-08-05
      • 2017-04-03
      • 2018-04-07
      相关资源
      最近更新 更多