我的IAM策略应该是什么样的,以便允许用户my-user访问名为my-bucket的Amazon S3存储桶?
目前,我已为我的用户分配以下策略:
{ "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”获得此政策:
在我的production.rb文件中,我已经实现了配置设置来告诉paperclip使用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时,paperclip能够成功上传文件.
知道如何解决这个问题吗?