fly*_*123 7 ruby-on-rails amazon-s3 paperclip amazon-web-services
我的IAM策略应该如何才能允许用户my-user访问名为的Amazon S3存储桶my-bucket?
目前,我已将以下政策分配给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/*"]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我从以下链接的"示例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']
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用我的应用上传照片时,我收到了一个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'))
Run Code Online (Sandbox Code Playgroud)
这会将文件正确上传到我的S3存储桶.我很困惑为什么我明显有权以这种方式上传文件,但是当我尝试通过回形针使用相同的凭据进行操作时,我得到了权限被拒绝的错误.
更令人困惑的是,当我分配AdministratorAccess策略时my-user,paperclip能够成功上传文件.
知道如何解决这个问题吗?
fly*_*123 10
解决方案如下:https://stackoverflow.com/a/19185045/736864
当paperclip将文件上传到S3时,它还会尝试将文件设置为可公开查看,这意味着需要为用户提供设置权限的访问权限.将s3:PutObjectAcl权限添加到我的IAM策略修复了该问题.
| 归档时间: |
|
| 查看次数: |
1843 次 |
| 最近记录: |