Perché ricevo l'errore “403 access denied” quando utilizzo un endpoint del sito Web Amazon S3 come origine della distribuzione CloudFront?
Utilizzo un bucket Amazon Simple Storage Service (Amazon S3) come origine della distribuzione Amazon CloudFront. Desidero risolvere l’errore "403 access denied".
Risoluzione
Per risolvere i problemi delle distribuzioni CloudFront con gli endpoint del sito Web Amazon S3 come origine, completa le seguenti attività.
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Revisione della crittografia degli oggetti nel bucket
Il Servizio AWS di gestione delle chiavi (AWS KMS) non supporta richieste anonime. I bucket Amazon S3 che consentono l'accesso anonimo o pubblico non applicano questo accesso agli oggetti crittografati con AWS KMS. Rimuovi la crittografia AWS KMS dagli oggetti S3 che desideri pubblicare. Invece della crittografia AWS KMS, utilizza AES-256 per crittografare gli oggetti.
**Controllo della crittografia degli oggetti con AWS KMS **
Per controllare se gli oggetti nel bucket sono crittografati con AWS KMS, completa le seguenti attività:
Visualizza le proprietà dell’oggetto sulla console Amazon S3. Se AWS-KMS è selezionato nella finestra di dialogo Crittografia, significa che l'oggetto è crittografato con AWS KMS.
Oppure, avvia AWS CLI per eseguire il comando head-object. Se il comando restituisce ServerSideEncryption come aws:kms, significa che l'oggetto è crittografato con AWS KMS.
Modifica delle impostazioni di crittografia di un oggetto
Per utilizzare la console Amazon S3 per modificare le impostazioni di crittografia dell'oggetto, consulta Specifying server-side encryption with AWS KMS (SSE-KMS).
Per utilizzare AWS CLI per modificare le impostazioni di crittografia dell'oggetto, verifica che il bucket dell'oggetto non abbia AWS KMS come crittografia predefinita. Se la crittografia predefinita del bucket è AWS KMS, modificala in SSE-S3.
Se il bucket non ha una crittografia predefinita, esegui il comando seguente per copiare l'oggetto su se stesso e rimuovere la crittografia dell'oggetto:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket. Quando si copia l'oggetto su se stesso, l'azione rimuove le impostazioni per storage-class e website-redirect-location. Per mantenere queste impostazioni nel nuovo oggetto, specifica esplicitamente questi valori nella richiesta di copia.
Revisione della policy del bucket
La policy del bucket non può contenere un'istruzione di rifiuto che blocca l'accesso pubblico in lettura all'azione s3:GetObject.
Se disponi di un'istruzione di autorizzazione esplicita per s3:getObject, assicurati che non ci sia un'istruzione di rifiuto esplicita che sia in conflitto con l'istruzione. Un'istruzione di rifiuto esplicita ha sempre la precedenza su un'istruzione esplicita di autorizzazione.
Per rivedere la policy del bucket per s3:getObject, completa i seguenti passaggi:
- Apri la console Amazon S3, quindi accedi al tuo bucket S3.
- Scegli la scheda Autorizzazioni.
- Scegli Policy del bucket.
- Rivedi la policy del bucket per le istruzioni con "Action": " s3:GetObject " o " Action": " s3:* ".
- Modifica la policy del bucket per rimuovere o modificare le istruzioni che bloccano l'accesso pubblico in lettura a s3:getObject.
Ad esempio, la seguente policy contiene un'istruzione di autorizzazione esplicita per l'accesso pubblico a s3:getObject. Tuttavia, esiste un'istruzione di rifiuto esplicita per s3:GetObject che blocca l'accesso, a meno che la richiesta non provenga da uno specifico Amazon Virtual Private Cloud (Amazon VPC). Modifica questa policy per consentire l'azione s3:getObject:
{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Sid": "Allow-OAI-Access-To-Bucket", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EAF5#########" }, "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "Allow-Public-Access-To-Bucket", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] }, { "Sid": "Access-to-specific-VPCE-only", "Effect": "Deny", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringNotEquals": { "aws:sourceVpce": "vpce-1a2b3c4d" } } } ] }
La seguente policy è un esempio di policy del bucket Amazon S3 che consente l'accesso pubblico in sola lettura all'endpoint del sito web S3:
{ "Version": "2012-10-17", "Statement": { "Sid": "AllowPublicReadOnly", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } }
Verifica della proprietà del bucket e dell'oggetto
Affinché una policy del bucket consenta l'accesso pubblico in lettura agli oggetti, anche l'account AWS proprietario del bucket deve possedere gli oggetti.
Nota: il requisito della proprietà degli oggetti si applica all'accesso pubblico in lettura concesso da una policy del bucket. Non si applica all'accesso pubblico in lettura concesso dalla lista di controllo degli accessi (ACL) dell'oggetto.
Conferma che il bucket e gli oggetti abbiano lo stesso proprietario
Nota: puoi anche utilizzare la console Amazon S3 per controllare i proprietari del bucket e dell’oggetto. I proprietari sono indicati nella scheda Autorizzazioni del bucket o dell'oggetto.
Per utilizzare AWS CLI per controllare i proprietari di bucket e oggetti, esegui i seguenti comandi:
Esegui il comando list-buckets per ottenere l'ID canonico S3 del proprietario del bucket:
aws s3api list-buckets --query Owner.ID
Esegui il comando list-objects per ottenere l'ID canonico S3 del proprietario dell'oggetto:
aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html
Nota: l'output del comando di esempio precedente mostra un singolo oggetto, ma è possibile utilizzare il comando list-objects per controllare diversi oggetti. Se gli ID canonici non corrispondono, il bucket e l'oggetto hanno proprietari diversi.
Aggiornamento della proprietà dell’oggetto
I proprietari dei bucket possono gestire la proprietà degli oggetti con Proprietà oggetto S3. L'impostazione Proprietà oggetto S3 è attivata per impostazione predefinita per tutti i nuovi bucket S3. Per aggiornare un bucket esistente, consulta Setting Object Ownership on an existing bucket.
È consigliabile che i proprietari di bucket utilizzino l'impostazione Proprietà oggetto S3 su tutti i bucket. Inoltre, è consigliabile gestire le autorizzazioni tramite i ruoli e le policy dei bucket di AWS Identity and Access Management (IAM).
Per rimuovere le ACL per il bucket e assumere la proprietà di tutti gli oggetti nel bucket, esegui il comando put-bucket-ownership-controls:
aws s3api put-bucket-ownership-controls --bucket example-bucket --ownership-controls 'Rules=[{ObjectOwnership=BucketOwnerEnforced}]'
Se non desideri disattivare le ACL sul tuo bucket S3, cambia il proprietario dell'oggetto con il proprietario del bucket.
Completa i seguenti passaggi:
-
Dall'account del proprietario dell'oggetto, esegui il comando get-object-acl per recuperare le autorizzazioni ACL assegnate all'oggetto:
aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name
Nota: se l'oggetto dispone delle autorizzazioni ACL bucket-owner-full-control, vai al passaggio 3.
-
Se l'oggetto non dispone delle autorizzazioni ACL bucket-owner-full-control, esegui il comando put-object-acl dall'account del proprietario dell'oggetto:
aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control
-
Dall'account del proprietario del bucket, esegui il comando seguente per copiare l'oggetto su se stesso e modificare il proprietario dell'oggetto:
aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html
Nota: sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket. Sostituisci DOC-EXAMPLE-BUCKET con il nome del tuo bucket.
Revisione delle impostazioni di blocco dell’accesso pubblico per il bucket
Assicurati che nessuna impostazione di blocco dell’accesso pubblico Amazon S3 sia applicata al bucket o all'account. Queste impostazioni possono sovrascrivere le autorizzazioni che consentono l'accesso pubblico in lettura. Il blocco dell'accesso pubblico Amazon S3 può essere applicato a singoli bucket o account AWS.
Verifica che gli oggetti nel bucket siano accessibili al pubblico
Una distribuzione che utilizza un endpoint del sito Web supporta solo contenuti accessibili al pubblico. Per determinare se un oggetto nel bucket S3 è accessibile pubblicamente, apri l'URL dell'oggetto dell'endpoint del sito Web S3 in un browser web. Oppure, esegui un comando curl sull'URL.
Esempio:
http://DOC-EXAMPLE-BUCKET.s3-website-us-east-1.amazonaws.com/index.html
Se il browser Web o il comando curl restituiscono un errore di accesso negato, l'oggetto non è accessibile pubblicamente.
Per consentire l'accesso pubblico in lettura, completa una delle seguenti attività:
- Crea una policy del bucket che concede accesso pubblico in lettura per tutti gli oggetti nel bucket.
- Usa la console Amazon S3 per concedere l'accesso pubblico in lettura all’oggetto.
Revisione dell'opzione Pagamento a carico del richiedente
Se Pagamento a carico del richiedente è attivato, disattiva l'opzione. I bucket Pagamento a carico del richiedente non consentono l'accesso tramite un endpoint del sito Web.
Revisione dell’intestazione personalizzata
Se utilizzi l'intestazione Referente per limitare l'accesso da CloudFront all'origine dell'endpoint del sito Web S3, controlla la policy del bucket. Verifica che il valore o il token segreto impostato nella policy del bucket S3 corrisponda al valore nell'intestazione personalizzata di origine di CloudFront.
Per utilizzare un'istruzione di rifiuto esplicita nella policy del bucket, deve esistere un'istruzione di autorizzazione che conceda l'accesso in base all'intestazione referente. Non puoi concedere l'accesso solo con un’istruzione di rifiuto esplicita.
Ad esempio, la seguente policy del bucket concede l'accesso all'origine S3 quando la richiesta contiene la stringa "aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER."
L'intestazione personalizzata di origine di CloudFront deve avere le seguenti configurazioni:
- Intestazione: referente
- Valore: MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER
Esempio di policy del bucket:
{ "Version":"2012-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests originating from my CloudFront with referer header", "Effect":"Allow", "Principal":"*", "Action":"s3:GetObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringLike":{"aws:Referer":"MY_SECRET_TOKEN_CONFIGURED_ON_CLOUDFRONT_ORIGIN_CUSTOM_HEADER"} } } ] }
Nota: poiché Principal è un valore jolly (“Principal”: "\ *»), la policy del bucket di esempio concede l'accesso pubblico (anonimo) al bucket. A causa della dichiarazione della condizione, la richiesta deve includere l'intestazione referente e il valore dell'intestazione deve corrispondere al valore nella policy del bucket. Se la dichiarazione della condizione non è soddisfatta, non puoi accedere all'origine S3.
Controllo dell'account di gestione dell’organizzazione
Usa l'account di gestione dell’organizzazione in AWS Organizations per verificare la presenza di policy di controllo dei servizi (SCP) di rifiuto. Rivedi le politiche di rifiuto per l'azione s3:getObject collegata alla radice dell'organizzazione, all'unità organizzativa (OU) o direttamente al tuo account.
Informazioni correlate
Troubleshooting error response status codes in CloudFront
Come posso risolvere gli errori 403 di Accesso negato da Amazon S3?
Come posso usare CloudFront per servire un sito web statico ospitato su Amazon S3?
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 6 mesi fa
- AWS UFFICIALEAggiornata 2 mesi fa