Esempi di policy per i bucket che utilizzano le chiavi di condizione
È possibile utilizzare in linguaggio delle policy di accesso per specificare le condizioni quando si concedono le autorizzazioni. È possibile utilizzare l'elemento opzionale Condition, o blocco Condition, per specificare le condizioni per l'entrata in vigore di una policy.
Per le policy che utilizzano le chiavi di condizioni di Amazon S3 per operazioni su oggetti e bucket, consulta gli esempi seguenti. Per ulteriori informazioni su queste chiavi di condizione, consulta Chiavi di condizione per Amazon S3. Per un elenco completo delle azioni, delle chiavi di condizione e delle risorse di Amazon S3 che è possibile specificare nelle policy, consulta Azioni, risorse e chiavi di condizione per Amazon S3 in Riferimento alle autorizzazioni di servizio.
Per ulteriori informazioni sulle autorizzazioni alle operazioni API S3 per tipi di risorse S3, consulta Autorizzazioni necessarie per le operazioni API di Amazon S3.
Esempi: Chiavi di condizione di Amazon S3 per operazioni sugli oggetti
Gli esempi seguenti mostrano come si possono usare le chiavi di condizione specifiche di Amazon S3 per le operazioni sugli oggetti. Per un elenco completo delle azioni, delle chiavi di condizione e delle risorse di Amazon S3 che è possibile specificare nelle policy, consulta Azioni, risorse e chiavi di condizione per Amazon S3 in Riferimento alle autorizzazioni di servizio.
Per ulteriori informazioni sulle autorizzazioni alle operazioni API S3 per tipi di risorse S3, consulta Autorizzazioni necessarie per le operazioni API di Amazon S3.
Molte delle policy di esempio mostrano come è possibile utilizzare le chiavi di condizione con le operazioni PUT Object. Le operazioni PUT Object permettono intestazioni specifiche della lista di controllo degli accessi (ACL) che è possibile utilizzare per concedere autorizzazioni basate sulle liste ACL. Utilizzando queste chiavi di condizione, è possibile impostare una condizione per richiedere autorizzazioni di accesso specifiche quando l'utente carica un oggetto. È inoltre possibile concedere autorizzazioni basate sulle liste ACL con l'operazione PutObjectAcl. Per ulteriori informazioni, consulta PutObjectAcl nella Documentazione di riferimento delle API di Amazon Simple Storage Service per Amazon S3. Per ulteriori informazioni sulle ACL, consulta Panoramica delle liste di controllo accessi (ACL).
Argomenti
Esempio 1: concessione dell'autorizzazione a s3:PutObject che richiede che gli oggetti siano memorizzati utilizzando la crittografia lato server
Si supponga che l'Account A possieda un bucket. L'amministratore dell'account vuole concedere a Jane, un utente dell'account A, l'autorizzazione a caricare oggetti con la condizione che Jane richieda sempre la crittografia lato server con chiavi gestite da Amazon S3 (SSE-S3). L'amministratore del conto A può specificare questo requisito utilizzando la chiave di condizione s3:x-amz-server-side-encryption, come mostrato. La coppia chiave-valore nel seguente blocco Condition specifica la chiave di condizione s3:x-amz-server-side-encryption e SSE-S3 (AES256) come tipo di crittografia:
"Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" }}
Quando si verifica questa autorizzazione utilizzando il parametro AWS CLI, è necessario aggiungere la crittografia richiesta utilizzando il parametro --server-side-encryption, come mostrato nell'esempio seguente. Per utilizzare questo comando di esempio, sostituisci con le tue informazioni. user input
placeholders
aws s3api put-object --bucketamzn-s3-demo-bucket--keyHappyFace.jpg--bodyc:\HappyFace.jpg--server-side-encryption "AES256" --profileAccountAadmin
Esempio 2: Concessione all'indirizzo s3:PutObject dell'autorizzazione a copiare oggetti con una restrizione sull'origine della copia
In una richiesta di oggetto PUT, quando si specifica un oggetto di origine, la richiesta è un'operazione di copia (consulta CopyObject). Di conseguenza è possibile che il proprietario del bucket assegni all'utente l'autorizzazione a copiare gli oggetti con qualche limitazione sull'origine, ad esempio:
-
Consente di copiare gli oggetti solo dal bucket di origine specificato (ad esempio,
).amzn-s3-demo-source-bucket -
Consente di copiare gli oggetti dal bucket di origine specificato e solo gli oggetti il cui prefisso del nome della chiave inizia con un prefisso specifico, come ad esempio
(ad esempio,public/).amzn-s3-demo-source-bucket/public/* -
Consente di copiare solo un oggetto specifico dal bucket di origine (ad esempio,
).amzn-s3-demo-source-bucket/example.jpg
La seguente policy del bucket concede a un utente () l'autorizzazione Daves3:PutObject. Questa policy gli consente di copiare gli oggetti solo a condizione che la richiesta includa l'intestazione s3:x-amz-copy-source e che il valore dell'intestazione specifichi il prefisso del nome della chiave /. Per utilizzare questa policy di esempio, sostituisci amzn-s3-demo-source-bucket/public/* con le tue informazioni.user
input placeholders
Test della policy con l'opzione AWS CLI
È possibile testare l'autorizzazione utilizzando il comando AWS CLI di copy-object. È possibile specificare l'origine aggiungendo il parametro --copy-source; il prefisso del nome della chiave deve corrispondere al prefisso consentito nella policy. È necessario fornire le credenziali all'utente Dave utilizzando il parametro --profile. Per ulteriori informazioni sull'impostazione di AWS CLI, consulta Sviluppo con Amazon S3 usando la CLI AWS nella documentazione di riferimento delle API di Amazon S3.
aws s3api copy-object --bucket--keyamzn-s3-demo-source-bucketHappyFace.jpg--copy-sourceamzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg--profileAccountADave
Concessione dell'autorizzazione a copiare solo un oggetto specifico
La policy di cui sopra utilizza la condizione StringNotLike. Per concedere l'autorizzazione a copiare solo un oggetto specifico, è necessario modificare la condizione da StringNotLike a StringNotEquals e quindi specificare la chiave dell'oggetto esatto, come mostrato nell'esempio seguente. Per utilizzare questo comando di esempio, sostituisci con le tue informazioni.user input
placeholders
"Condition": { "StringNotEquals": { "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg" } }
Esempio 3: concessione dell'accesso a una versione specifica di un oggetto
Si supponga che l'account A possieda un bucket con controllo delle versioni abilitato. Il bucket ha diverse versioni dell'oggetto . L'amministratore dell'account A vuole ora concedere all'utente HappyFace.jpg il permesso di ottenere solo una versione specifica dell'oggetto. L'amministratore dell'account può ottenere questo risultato concedendo all'utente Dave l'autorizzazione Daves3:GetObjectVersion in modo condizionato, come mostrato nell'esempio seguente. La coppia chiave-valore nel blocco Condition specifica la chiave di condizione s3:VersionId. In questo caso, per recuperare l'oggetto dal bucket con controllo delle versioni abilitato specificato, deve conoscere l'ID esatto della versione dell'oggetto. Per utilizzare questa policy di esempio, sostituisci Dave con le tue informazioni.user input
placeholders
Per ulteriori informazioni, consulta GetObject in Amazon Simple Storage Service API Reference (Guida di riferimento per l'API di Amazon Simple Storage Service).
Test della policy con l'opzione AWS CLI
È possibile verificare i permessi di questa policy utilizzando il comando AWS CLI get-object con il parametro --version-id per identificare la versione specifica dell'oggetto da recuperare. Il comando recupera la versione specificata dell'oggetto e la salva nel file .OutputFile.jpg
aws s3api get-object --bucket--keyamzn-s3-demo-bucketHappyFace.jpgOutputFile.jpg--version-idAaaHbAQitwiL_h47_44lRO2DDfLlBO5e--profileAccountADave
Esempio 4: concessione di autorizzazioni in base ai tag degli oggetti
Per esempi su come utilizzare le chiavi di condizione del tagging degli oggetti con le operazioni di Amazon S3, consulta Tagging e policy di controllo degli accessi.
Esempio 5: Limitazione dell'accesso in base all'ID Account AWS del proprietario del bucket
È possibile utilizzare la chiave di condizione aws:ResourceAccount o s3:ResourceAccount per scrivere policy IAM o per endpoint di cloud privati virtuali (VPC) che limitano l'accesso di utenti, ruoli o applicazioni ai bucket Amazon S3 di proprietà di un ID Account AWS specifico. È possibile utilizzare queste chiavi di condizione per limitare l'accesso dei client all'interno del VPC ai bucket non di proprietà dell'utente.
Ricordare, tuttavia, che alcuni servizi AWS si basano sull'accesso a bucket gestiti da AWS. Pertanto, l'utilizzo della chiave aws:ResourceAccount o s3:ResourceAccount nelle policy IAM potrebbe influire sull'accesso a queste risorse. Per maggiori informazioni, consultare le seguenti risorse:
-
Limitazione dell'accesso ai bucket in un Account AWS specificato nella Guida di AWS PrivateLink
-
Limitazione dell'accesso ai bucket utilizzati da Amazon ECRnella Guida di Amazon ECR
-
Fornire l'accesso richiesto a Systems Manager per bucket Amazon S3 gestiti da AWS nella Guida di AWS Systems Manager
Per ulteriori informazioni sulle chiavi di condizione aws:ResourceAccount e s3:ResourceAccount ed esempi che mostrano come usarle, consulta Limitare l'accesso ai bucket Amazon S3 di proprietà di specifici Account AWS
Esempio 6: Richiesta di una versione TLS minima
È possibile utilizzare la chiave di condizione s3:TlsVersion per scrivere policy IAM, endpoint di cloud privato virtuale (VPCE) o bucket che limitano l'accesso di utenti o applicazioni ai bucket Amazon S3 in base alla versione TLS utilizzata dal client. È possibile utilizzare questa chiave di condizione per scrivere policy che richiedono una versione TLS minima.
Nota
Quando i servizi AWS effettuano chiamate ad altri servizi AWS per conto dell’utente (chiamate da servizio a servizio), viene oscurato un determinato contesto di autorizzazione specifico della rete, tra cui s3:TlsVersion, aws:SecureTransport, aws:SourceIp e aws:VpcSourceIp. Se la policy utilizza queste chiavi di condizione con le istruzioni Deny, i principali del servizio AWS potrebbero essere involontariamente bloccati. Per consentire ai servizi AWS di funzionare correttamente mantenendo i requisiti di sicurezza, escludi i principali del servizio dalle istruzioni Deny aggiungendo la chiave di condizione aws:PrincipalIsAWSService con il valore false. Ad esempio:
{ "Effect": "Deny", "Action": "s3:*", "Resource": "*", "Condition": { "Bool": { "aws:SecureTransport": "false", "aws:PrincipalIsAWSService": "false" } } }
Questa policy nega l’accesso alle operazioni S3 quando non viene utilizzato HTTPS (aws:SecureTransport è false), ma solo per i principali del servizio non AWS. Ciò garantisce che le restrizioni condizionali si applichino a tutti i principali, ad eccezione dei principali del servizio AWS.
Il seguente esempio di policy del bucket nega le richieste di PutObject da parte di client che hanno una versione di TLS precedente a 1.2, ad esempio 1.1 o 1.0. Per utilizzare questa policy di esempio, sostituisci con le tue informazioni.user input placeholders
Il seguente esempio di policy del bucket consente le richieste di PutObject da parte di client che hanno una versione TLS successiva alla 1.1, ad esempio 1.2, 1.3 o successiva:
Esempio 7: Esclusione di alcuni principali da un'istruzione Deny
La seguente policy dei bucket nega a s3:GetObject l'accesso a , tranne che ai principali con il numero di account amzn-s3-demo-bucket. Per utilizzare questa policy di esempio, sostituisci 123456789012 con le tue informazioni.user input
placeholders
Esempio 8: imporre ai client di caricare in modo condizionato gli oggetti in base ai nomi delle chiavi degli oggetti o agli ETag
Con le scritture condizionali, è possibile aggiungere un'intestazione aggiuntiva alle richieste di WRITE per specificare le precondizioni dell'operazione S3. Questa intestazione specifica una condizione che, se non viene soddisfatta, comporta il fallimento dell'operazione S3. Ad esempio, si può evitare la sovrascrittura di dati esistenti convalidando che non vi siano oggetti con lo stesso nome di chiave già presenti nel bucket durante il caricamento degli oggetti. In alternativa, è possibile controllare il tag entità (ETag) di un oggetto in Amazon S3 prima di scrivere un oggetto.
Per esempi di policy di bucket che utilizzano le condizioni in una policy di bucket per imporre scritture condizionali, consulta Applicazione delle scritture condizionali sui bucket Amazon S3.
Esempi: Chiavi di condizione di Amazon S3 per le operazioni sui bucket
I seguenti esempi di policy mostrano come sia possibile utilizzare chiavi di condizione specifiche di Amazon S3 per le operazioni sui bucket.
Argomenti
Esempio 1: concessione dell'autorizzazione a s3:GetObject con una condizione su un indirizzo IP
È possibile concedere agli utenti autenticati il permesso di utilizzare l'azione s3:GetObject se la richiesta proviene da un intervallo specifico di indirizzi IP (ad esempio, ), a meno che l'indirizzo IP non sia uno di quelli che si desidera escludere (ad esempio, 192.0.2.*). Nel blocco 192.0.2.188Condition, IpAddress e NotIpAddress sono condizioni e a ciascuna condizione viene fornita una coppia chiave-valore da valutare. Entrambe le coppie chiave-valore di questo esempio utilizzano la chiave ampia aws:SourceIp AWS. Per utilizzare questa policy di esempio, sostituisci con le tue informazioni.user input placeholders
Nota
I valori delle chiavi IPAddress e NotIpAddress specificati nel blocco Condition utilizzano la notazione CIDR, come descritto in RFC 4632. Per ulteriori informazioni, consulta http://www.rfc-editor.org/rfc/rfc4632.txt
È anche possibile utilizzare altre chiavi di condizione valide per tutto AWS nelle policy di Amazon S3. Ad esempio, è possibile specificare le chiavi di condizione aws:SourceVpce e aws:SourceVpc nelle policy di bucket per gli endpoint VPC. Per esempi specifici consulta Controllo dell'accesso dagli endpoint VPC con policy di bucket.
Nota
Per alcune chiavi di condizione globali AWS, sono supportati solo determinati tipi di risorse. Pertanto, verificare se Amazon S3 supporta la chiave di condizione globale e il tipo di risorsa che si desidera utilizzare, o se invece è necessario utilizzare una chiave di condizione specifica di Amazon S3. Per un elenco completo dei tipi di risorse e delle chiavi di condizione supportate per Amazon S3, consulta Azioni, risorse e chiavi di condizione per Amazon S3 in Riferimento alle autorizzazioni di servizio.
Per ulteriori informazioni sulle autorizzazioni alle operazioni API S3 per tipi di risorse S3, consulta Autorizzazioni necessarie per le operazioni API di Amazon S3.
Esempio 2: recupero di un elenco di oggetti in un bucket con un prefisso specifico
È possibile utilizzare la chiave di condizione s3:prefix per limitare la risposta dell'operazione API ai nomi di chiavi con un prefisso specifico ListObjectsV2 API ai nomi delle chiavi con un prefisso specifico. Se si è il proprietario del bucket, si può usare questa chiave di condizione per limitare un utente a elencare il contenuto di un prefisso specifico nel bucket. La chiave di condizione s3:prefix è utile se gli oggetti del bucket sono organizzati per prefissi di nomi di chiavi.
La console di Amazon S3 utilizza i prefissi dei nomi delle chiavi per mostrare un concetto di cartella. Solo la console supporta il concetto di cartelle, mentre l'API Amazon S3 supporta solo bucket e oggetti. Ad esempio, se due oggetti hanno i nomi delle chiavi e public/object1.jpg, la console mostra gli oggetti sotto la cartella public/object2.jpg. Nell'API Amazon S3 questi sono oggetti con prefissi, non oggetti nelle cartelle. Per ulteriori informazioni sull'utilizzo di prefissi e delimitatori per filtrare le autorizzazioni di accesso, consulta Procedura guidata: controllo dell'accesso a un bucket con policy utente. public
Nel seguente scenario, il proprietario del bucket e l'account padre a cui appartiene l'utente sono gli stessi. Il proprietario del bucket può quindi utilizzare una policy del bucket o una policy dell'utente per concedere l'accesso. Per ulteriori informazioni sulle altre chiavi di condizione che è possibile utilizzare con l'operazione API ListObjectsV2, consulta la sezione ListObjectsV2.
Nota
Se per il bucket è abilitato il controllo delle versioni, per elencare gli oggetti nel bucket è necessario concedere l'autorizzazione s3:ListBucketVersions nelle policy seguenti, invece dell'autorizzazione s3:ListBucket. Il permesso s3:ListBucketVersions supporta anche la chiave di condizione s3:prefix.
Policy utente
La seguente policy utente concede l'autorizzazione s3:ListBucket (consulta ListObjectsV2) con un'istruzione Condition che richiede all'utente di specificare un prefisso nella richiesta con un valore di . Per utilizzare questa policy di esempio, sostituisci projects con le tue informazioni.user input placeholders
L'istruzione Condition limita l'utente a elencare solo le chiavi degli oggetti che hanno il prefisso . L'aggiunta dell'istruzione esplicita projectsDeny impedisce all'utente di elencare le chiavi con qualsiasi altro prefisso, indipendentemente dalle altre autorizzazioni di cui dispone. Ad esempio, è possibile che l'utente ottenga l'autorizzazione a elencare le chiavi degli oggetti senza alcuna restrizione, sia attraverso l'aggiornamento della precedente policy dell'utente sia attraverso una policy del bucket. Poiché le istruzioni esplicite Deny sovrascrivono sempre le istruzioni Allow, se l'utente tenta di elencare chiavi diverse da quelle che hanno il prefisso , la richiesta viene rifiutata. projects
Policy del bucket
Se si aggiunge l'elemento Principal alla policy utente di cui sopra, che identifica l'utente, si ottiene una policy del bucket, come mostrato nell'esempio seguente. Per utilizzare questa policy di esempio, sostituisci con le tue informazioni.user input
placeholders
Test della policy con l'opzione AWS CLI
È possibile verificare la policy utilizzando il seguente comando list-object AWS CLI. Nel comando, vengono fornite le credenziali utente utilizzando il parametro --profile. 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 list-objects --bucket--prefixamzn-s3-demo-bucketprojects--profileAccountA
Esempio 3: impostazione del numero massimo di chiavi
È possibile utilizzare la chiave di condizione s3:max-keys per impostare il numero massimo di chiavi che un richiedente può restituire in una richiesta ListObjectsV2 o ListObjectVersions. Per impostazione predefinita, queste operazioni API restituiscono fino a 1.000 chiavi. Per un elenco di operatori di condizione numerici che è possibile utilizzare con s3:max-keys e i relativi esempi, consulta Operatori di condizione numerici nella Guida per l'utente di IAM.