Perché ricevo un errore di accesso negato per l'operazione ListObjectsV2 quando eseguo il comando sync nel mio bucket Amazon S3?

3 minuti di lettura
0

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

Policy di bucket e policy utente

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa