Esempi di policy per i bucket che utilizzano le chiavi di condizione - Amazon Simple Storage Service

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).

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 user input placeholders con le tue informazioni.

aws s3api put-object --bucket amzn-s3-demo-bucket --key HappyFace.jpg --body c:\HappyFace.jpg --server-side-encryption "AES256" --profile AccountAadmin

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 public/ (ad esempio, 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 (Dave) l'autorizzazione s3: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 /amzn-s3-demo-source-bucket/public/*. Per utilizzare questa policy di esempio, sostituisci user input placeholders con le tue informazioni.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "cross-account permission to user in your own account", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*" }, { "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-source-bucket/*", "Condition": { "StringNotLike": { "s3:x-amz-copy-source": "amzn-s3-demo-source-bucket/public/*" } } } ] }
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 amzn-s3-demo-source-bucket --key HappyFace.jpg --copy-source amzn-s3-demo-source-bucket/public/PublicHappyFace1.jpg --profile AccountADave
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 user input placeholders con le tue informazioni.

"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 HappyFace.jpg. L'amministratore dell'account A vuole ora concedere all'utente Dave il permesso di ottenere solo una versione specifica dell'oggetto. L'amministratore dell'account può ottenere questo risultato concedendo all'utente Dave l'autorizzazione s3: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, Dave deve conoscere l'ID esatto della versione dell'oggetto. Per utilizzare questa policy di esempio, sostituisci user input placeholders con le tue informazioni.

Per ulteriori informazioni, consulta GetObject in Amazon Simple Storage Service API Reference (Guida di riferimento per l'API di Amazon Simple Storage Service).

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg" }, { "Sid": "statement2", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Dave" }, "Action": "s3:GetObjectVersion", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/HappyFace.jpg", "Condition": { "StringNotEquals": { "s3:VersionId": "AaaHbAQitwiL_h47_44lRO2DDfLlBO5e" } } } ] }
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 amzn-s3-demo-bucket --key HappyFace.jpg OutputFile.jpg --version-id AaaHbAQitwiL_h47_44lRO2DDfLlBO5e --profile AccountADave

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:

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 nello AWS Storage Blog.

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 user input placeholders con le tue informazioni.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "NumericLessThan": { "s3:TlsVersion": 1.2 } } } ] }

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:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1", "arn:aws:s3:::amzn-s3-demo-bucket1/*" ], "Condition": { "NumericGreaterThan": { "s3:TlsVersion": 1.1 } } } ] }

Esempio 7: Esclusione di alcuni principali da un'istruzione Deny

La seguente policy dei bucket nega a s3:GetObject l'accesso a amzn-s3-demo-bucket, tranne che ai principali con il numero di account 123456789012. Per utilizzare questa policy di esempio, sostituisci user input placeholders con le tue informazioni.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "DenyAccessFromPrincipalNotInSpecificAccount", "Principal": { "AWS": "*" }, "Action": "s3:GetObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "StringNotEquals": { "aws:PrincipalAccount": [ "123456789012" ] } } } ] }

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.

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, 192.0.2.*), a meno che l'indirizzo IP non sia uno di quelli che si desidera escludere (ad esempio, 192.0.2.188). Nel blocco Condition, 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 user input placeholders con le tue informazioni.

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.

JSON
{ "Version":"2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "192.0.2.0/24" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32" } } } ] }

È 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 public/object1.jpg e public/object2.jpg, la console mostra gli oggetti sotto la cartella public. 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.

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 projects. Per utilizzare questa policy di esempio, sostituisci user input placeholders con le tue informazioni.

JSON
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:ListBucket", "Resource":"arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }

L'istruzione Condition limita l'utente a elencare solo le chiavi degli oggetti che hanno il prefisso projects. L'aggiunta dell'istruzione esplicita Deny 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 projects, la richiesta viene rifiutata.

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 user input placeholders con le tue informazioni.

JSON
{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringEquals" : { "s3:prefix": "projects" } } }, { "Sid":"statement2", "Effect":"Deny", "Principal": { "AWS": "arn:aws:iam::123456789012:user/bucket-owner" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition" : { "StringNotEquals" : { "s3:prefix": "projects" } } } ] }
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 amzn-s3-demo-bucket --prefix projects --profile AccountA

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.