Perché ricevo un errore di accesso negato per l'operazione ListObjectsV2 quando eseguo il comando sync nel mio bucket Amazon S3?
Sto eseguendo il comando aws s3 sync per copiare oggetti in o da un bucket Amazon Simple Storage Service (Amazon S3). Ma ricevo un errore di accesso negato quando effettuo la chiamata all'API ListObjectsV2.
Breve descrizione
Quando esegui il comando sync, Amazon S3 invia la chiamata API ListObjectsV2 per verificare se l'oggetto esiste nel bucket di origine o di destinazione. Se l'oggetto non esiste in nessuno dei bucket, Amazon S3 esegue le seguenti chiamate API:
- Chiamata CopyObject per un'operazione da bucket a bucket
- GetObject per un'operazione da bucket a locale
- PutObject per un'operazione da locale a bucket
Risoluzione
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.
Configurare la policy IAM
Nota: questa risoluzione presuppone che le chiamate GetObject e PutObject siano già concesse all'utente o al ruolo AWS Identity Access Management (IAM). Questa risoluzione spiega come risolvere l'errore di accesso negato causato da autorizzazioni ListBucket improprie o dall'uso della sintassi errata del comando sync con pagamento a carico del richiedente.
Verifica di disporre dell'autorizzazione s3:ListBucket sui bucket Amazon S3 da cui copierai gli oggetti. Per eseguire azioni di chiamata API ListObjectsV2 è necessario disporre di questa autorizzazione.
Se l'utente o il ruolo IAM appartengono a un altro account AWS, verifica se le policy IAM o di bucket consentono l'azione s3:ListBucket. Devi disporre dell'autorizzazione a s3:ListBucket sia sulla policy IAM che sulla policy di bucket.
Se l'utente o il ruolo appartengono all'account del proprietario del bucket, non è necessario che sia le policy IAM che le policy bucket consentano l'azione s3:ListBucket. È necessaria solo una delle politiche per consentire l'azione s3:ListBucket.
Importante: se la policy IAM o la policy di bucket consentono già l'azione s3:ListBucket, verifica se nell'altra policy sono presenti dichiarazioni che negano esplicitamente l'azione. Una dichiarazione esplicita di negazione ha la precedenza su una dichiarazione di autorizzazione.
Il seguente esempio di policy IAM concede l'autorizzazione s3:ListBucket:
{ "Version": "2012-10-17", "Statement": [{ "Sid": "Stmt1546506260896", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET" }] }
Il seguente esempio di bucket policy concede all'utente arn:aws:iam::123456789012:user/testuser le autorizzazioni per s3:ListBucket:
{ "Id": "Policy1546414473940", "Version": "2012-10-17", "Statement": [{ "Sid": "Stmt1546414471931", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/testuser" ] } }] }
Utilizzo del comando sync con pagamento a carico del richiedente
Se il bucket appartiene a un altro account AWS che ha abilitato il pagamento a carico del richiedente, verifica che sia la policy di bucket e che le autorizzazioni IAM concedano le autorizzazioni per ListObjectsV2. Se le autorizzazioni per ListObjectsV2 sono concesse correttamente, verifica la sintassi del comando sync. Se non includi l'opzione**--request-payer requester** quando esegui il comando sync, viene visualizzato un errore di accesso negato.
Ad esempio, esegui il seguente comando sync, ma sostituisci requester-pays-bucket con il nome del tuo bucket:
aws s3 sync ./ s3://requester-pays-bucket/ --request-payer requester
Informazioni correlate
Proprietario del bucket che concede autorizzazioni per bucket tra account
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 4 anni fa
- AWS UFFICIALEAggiornata un anno fa