Applicazione delle scritture condizionali sui bucket Amazon S3
Utilizzando le policy di bucket Amazon S3, è possibile imporre scritture condizionali per il caricamento di oggetti nei bucket per uso generico.
Una policy di bucket è una policy basata sulle risorse che può essere utilizzata per concedere le autorizzazioni di accesso al bucket Amazon S3 e agli oggetti in esso contenuti. Solo il proprietario del bucket può associare una policy a un bucket. Per ulteriori informazioni sulle policy di bucket, consulta Policy dei bucket per Amazon S3.
È possibile utilizzare le chiavi di condizione s3:if-match o s3:if-none-match come l'elemento opzionale Condition o il blocco Condition per specificare quando una policy è in vigore. Per i caricamenti multiparte è necessario specificare la chiave di condizione s3:ObjectCreationOperation per esentare le operazioni CreateMultipartUpload, UploadPart e UploadPartCopy, poiché queste API non accettano intestazioni condizionali. Per ulteriori informazioni sull'uso delle condizioni nelle policy di bucket, consulta Esempi di policy per i bucket che utilizzano le chiavi di condizione.
Nota
Se si usa una policy di bucket per imporre scritture condizionali, non è possibile eseguire operazioni di copia sul bucket o sul prefisso specificato nella policy di bucket. Le richieste CopyObject senza un'intestazione HTTP If-None-Match o If-Match falliscono con un errore 403 Access Denied. Le richieste CopyObject fatte con queste intestazioni HTTP falliscono con una risposta 501 Not
Implemented.
Gli esempi seguenti mostrano come utilizzare le condizioni in una policy di bucket per forzare i client a usare l'intestazione HTTP If-None-Match o If-Match.
Argomenti
Esempio 1: Consentire solo il caricamento di oggetti utilizzando le richieste PutObject e CompleteMultipartUpload che includono l'intestazione if-none-match
Questa policy consente all’account 111122223333, utente Alice, di scrivere nel bucket amzn-s3-demo-bucket1 se la richiesta include l’intestazione if-none-match, assicurando che la chiave dell’oggetto non sia già presente nel bucket. Tutte le richieste PutObject e CompleteMultipartUpload al bucket specificato devono includere l'intestazione if-none-match per avere successo. Utilizzando questa intestazione, i clienti possono scrivere su questo bucket solo se la chiave dell'oggetto non esiste nel bucket.
Nota
Questa policy imposta anche la chiave di condizione s3:ObjectCreationOperation, che consente di caricare più parti utilizzando le API CreateMultipartUpload, UploadPart e UploadPartCopy.
Esempio 2: Consentire solo il caricamento di oggetti utilizzando le richieste PutObject e CompleteMultipartUpload che includono l'intestazione if-match
Questa policy consente all'account 111122223333, utente Alice, di scrivere su amzn-s3-demo-bucket1 solo se la richiesta include l'intestazione if-match. Questa intestazione confronta il valore ETag di un oggetto in S3 con quello fornito dall'utente durante l'operazione WRITE. Se i valori ETag non corrispondono, l'operazione fallisce. Tutte le richieste PutObject e CompleteMultipartUpload al bucket specificato devono includere l'intestazione if-match per avere successo.
Nota
Questa policy imposta anche la chiave di condizione s3:ObjectCreationOperation, che consente di caricare più parti utilizzando le API CreateMultipartUpload, UploadPart e UploadPartCopy.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObject", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", }, { "Sid": "BlockNonConditionalObjectCreation", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Null": { "s3:if-match": "true" }, "Bool": { "s3:ObjectCreationOperation": "true" } } }, { "Sid": "AllowGetObjectBecauseConditionalPutIfMatchETag", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }
Esempio 3: Consentire solo le richieste di caricamento di oggetti che includono l'intestazione if-none-match o if-match
Questa policy consente all'account 111122223333 e all'utente Alice di scrivere su amzn-s3-demo-bucket1 se le richieste includono l'intestazione if-none-match o if-match. Questo permette ad Alice di caricare un oggetto se il nome della chiave non esiste nel bucket, oppure, se il nome della chiave esiste, Alice può sovrascrivere l’oggetto se l’ETag dell’oggetto corrisponde all’ETag fornito nella richiesta PUT.
Nota
Questa policy imposta anche la chiave di condizione s3:ObjectCreationOperation, che consente di caricare più parti utilizzando le API CreateMultipartUpload, UploadPart e UploadPartCopy.