Perché non riesco ad accedere a un oggetto che è stato caricato nel mio bucket Amazon S3 da un altro account AWS?

4 minuti di lettura
0

Un utente di AWS Identity and Access Management (IAM) di un altro account AWS ha caricato un oggetto nel mio bucket Amazon Simple Storage Service (Amazon S3). Quando provo ad accedere a quell'oggetto, ricevo l'errore 403 di Accesso negato. Come posso risolvere questo problema?

Breve descrizione

Per i bucket Amazon S3 esistenti con le impostazioni di proprietà degli oggetti predefinite, il proprietario dell'oggetto è l'account AWS che ha caricato l'oggetto nel bucket. Per questi bucket esistenti, in precedenza il proprietario dell'oggetto doveva concedere esplicitamente le autorizzazioni a un oggetto (allegando una lista di controllo degli accessi). Altrimenti, il proprietario del bucket non sarebbe stato in grado di accedere all'oggetto.

Con S3 Object Ownership, i proprietari dei bucket possono ora gestire la proprietà di qualsiasi oggetto caricato nei propri bucket. Per impostazione predefinita, tutti i bucket S3 appena creati hanno l'impostazione Proprietario del bucket applicato abilitata. Quando l'impostazione proprietario del bucket applicato è abilitata, i proprietari del bucket diventano i proprietari degli oggetti per tutti gli oggetti all'interno del bucket. Inoltre, tutti gli ACL su un bucket e sui relativi oggetti sono disabilitati.

È possibile anche impostare S3 Object Ownership sui bucket esistenti abilitando l'impostazione proprietario del bucket applicato o l'impostazione proprietario del bucket preferito. Quando l'impostazione proprietario del bucket preferito è abilitata, gli ACL sono ancora abilitati. Inoltre, solo gli oggetti caricati nel bucket con un ACL bucket-owner-full-control appartengono al proprietario del bucket. Se abiliti l'impostazione proprietario del bucket applicato su un bucket esistente, tieni presente che puoi anche disabilitarla in qualsiasi momento. (La disattivazione dell'impostazione proprietario del bucket applicato su un bucket esistente riattiva tutti i bucket e gli ACL degli oggetti applicati in precedenza).

È consigliabile che i proprietari dei bucket utilizzino l'impostazione proprietario del bucket applicato su bucket nuovi ed esistenti, gestendo al contempo le autorizzazioni tramite IAM e policy dei bucket.

Importante: prima di disabilitare qualsiasi ACL sui bucket esistenti, valuta il potenziale impatto. Se sono presenti diversi ACL su un oggetto o un bucket, rivedi e aggiorna il bucket e le policy IAM per concedere le autorizzazioni richieste.

Soluzione

Per disattivare gli ACL per il tuo bucket e assumere la proprietà di tutti gli oggetti nel bucket, esegui il seguente comando:

aws s3api put-bucket-ownership-controls --bucket example-bucket --ownership-controls 'Rules=[{ObjectOwnership=BucketOwnerEnforced}]'

Se non riesci a disabilitare gli ACL sul tuo bucket, utilizza le seguenti opzioni per concedere l'accesso agli oggetti nel tuo bucket.

Concedi l'accesso durante un'operazione di inserimento o copia

Durante un'operazione di inserimento o copia, il proprietario dell'oggetto può specificare che l'ACL dell'oggetto fornisce il controllo completo al proprietario del bucket.

Per un'operazione di inserimento, il proprietario dell'oggetto può eseguire questo comando:

aws s3api put-object --bucket destination_DOC-EXAMPLE-BUCKET --key dir-1/my_images.tar.bz2 --body my_images.tar.bz2 --acl bucket-owner-full-control

Nota: se vengono visualizzati errori durante l'esecuzione dei comandi dell’interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Per un'operazione di copia di un singolo oggetto, il proprietario dell'oggetto può eseguire uno dei seguenti comandi:

aws s3api copy-object --bucket destination_DOC-EXAMPLE-BUCKET --key source_DOC-EXAMPLE-BUCKET/myobject --acl bucket-owner-full-control

-oppure-

aws s3 cp s3://source_DOC-EXAMPLE-BUCKET/myobject s3://destination_DOC-EXAMPLE-BUCKET/ --acl bucket-owner-full-control

Per un'operazione di copia di più oggetti, il proprietario dell'oggetto può eseguire questo comando:

aws s3 cp s3://source_DOC-EXAMPLE-BUCKET/ s3://destination_DOC-EXAMPLE-BUCKET/ --acl bucket-owner-full-control --recursive

Concedere l'accesso dopo l'aggiunta dell'oggetto al bucket

Se l'oggetto è già in un bucket in un altro account, il proprietario dell'oggetto può concedere l'accesso al proprietario del bucket con un comando put-object-acl:

aws s3api put-object-acl --bucket destination_DOC-EXAMPLE-BUCKET --key keyname --acl bucket-owner-full-control

Richiedere che gli oggetti concedano il controllo completo al proprietario del bucket

È possibile utilizzare una policy del bucket per richiedere che qualsiasi oggetto caricato nel tuo bucket da un altro account imposti l'ACL come "bucket-owner-full-control". Ad esempio, consulta Come posso chiedere agli utenti di altri account AWS che caricano uno o più oggetti sul mio bucket Amazon S3 di garantirmi il pieno controllo sugli oggetti caricati?


Informazioni correlate

Tutorial IAM: Delega dell'accesso tra account AWS tramite i ruoli IAM

Granting cross-account permissions to upload objects while ensuring the bucket owner has full control

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa