爲了讓用戶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
時,回形針能夠成功上載文件。
任何想法如何解決這個問題?