Esempi di policy per le ACL
È possibile utilizzare le chiavi di condizione nelle policy dei bucket per controllare l'accesso ad Amazon S3.
Argomenti
Concessione del permesso s3:PutObject con una condizione che richiede al proprietario del bucket di ottenere il pieno controllo
L'operazione PUT Object permette intestazioni specifiche della lista di controllo degli accessi (ACL) che è possibile utilizzare per concedere autorizzazioni basate sulle liste ACL. Utilizzando queste chiavi, il proprietario del bucket può impostare una condizione per richiedere determinate autorizzazioni di accesso specifiche quando l'utente carica un oggetto.
Si supponga che l'Account A sia proprietario di un bucket e che l'amministratore dell'account voglia assegnare a Dave, un utente dell'Account B, le autorizzazioni per caricare oggetti. Per default, gli oggetti che carica Dave sono di proprietà dell'Account B e l'Account A non dispone di autorizzazioni su tali oggetti. Dato che il proprietario del bucket paga i conti, vuole avere le autorizzazioni complete sugli oggetti che carica Dave. L'amministratore dell'Account A può farlo assegnando l'autorizzazione s3:PutObject a Dave, con la condizione che la richiesta includa intestazioni specifiche della lista di controllo accessi in modo da garantire esplicitamente l'autorizzazione completa o utilizzare una lista di controllo accessi predefinita. Per ulteriori informazioni, consulta PUT Object.
Richiesta dell'intestazione x-amz-full-control
È possibile richiedere l'intestazione x-amz-full-control nella richiesta con autorizzazione al controllo completo al proprietario del bucket. La seguente policy di bucket assegna l'autorizzazione s3:PutObject all'utente Dave con la condizione di utilizzare la chiave di condizione s3:x-amz-grant-full-control che prevede che la richiesta includa l'intestazione x-amz-full-control.
Nota
Questo esempio riguarda l'autorizzazione tra account. Tuttavia, se Dave (che riceve l'autorizzazione) appartiene all'Account AWS proprietario del bucket, questa autorizzazione condizionale non è necessaria. Questo perché l'account padre a cui Dave appartiene è proprietario degli oggetti caricati dall'utente.
Aggiunta del rifiuto esplicito
La precedente policy di bucket assegna l'autorizzazione condizionale all'utente Dave nell'Account B. Quando questa policy è attiva, per Dave è possibile ottenere la stessa autorizzazione senza alcuna condizione tramite qualche altra policy. Ad esempio, Dave può appartenere a un gruppo a cui viene assegnata l'autorizzazione s3:PutObject senza alcuna condizione. Per evitare questi espedienti riguardo alle autorizzazioni, è possibile scrivere una policy di accesso più rigida aggiungendo un rifiuto esplicito. In questo esempio, all'utente Dave viene esplicitamente rifiutata l'autorizzazione a eseguire caricamenti se non include le intestazioni necessarie nella richiesta che assegnano le autorizzazioni complete al proprietario del bucket. Il rifiuto esplicito sovrascrive sempre qualsiasi altra autorizzazione assegnata. Di seguito è illustrato un esempio della policy di accesso modificata con il rifiuto esplicito aggiunto.
Test della policy con la AWS CLI
Se disponi di due Account AWS, puoi testare la policy utilizzando la AWS Command Line Interface (AWS CLI). Colleghi la policy e, utilizzando le credenziali di Dave, puoi testare l'autorizzazione utilizzando il comando AWS CLI di put-object seguente. Le credenziali di Dave vengono fornite aggiungendo il parametro --profile. L'autorizzazione al controllo completo al proprietario del bucket viene assegnata aggiungendo il parametro --grant-full-control. Per ulteriori informazioni sull'impostazione e l'uso di AWS CLI, consulta Sviluppo con Amazon S3 usando la CLI AWS nella documentazione di riferimento delle API di Amazon S3.
aws s3api put-object --bucketexamplebucket--key HappyFace.jpg --body c:\HappyFace.jpg --grant-full-control id="AccountA-CanonicalUserID" --profile AccountBUserProfile
Richiesta dell'intestazione x-amz-acl
È possibile richiedere l'intestazione x-amz-acl con una lista di controllo degli accessi predefinita che assegna l'autorizzazione al controllo completo al proprietario del bucket. Per richiedere l'intestazione x-amz-acl nella richiesta, è possibile sostituire la coppia chiave-valore nel blocco Condition e specificare la chiave di condizione s3:x-amz-acl come mostrato nell'esempio seguente.
"Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } }
Per testare l'autorizzazione utilizzando AWS CLI, specifica il parametro --acl. AWS CLI aggiunge quindi l'intestazione x-amz-acl quando invia la richiesta.
aws s3api put-object --bucketexamplebucket--key HappyFace.jpg --body c:\HappyFace.jpg --acl "bucket-owner-full-control" --profile AccountBadmin
Concessione del permesso s3:PutObject con una condizione sull'intestazione x-amz-acl
La seguente policy del bucket concede l'autorizzazione s3:PutObject per due Account AWS se la richiesta include l'intestazione x-amz-acl che rende l'oggetto pubblicamente leggibile. Il blocco Condition utilizza la condizione StringEquals ed è dotato di una coppia chiave-valore, "s3:x-amz-acl":["public-read"], per la valutazione. Nella coppia chiave-valore, la s3:x-amz-acl è una chiave specifica di Amazon S3, come indicato dal prefisso s3:.
Importante
Non tutte le condizioni hanno significato per tutte le operazioni. Ha senso, ad esempio, includere una condizione s3:LocationConstraint in una policy che concede l'autorizzazione s3:CreateBucket di Amazon S3. Non ha tuttavia senso includere questa condizione in una policy che concede l'autorizzazione s3:GetObject. Amazon S3 può verificare la presenza di errori semantici di questo tipo che riguardano condizioni specifiche di Amazon S3. Se tuttavia stai creando una policy per un utente o un ruolo IAM e includi una condizione di Amazon S3 che non è valida sotto il profilo semantico, non viene segnalato alcun errore perché IAM non può convalidare le condizioni di Amazon S3.