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). Tuttavia, ricevo un errore di accesso negato quando chiamo l'operazione ListObjectsV2. Come faccio a risolvere questo problema?
Breve descrizione
Quando si esegue il comando aws s3 sync, Amazon S3 invia le seguenti chiamate API: ListObjectsV2, CopyObject, GetObject, e PutObject.
Più precisamente, avviene quanto segue:
1. Amazon S3 elenca l'origine e la destinazione per verificare se l'oggetto esiste.
2. Quindi, 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
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.
Risoluzione
Configurazione della policy IAM
Verifica di disporre delle autorizzazioni per s3:ListBucket nei bucket Amazon S3 nei quali o dai quali stai copiando oggetti. Per eseguire azioni ListObjectsV2 è necessario disporre di questa autorizzazione.
Nota: s3:ListBucket è il nome dell'autorizzazione che consente a un utente di elencare gli oggetti in un bucket. ListObjectsV2 è il nome della chiamata API che elenca gli oggetti in un bucket.
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. Per consentire l'azione è necessario che l'autorizzazione sia presente in una sola policy.
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.
Di seguito è riportato un esempio di policy IAM che concede l'accesso a s3:ListBucket:
{ "Version": "2012-10-17", "Statement": [{ "Sid": "Stmt1546506260896", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::AWSDOC-EXAMPLE-BUCKET" }] }
Di seguito è riportato un esempio di policy di bucket che concede all'utente arn:aws:iam::123456789012:user/testuser l'accesso a 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. Quando si utilizza il comando sync, è necessario includere l'opzione --request-payer requester. In caso contrario, viene visualizzato un errore di accesso negato.
Ad esempio:
aws s3 sync ./ s3://requester-pays-bucket/ --request-payer requester
Informazioni correlate
Il proprietario del bucket concede autorizzazioni per il bucket multiaccount
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 8 mesi fa