Amazon Cloudfront con S3. Accesso negato

Stiamo cercando di distribuire i secchi S3 tramite Cloudfront, ma per qualche motivo l'unica risposta è un documento XML AccessDenied come il seguente:

<Error> <Code>AccessDenied</Code> <Message>Access Denied</Message> <RequestId>89F25EB47DDA64D5</RequestId> <HostId>Z2xAduhEswbdBqTB/cgCggm/jVG24dPZjy1GScs9ak0w95rF4I0SnDnJrUKHHQC</HostId> </Error> 

Ecco le impostazioni che utilizziamo:

  • impostare il record di Google Apps SPF in path Amazon AWS 53
  • Può una CloudFormation di AWS creare un KeyPair per utilizzare successivamente quando avvii istanze?
  • Consenti ai non amministratori di eseguire programmi come amministratori in Windows 7
  • Permessi e gruppi su un nuovo server
  • aprire la port 80 su Ubuntu AWS
  • Come aggiungere direttive a php.ini su AWS Elastic Beanstalk?
  • Impostazioni di distribuzioneImpostazioni origine

    Ecco la politica per il secchio

     { "Version": "2008-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity *********" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::x***-logos/*" } ] } 

  • Utilizzo di EC2 come Cloudfront Origin Server
  • Strict-Transport-Security su CloudFront con origine S3?
  • Webstats per grandi registri Amazon S3 / Cloudfront?
  • Qual è il modo migliore per simulare l'essere dietro il grande firewall della Cina?
  • CloudFront S3 Accesso negato
  • Azioni Blue / Green con CloudFront
  • 3 Solutions collect form web for “Amazon Cloudfront con S3. Accesso negato”

    Se si sta accedendo alla radice della distribuzione CloudFront, è necessario impostare un object root predefinito: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html

    Per specificare un object root predefinito utilizzando la console CloudFront:

    • Accedi alla Console di gestione di AWS e apri la console di Amazon CloudFront all'indirizzo https://console.aws.amazon.com/cloudfront/ .

    • Nell'elenco delle distribuzioni nel riquadro superiore, select la distribuzione da aggiornare.

    • Nel riquadro Dettagli distribuzione , nella scheda Generale , fare clic su Modifica .

    • Nella window di dialogo Modifica distribuzione , nel field Oggetto radice predefinito , immettere il nome file dell'object root predefinito.

      Inserisci solo il nome dell'object, ad esempio index.html . Non aggiungere un / prima del nome dell'object.

    • Per salvare le modifiche, fare clic su Sì, Modifica .

    Ho appena avuto lo stesso problema e mentre la risposta di Kousha risolve il problema per index.html nel path root, il mio problema è stato anche con sotto-directory come ho usato quelle combinate con index.html per get "URL graziosi" (esempio .com / qualcosa / piuttosto che "brutto" esempio.com/something.html)

    Parzialmente è anche l'errore di Amazon, perché quando impostate la distribuzione di CloudFront, ti offrirà i secchi S3 da scegliere, ma se scegli uno di quelli che utilizzerà l'URL della benna piuttosto che l'URL di sito web statico come backend.

    Quindi, per risolvere il problema:

    • Abilita l'hosting statico del sito per il secchio
    • Impostare correttamente l' indice (e forse l' errore )
    • URL di endpoint di copia – puoi trovarlo accanto alle impostazioni precedenti – Dovrebbe apparire qualcosa di simile: <bucket.name> .s3-website- <aws-region> .amazonaws.com
    • Utilizza questo URL come origine Distribuzione CloudFront. (Questo renderà anche l' impostazione predefinita di Root Object CF non necessaria, ma non fa male per impostarla comunque)

    Ho avuto la stessa questione di @Cezz, anche se la soluzione non functionrebbe nel mio caso.

    Non appena l'hosting statico di siti web è abilitato per il secchio, significa che gli utenti possono accedere al contenuto tramite l'URL Cloudfront o l'URL S3, che non è sempre auspicabile. Ad esempio, nel mio caso, la distribuzione Cloudfront è abilitata SSL e gli utenti non dovrebbero accedere a una connessione non SSL.

    La soluzione che ho trovato era:

    • mantenere il sito web statico disabilitato sul secchio S3
    • mantenere l'origine di distribuzione Cloudfront come un ID S3
    • impostare "Limitare l'accesso alla benna" a "Sì" (e per facilitare, consentire a CloudFront di aggiornare automaticamente la politica della benna)
    • su "Pagine di errore", creare una risposta personalizzata e il codice di errore della mappa "403: Proibito" alla pagina di risposta desiderata, vale a dire /index.html, con un codice di risposta di 200

    Notare però che nel mio caso, sto servendo un'applicazione di una pagina di javascript where tutti i routes sono risolti da index.html. Se hai routes che risolvono in oggetti diversi nel tuo bucket S3, questo non funziona.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.