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

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

La condizione di proprietario dei bucket Amazon S3 garantisce che i bucket utilizzati nelle operazioni S3 appartengano a quelli previsti. Account AWS

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 scoprire i vantaggi derivanti dall'utilizzo della condizione di proprietario del bucket, considera il seguente scenario che coinvolge il cliente Bea: AWS

  1. Bea sviluppa un'applicazione che utilizza Amazon S3. Durante lo sviluppo, Bea utilizza i suoi test solo Account AWS per creare 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' Account AWS ID 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 usare la condizione del proprietario del bucket con AWS Command Line Interface (AWS CLI), gli AWS SDK e le API REST di Amazon S3. Quando utilizzi la condizione di proprietario del bucket con AWS CLI le API REST di Amazon S3, usa i seguenti nomi di 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

Gli esempi seguenti mostrano come implementare la condizione di proprietario del bucket in Amazon S3 utilizzando o AWS CLI il. 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 Account AWS ID (valore numerico a 12 cifre). I principali del servizio non sono supportati.

  • La condizione di proprietario del bucket non è disponibile per CreateBucketnessuna delle operazioni incluse in S3 Control. ListBucketsAWS 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.