Какова должна быть моя политика IAM, чтобы позволить пользователю my-user
получить доступ к ведро Amazon S3 под названием my-bucket
?Простая политика Amazon IAM для s3 с использованием Rails и Paperclip
В настоящее время я следующие политики назначены 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 ведро. Я смущен, почему у меня явно есть разрешение на загрузку файла таким образом, но когда я пытаюсь сделать это с помощью paperclip с теми же учетными данными, я получаю отказ в разрешении.
Еще более запутанным, когда я назначаю политику AdministratorAccess
на my-user
, paperclip может успешно загрузить файл.
Любая идея, как я могу это решить?