Verifica della proprietà del bucket con condizione del proprietario del bucket - Amazon Simple Storage Service

Verifica della proprietà del bucket con condizione del proprietario del bucket

La condizione di proprietario del bucket Amazon S3 garantisce che i bucket usati nelle operazioni S3 appartengano agli Account AWS previsti.

La maggior parte delle operazioni S3 legge da o scrive in bucket S3 specifici. Queste operazioni includono il caricamento, la copia e il download di oggetti, il recupero o la modifica delle configurazioni dei bucket e il recupero o la modifica delle configurazioni degli oggetti. Quando esegui queste operazioni, specifichi il bucket da utilizzare includendo il suo nome nella richiesta. Ad esempio, per recuperare un oggetto da S3, effettui una richiesta che specifica il nome di un bucket e la chiave oggetto da recuperare da quel bucket.

Poiché Amazon S3 identifica i bucket in base ai loro nomi, un'applicazione che utilizza un nome bucket non corretto in una richiesta potrebbe accidentalmente eseguire operazioni su un bucket diverso da quello previsto. Per evitare interazioni del bucket involontarie in situazioni come questa, puoi utilizzare la condizione proprietario del bucket. La condizione proprietario del bucket consente di verificare che il bucket di destinazione sia di proprietà dell'Account AWS previsto, fornendo un ulteriore livello di garanzia sul fatto che le operazioni S3 avranno gli effetti desiderati.

Quando utilizzare la condizione proprietario del bucket

È consigliabile utilizzare la condizione proprietario del bucket ogni volta che esegui un'operazione S3 supportata e conosci l'ID account del proprietario del bucket previsto. La condizione proprietario del bucket è disponibile per tutte le operazioni oggetto S3 e la maggior parte delle operazioni bucket S3. Per un elenco delle operazioni S3 che non supportano la condizione proprietario del bucket, consulta Restrizioni e limitazioni.

Per visualizzare il vantaggio dell'utilizzo della condizione proprietario del bucket, considera il seguente scenario che coinvolge la cliente AWS Bea:

  1. Bea sviluppa un'applicazione che utilizza Amazon S3. Durante lo sviluppo, Bea utilizza il suo Account AWS solo per test e crea un bucket denominato bea-data-test e configura la sua applicazione per effettuare richieste a bea-data-test.

  2. Bea distribuisce la sua applicazione, ma dimentica di riconfigurarla affinché utilizzi un bucket nel suo Account AWS di produzione.

  3. In produzione, l'applicazione di Bea effettua richieste a bea-data-test, che hanno esito positivo. In questo modo i dati di produzione vengono scritti nel bucket nell'account di test di Bea.

Bea può prevenire situazioni come questa utilizzando la condizione proprietario del bucket. Con la condizione di proprietario del bucket, Bea può includere l'ID Account AWS del proprietario del bucket previsto nelle sue richieste. Amazon S3 controlla quindi l'ID account del proprietario del bucket prima di elaborare ogni richiesta. Se il proprietario del bucket effettivo non corrisponde al proprietario del bucket previsto, la richiesta ha esito negativo.

Se Bea utilizza la condizione proprietario del bucket, lo scenario descritto in precedenza non comporta la scrittura accidentale dell'applicazione di Bea in un bucket di test. Invece, le richieste effettuate dall'applicazione nella fase 3 avranno esito negativo con un messaggio di errore Access Denied. Utilizzando la condizione proprietario del bucket, Bea aiuta a eliminare il rischio di interagire accidentalmente con i bucket nell'Account AWS sbagliato.

Verifica del proprietario del bucket

Per utilizzare la condizione proprietario del bucket, includi nella richiesta un parametro che specifichi il proprietario del bucket previsto. La maggior parte delle operazioni S3 coinvolge solo un singolo bucket e richiede solo questo singolo parametro per utilizzare la condizione proprietario del bucket. Per le operazioni CopyObject, questo primo parametro specifica il proprietario previsto del bucket di destinazione e viene incluso un secondo parametro per specificare il proprietario previsto del bucket di origine.

Quando effettui una richiesta che include un parametro della condizione proprietario del bucket, S3 controlla l'ID account del proprietario del bucket rispetto al parametro specificato prima di elaborare la richiesta. Se il parametro corrisponde all'ID account del proprietario del bucket, S3 elabora la richiesta. Se il parametro non corrisponde all'ID account del proprietario del bucket, la richiesta ha esito negativo con un messaggio di errore Access Denied.

Puoi utilizzare la condizione di proprietario del bucket con la AWS Command Line Interface (AWS CLI), gli SDK AWS e le REST API di Amazon S3. Quando utilizzi la condizione di proprietario del bucket con la AWS CLI e le REST API di Amazon S3, usa i seguenti nomi per i parametri.

Metodo di accesso Parametro per operazioni di non copia Parametro origine operazione di copia Parametro destinazione operazione di copia
AWS CLI --expected-bucket-owner --expected-source-bucket-owner --expected-bucket-owner
REST API di Amazon S3 x-amz-expected-bucket-owner Intestazione x-amz-source-expected-bucket-owner Intestazione x-amz-expected-bucket-owner Intestazione

I nomi dei parametri necessari per utilizzare la condizione proprietario del bucket con gli SDK AWS variano a seconda della lingua. Per determinare i parametri richiesti, consulta la documentazione SDK relativa alla lingua desiderata. È possibile trovare la documentazione SDK in Strumenti per creare in AWS.

Esempi

Negli esempi seguenti viene mostrato come è possibile implementare la condizione di proprietario del bucket in Amazon S3 utilizzando la AWS CLI o AWS SDK for Java 2.x.

Esempio: caricare un oggetto

Nell'esempio seguente viene mostrato il caricamento di un oggetto nel bucket S3 DOC-EXAMPLE-BUCKET1, utilizzando la condizione di proprietario del bucket per assicurarsi che DOC-EXAMPLE-BUCKET1 sia di proprietà dell'Account AWS 111122223333.

AWS CLI
aws s3api put-object \ --bucket DOC-EXAMPLE-BUCKET1 --key exampleobject --body example_file.txt \ --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void putObjectExample() { S3Client s3Client = S3Client.create();; PutObjectRequest request = PutObjectRequest.builder() .bucket("DOC-EXAMPLE-BUCKET1") .key("exampleobject") .expectedBucketOwner("111122223333") .build(); Path path = Paths.get("example_file.txt"); s3Client.putObject(request, path); }

Esempio: copiare un oggetto

Nell'esempio seguente viene mostrata la copia di un oggetto object1 dal bucket S3 DOC-EXAMPLE-BUCKET1 nel bucket S3 DOC-EXAMPLE-BUCKET2. Utilizza la condizione proprietario del bucket per garantire che i bucket sono di proprietà degli account previsti secondo la tabella seguente.

Bucket Proprietario previsto
DOC-EXAMPLE-BUCKET1 111122223333
DOC-EXAMPLE-BUCKET2 444455556666
AWS CLI
aws s3api copy-object --copy-source DOC-EXAMPLE-BUCKET1/object1 \ --bucket DOC-EXAMPLE-BUCKET2 --key object1copy \ --expected-source-bucket-owner 111122223333 --expected-bucket-owner 444455556666
AWS SDK for Java 2.x
public void copyObjectExample() { S3Client s3Client = S3Client.create(); CopyObjectRequest request = CopyObjectRequest.builder() .copySource("DOC-EXAMPLE-BUCKET1/object1") .destinationBucket("DOC-EXAMPLE-BUCKET2") .destinationKey("object1copy") .expectedSourceBucketOwner("111122223333") .expectedBucketOwner("444455556666") .build(); s3Client.copyObject(request); }

Esempio: recuperare una policy del bucket

Nell'esempio seguente viene recuperata la policy di accesso per il bucket S3 DOC-EXAMPLE-BUCKET1, utilizzando la condizione proprietario del bucket per assicurarsi che DOC-EXAMPLE-BUCKET1 sia di proprietà dell'account Account AWS 111122223333.

AWS CLI
aws s3api get-bucket-policy --bucket DOC-EXAMPLE-BUCKET1 --expected-bucket-owner 111122223333
AWS SDK for Java 2.x
public void getBucketPolicyExample() { S3Client s3Client = S3Client.create(); GetBucketPolicyRequest request = GetBucketPolicyRequest.builder() .bucket("DOC-EXAMPLE-BUCKET1") .expectedBucketOwner("111122223333") .build(); try { GetBucketPolicyResponse response = s3Client.getBucketPolicy(request); } catch (S3Exception e) { // The call was transmitted successfully, but Amazon S3 couldn't process // it, so it returned an error response. e.printStackTrace(); } }

Restrizioni e limitazioni

La condizione proprietario del bucket Amazon S3 presenta le seguenti restrizioni e limitazioni:

  • Il valore del parametro della condizione del proprietario del bucket deve essere un ID Account AWS (stringa alfanumerica di 12 cifre). I principali del servizio non sono supportati.

  • La condizione di proprietario del bucket non è disponibile per CreateBucket, ListBuckets o per nessuna delle operazioni incluse in Controllo S3 di AWS. Amazon S3 ignora tutti i parametri delle condizioni proprietario del bucket inclusi nelle richieste a queste operazioni.

  • La condizione proprietario del bucket verifica solo che l'account specificato nel parametro di verifica possieda il bucket. La condizione proprietario del bucket non controlla la configurazione del bucket. Inoltre, non garantisce che la configurazione del bucket soddisfi condizioni specifiche o corrisponda a qualsiasi stato passato.