Sto utilizzando la caratteristica di sito Web statico di Amazon S3 ma ricevo un errore di accesso negato. Perché si verifica questo problema?

Ultimo aggiornamento: 22/12/2021

Sto utilizzando un bucket Amazon Simple Storage Service (Amazon S3) per ospitare un sito Web statico con l'endpoint del sito Web statico S3. Perché ricevo un errore di accesso negato?

Breve descrizione

Se stai cercando di ospitare un sito Web statico utilizzando Amazon S3, ma ricevi un errore di accesso negato, verifica i seguenti requisiti:

  • È necessario che gli oggetti presenti nel bucket siano accessibili pubblicamente.
  • È necessario che la policy del bucket S3 consenta l'accesso all'operazione s3:GetObject.
  • L'account AWS proprietario del bucket deve essere anche il proprietario dell'oggetto.
  • Gli oggetti non possono essere crittografati da AWS Key Management Service (AWS KMS).
  • Gli oggetti richiesti devono esistere nel bucket S3.
  • Il blocco dell'accesso pubblico di Amazon S3 deve essere disabilitato a livello di bucket e account.

Risoluzione

È necessario che gli oggetti presenti nel bucket siano accessibili pubblicamente

L'endpoint del sito Web statico S3 supporta solo contenuti accessibili pubblicamente. Per verificare se un oggetto presente nel bucket S3 è accessibile pubblicamente, apri l'URL dell'oggetto in un browser Web. In alternativa, puoi eseguire un comando cURL sull'URL.

Di seguito è riportato un esempio di URL di un oggetto S3:

http://doc-example-bucket.s3-website-us-east-1.amazonaws.com/index.html
Se viene restituito un errore di accesso negato dal browser Web o dal comando cURL, l'oggetto non è accessibile pubblicamente. Per consentire l'accesso pubblico in lettura all'oggetto S3, crea una policy del bucket che consenta l'accesso pubblico in lettura per tutti gli oggetti nel bucket.

È necessario che la policy del bucket S3 permetta l'accesso all'operazione s3:GetObject

Rivedi la policy del bucket e assicurati che non ci siano istruzioni di diniego che blocchino l'accesso pubblico in lettura all'operazione s3:GetObject. Anche se disponi di un'istruzione di autorizzazione esplicita per s3:GetObject nella policy del bucket, conferma che non sia presente un'istruzione di rifiuto esplicito in conflitto con la prima. Una dichiarazione di rifiuto esplicito sostituirà sempre un'istruzione di autorizzazione esplicita.

Per rivedere la policy del bucket per s3:GetObject, esegui i seguenti passaggi:

1.    Accedi alla console di Amazon S3.

2.    Scegli la scheda Permissions (Autorizzazioni).

3.    Scegli Bucket Policy (Policy del bucket).

4.    Esamina la policy del bucket per le istruzioni con "Action": "s3:GetObject" o "Action": "s3:*".

5.    (Facoltativo) Modifica la policy del bucket. Ad esempio, è possibile rimuovere o modificare le istruzioni che bloccano l'accesso pubblico in lettura a s3:GetObject.

L'account AWS proprietario del bucket deve essere anche il proprietario dell'oggetto

Per consentire l'accesso pubblico in lettura agli oggetti, l'account AWS proprietario del bucket deve essere anche il proprietario degli oggetti. Un bucket o un oggetto è di proprietà dell'account dell'identità AWS Identity and Access Management (IAM) che ha creato il bucket o l'oggetto.

Nota: il requisito della proprietà dell'oggetto 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 accessi (ACL) dell'oggetto.

Per verificare se il tuo bucket e gli oggetti Amazon S3 sono di proprietà dello stesso account AWS, esegui i passaggi seguenti:

1.    Per recuperare l'ID canonico S3 del proprietario del bucket, utilizza il seguente comando:

aws s3api list-buckets --query Owner.ID

2.    Per recuperare l'ID canonico S3 del proprietario dell'oggetto, utilizza il seguente comando:

aws s3api list-objects --bucket DOC-EXAMPLE-BUCKET --prefix index.html

Nota: questo esempio mostra un singolo oggetto. Per controllare diversi oggetti, utilizza il comando list.

3.    Conferma se gli ID canonici del proprietario del bucket e del proprietario dell'oggetto corrispondono. Se non corrispondono, il bucket e l'oggetto hanno proprietari diversi.

Nota: puoi anche utilizzare la console Amazon S3 per controllare i proprietari di bucket e oggetti. I proprietari si trovano nella scheda Permissions (Autorizzazioni) del rispettivo bucket o oggetto.

4.    Se gli ID canonici del proprietario del bucket e del proprietario dell'oggetto non corrispondono, cambia il proprietario dell'oggetto con il proprietario del bucket.

