Applicazione delle scritture condizionali sui bucket Amazon S3 - 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à.

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 in più parti è necessario specificare la chiave s3:ObjectCreationOperation condizionale per esentare UploadPartCopy le operazioni, e CreateMultipartUploadUploadPart, poiché queste APIs 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.

Esempio 1: Consentire solo il caricamento di oggetti utilizzando le richieste PutObject e CompleteMultipartUpload che includono l'intestazione if-none-match

Questa politica consente all'account 111122223333, utente Alice, di scrivere nel amzn-s3-demo-bucket1 bucket se la richiesta include l'if-none-matchintestazione, assicurando che la chiave dell'oggetto non esista già 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

Questo criterio imposta anche la chiave di s3:ObjectCreationOperation condizione che consente il caricamento di più parti utilizzando, e. CreateMultipartUpload UploadPart UploadPartCopy APIs

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowConditionalPut", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Null": { "s3:if-none-match": "false" } } }, { "Sid": "AllowConditionalPutwithMPUs", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Bool": { "s3:ObjectCreationOperation": "false" } } } ] }

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 ETag valore di un oggetto in S3 con quello fornito durante l'operazione. WRITE Se i ETag valori non corrispondono, l'operazione fallirà. Tutte le richieste PutObject e CompleteMultipartUpload al bucket specificato devono includere l'intestazione if-match per avere successo.

Nota

Questo criterio imposta anche la chiave di s3:ObjectCreationOperation condizione che consente il caricamento in più parti utilizzando CreateMultipartUploadUploadPart, e. UploadPartCopy APIs

{ "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. Ciò consente ad Alice di caricare un oggetto se il nome della chiave non esiste nel bucket, o se il nome della chiave esiste Alice può sovrascrivere l'oggetto se l'oggetto ETag corrisponde a quello ETag fornito nella richiesta. PUT

Nota

Questa politica imposta anche la chiave di s3:ObjectCreationOperation condizione che consente il caricamento in più parti utilizzando, e. CreateMultipartUpload UploadPart UploadPartCopy APIs

{ "Version": "2012-10-17", "Statement": [ { "Sid": " AllowConditionalPutifAbsent", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Null": { "s3:if-none-match": "false" } } }, { "Sid": "AllowConditionalPutIfMatchEtag", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Null": { "s3:if-match": "false" } } }, { "Sid": "AllowConditionalObjectCreation", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "Bool": { "s3:ObjectCreationOperation": "false" } } }, { "Sid": " AllowGetObjectBecauseConditionalPutIfMatchETag", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/Alice" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }