2015-10-03 30 views
7

Conosco S3 con ruby ​​per caricare file su Amazon Web Service. Recentemente ho dovuto affrontare il seguente errore: AWS::S3::Errors::AccessDenied Access Denied. Nel cercare su google, ho trovato this post sull'errore. Afferma che le politiche del bucket non sono sufficienti per consentire l'accesso tramite l'app web e che l'utente deve avere anche l'accesso come amministratore.Accesso negato S3 con graffetta

Ho dato una prova e funziona bene, ma mi sembra che questo è un indicatore che non sto facendo bene, dato che l'accesso di amministratore non è menzionato in qualsiasi altra documentazione che ho letto. Sto usando la gemma aws-sdk. Qualcuno potrebbe valutare se l'accesso all'amministratore è necessario? Grazie molto!

+0

non si dovrebbe realmente bisogno Admin Access' 'per raggiungere questo obiettivo. Avete l'impostazione di 'access_key_id' e 'secret_access_key' di AWS nella vostra configurazione di heroku? Devi solo assicurarti che il tuo account utente abbia impostato un "Criteri di accesso" nella Console IAM. Vedi questo per ulteriori informazioni: https://github.com/thoughtbot/paperclip/wiki/Paperclip-with-Amazon-S3 –

+0

@KMRakibulIslam Grazie per la risposta! In realtà non sto ancora provando questo su Heroku; Sto solo lavorando fuori dal mio localhost. Penso che mi manca la necessaria "politica di accesso" nella console IAM. Quale politica devo assegnare all'utente? 'AmazonsS3FullAccess?' – neanderslob

+0

sì, dovrebbe funzionare. –

risposta

4

Per questo non è necessario lo Admin Access. Assicurati di avere l'installazione di AWS access_key_id e secret_access_key nella tua configurazione di heroku. Inoltre, è necessario accertarsi che l'account utente disponga di un numero Access Policy impostato nella Console IAM di AWS.

Vedere this post per ulteriori informazioni.

L'autorizzazione predefinita per Paperclip è :public_read a meno che non si specifichi che il bucket è privato.

vedere questo per informazioni circa Module: Paperclip::Storage::S3

+1

Terminato l'impostazione di AmazonS3FullAccess per l'utente e ha funzionato come un fascino. Se stavo partizionando con altri bucket, immagino che potrei affinare la politica più precisamente creando uno personalizzato ma questo funzionerà per ora. Grazie! – neanderslob

+0

Sembra fantastico! Grazie :) –

6

Come spiegato nella risposta accettata, non dovrebbe essere necessario "Admin Access". Tuttavia, la tipica politica per dare accesso a un bucket, come documentato in alcuni esempi forniti da Amazon, non potrebbe essere sufficiente per paperclip.

La seguente politica ha lavorato per me:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:GetBucketLocation", 
       "s3:ListAllMyBuckets" 
      ], 
      "Resource": "arn:aws:s3:::*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:ListBucket" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::bucket-name-to-be-set-by-you" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::bucket-name-to-be-set-by-you/*" 
      ] 
     } 
    ] 
} 
6

Nessuna delle risposte esistenti in realtà affermare che le politiche è necessario concedere, ecco che sono: s3:PutObject, s3:DeleteObject e s3:PutObjectAcl.

Ecco la politica S3 secchio completa che sto usando per consentire Paperclip di mettere gli oggetti con il permesso :public_read:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::IAM_USER_ID:user/IAM_USER_NAME" 
      }, 
      "Action": [ 
       "s3:PutObject", 
       "s3:DeleteObject", 
       "s3:PutObjectAcl" 
      ], 
      "Resource": "arn:aws:s3:::S3_BUCKET_NAME/*" 
     } 
    ] 
}