Dall'account del proprietario dell'oggetto, esegui il seguente comando per recuperare le autorizzazioni ACL assegnate all'oggetto:

aws s3api get-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name

Se l'oggetto non dispone di autorizzazioni ACL per il controllo completo da parte del proprietario del bucket, esegui il seguente comando dall'account del proprietario dell'oggetto:

aws s3api put-object-acl --bucket DOC-EXAMPLE-BUCKET --key object-name --acl bucket-owner-full-control

Se l'oggetto dispone di autorizzazioni ACL per il controllo completo da parte del proprietario del bucket, esegui il comando seguente dall'account del proprietario del bucket. Questo comando cambia il proprietario dell'oggetto sovrascrivendo l'oggetto:

aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD

Puoi anche utilizzare S3 Object Ownership per concedere al proprietario del bucket la proprietà automatica di qualsiasi oggetto caricato da utenti anonimi o altri account AWS.

Gli oggetti presenti nel bucket non possono essere crittografati con AWS KMS

AWS KMS non supporta le richieste anonime. Di conseguenza, nessun bucket Amazon S3 che consente l'accesso pubblico o anonimo potrà essere utilizzato per gli oggetti crittografati con AWS KMS. È necessario rimuovere la crittografia KMS dagli oggetti che si desidera gestire utilizzando l'endpoint del sito Web statico Amazon S3.

Nota: invece di utilizzare la crittografia AWS KMS, utilizza AES-256 per crittografare gli oggetti.

Puoi verificare se un oggetto nel tuo bucket è crittografato con KMS utilizzando i seguenti metodi:

  • Utilizza la console Amazon S3 per visualizzare le proprietà dell'oggetto. Controlla la finestra di dialogo Crittografia. Se è selezionato AWS-KMS, l'oggetto viene crittografato con KMS.
  • Esegui il comando head-object utilizzando l'AWS Command Line Interface (AWS CLI). Se il comando restituisce ServerSideEncryption come aws:kms, l'oggetto viene crittografato con KMS.

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi AWS CLI, assicurati di utilizzarne la versione più recente.

Per modificare le impostazioni di crittografia dell'oggetto utilizzando la console Amazon S3, consulta Specifica della crittografia Amazon S3.

Per modificare le impostazioni di crittografia dell'oggetto utilizzando l'AWS CLI, verifica che il bucket dell'oggetto non disponga di una crittografia predefinita. Se il bucket non ha una crittografia predefinita, rimuovi la crittografia dell'oggetto sovrascrivendolo:

 

aws s3 cp s3://DOC-EXAMPLE-BUCKET/index.html s3://DOC-EXAMPLE-BUCKET/index.html --storage-class STANDARD
Attenzione: la sovrascrittura dell'oggetto rimuove le impostazioni per i valori storage-class e website-redirect-location. Per mantenere queste impostazioni nel nuovo oggetto, assicurati di specificare esplicitamente i valori storage-class o website-redirect-location nella richiesta di copia.

Gli oggetti richiesti devono esistere nel bucket S3

Se un utente che esegue la richiesta non dispone delle autorizzazioni s3:ListBucket, riceverà un errore di accesso negato per gli oggetti mancanti.

È possibile eseguire il comando AWS CLI head-object per verificare se esiste un oggetto nel bucket.

Nota: i nomi degli oggetti S3 fanno distinzione tra maiuscole e minuscole. Se la richiesta non ha un nome oggetto valido, Amazon S3 segnalerà che l'oggetto è mancante.

Se l'oggetto esiste nel bucket, l'errore Accesso negato non nasconde un errore 404 Non trovato. Verifica altri requisiti di configurazione per risolvere l'errore Accesso negato.

Se l'oggetto non esiste nel bucket, l'errore Accesso negato nasconde un errore 404 Non trovato. Risolvi il problema relativo all'oggetto mancante.

Nota: non è una procedura consigliata per la sicurezza abilitare l'accesso pubblico a s3:ListBucket. Abilitare l'accesso pubblico a s3:ListBucket consente agli utenti di vedere ed elencare tutti gli oggetti presenti in un bucket. Tale accesso espone i dettagli dei metadati dell'oggetto (ad esempio, chiave e dimensione) agli utenti anche se questi non dispongono delle autorizzazioni per il download dell'oggetto.

È necessario che sul bucket sia disabilitato il blocco dell'accesso pubblico di Amazon S3

Le impostazioni di blocco dell'accesso pubblico di Amazon S3 possono essere applicate a singoli bucket o account AWS. Conferma che non siano state applicate impostazioni di blocco dell'accesso pubblico di Amazon S3 al tuo bucket S3 o all'account AWS. Queste impostazioni possono avere la precedenza sulle autorizzazioni che consentono l'accesso pubblico in lettura.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?