Come dovrebbe essere il criterio IAM per consentire all'utente my-user
di accedere a un bucket Amazon S3 denominato my-bucket
?Politica Amazon IAM semplice per s3 utilizzando Rails e Paperclip
Attualmente, ho il seguente criterio assegnato a 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/*"]
}
]
}
ho avuto questa politica di "Campione 1" sul link seguente:
Nel mio file production.rb
, Ho implementato le impostazioni di configurazione per dire a paperclip di usare 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']
}
}
Quando tento di utilizzare la mia app per caricare una foto, ricevo un'eccezione AWS::S3::Errors::AccessDenied
.
Stranamente, se carico la console rotaie, ed eseguire il seguente codice per caricare manualmente un file, esso funziona correttamente:
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'))
così caricate correttamente il file nel mio secchio S3. Sono confuso perché ho chiaramente il permesso di caricare un file in questo modo, ma quando provo a farlo tramite paperclip con le stesse credenziali, ottengo l'errore di autorizzazione negato.
Ancora più confuso, quando assegno la politica AdministratorAccess
a my-user
, paperclip è in grado di caricare correttamente il file.
Qualche idea su come posso risolvere questo problema?