为了让用户my-user
能够访问名为my-bucket
的Amazon S3存储桶,我的IAM策略应该是什么样子?使用Rails和Paperclip为s3创建简单Amazon IAM策略
目前,我有以下的政策分配给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” 这一政策:
在我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
异常。
奇怪的是,如果我加载了轨道控制台,并运行下面的代码手动上传文件,它工作正常:
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
时,回形针能够成功上载文件。
任何想法如何解决这个问题?