Esempi di policy utente - Amazon Simple Storage Service

Esempi di policy utente

In questa sezione vengono illustrate diverse policy utente IAM AWS Identity and Access Management di esempio per il controllo dell'accesso utente ad Amazon S3. Per le policy di bucket di esempio, consulta Utilizzo delle policy di bucket. Per informazioni sul linguaggio delle policy IAM, consulta Policy di bucket e policy utente.

Le policy di esempio seguenti funzionano se vengono testate a livello di programma. Per utilizzarle con la console Amazon S3 occorre tuttavia concedere autorizzazioni aggiuntive che sono richieste dalla console. Per ulteriori informazioni sull'utilizzo di policy come queste con la console Amazon S3, consulta Procedura guidata: controllo dell'accesso a un bucket con policy utente.

Concessione a un utente IAM dell'accesso a uno dei bucket

In questo esempio si vuole concedere a un utente IAM nel tuo Account AWS di accedere a uno dei bucket, DOC-EXAMPLE-BUCKET1, con la possibilità di aggiungere, aggiornare ed eliminare gli oggetti.

Oltre ad assegnare le autorizzazioni s3:PutObject, s3:GetObject e s3:DeleteObject all'utente, la policy assegna anche le autorizzazioni s3:ListAllMyBuckets, s3:GetBucketLocation e s3:ListBucket. Queste sono le autorizzazioni aggiuntive richieste dalla console. Inoltre, le operazioni s3:PutObjectAcl e s3:GetObjectAcl sono necessarie per essere in grado di copiare, tagliare e incollare gli oggetti nella console. Per una procedura guidata di esempio che concede autorizzazioni a utenti e le testa utilizzando la console, consulta Procedura guidata: controllo dell'accesso a un bucket con policy utente.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action": "s3:ListAllMyBuckets", "Resource":"*" }, { "Effect":"Allow", "Action":["s3:ListBucket","s3:GetBucketLocation"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }, { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:GetObjectAcl", "s3:DeleteObject" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" } ] }

Concessione a ogni utente IAM dell'accesso a una cartella in un bucket

In questo esempio si vuole concedere a due utenti IAM, Mary e Carlos, l'accesso al bucket, DOC-EXAMPLE-BUCKET1, in modo che possano aggiungere, aggiornare ed eliminare gli oggetti. Tuttavia, si vuole limitare l'accesso di ciascun utente a un unico prefisso (cartella) nel bucket. È possibile creare cartelle con nomi che corrispondano ai nomi utente.

DOC-EXAMPLE-BUCKET1 Mary/ Carlos/

Per assegnare a ciascun utente unicamente l'accesso alla cartella, è possibile scrivere una policy per ogni utente e collegarla singolarmente. È ad esempio possibile collegare la seguente policy all'utente Mary per concederle autorizzazioni Amazon S3 specifiche sulla cartella DOC-EXAMPLE-BUCKET1/Mary.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/Mary/*" } ] }

Successivamente, è possibile collegare una policy simile all'utente Carlos, specificando la cartella Carlos nel valore Resource.

Invece di collegare le policy ai singoli utenti, è possibile scrivere un'unica policy che utilizzi una variabile di policy, collegandola poi a un gruppo. In primo luogo, occorre creare un gruppo e aggiungervi Mary e Carlos. La seguente policy di esempio concede un set di autorizzazioni Amazon S3 nella cartella DOC-EXAMPLE-BUCKET1/${aws:username}. Quando la policy viene valutata, la variabile ${aws:username} viene sostituita dal nome utente del richiedente. Ad esempio, se Mary invia una richiesta di inserimento di un oggetto, l'operazione è consentita solo se l'oggetto viene caricato nella cartella DOC-EXAMPLE-BUCKET1/Mary.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
Nota

Quando si utilizzano le variabili di policy, è necessario specificare esplicitamente la versione 2012-10-17 nella policy. La versione di default del linguaggio della policy IAM, 2008-10-17, non supporta le variabili di policy.

Se si vuole testare la policy precedente nella console Amazon S3, la console deve avere l'autorizzazione per ottenere autorizzazioni aggiuntive, come illustrato nella policy seguente. Per ulteriori informazioni su come la console utilizza queste autorizzazioni, consulta Procedura guidata: controllo dell'accesso a un bucket con policy utente.

{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" }, { "Sid": "AllowRootLevelListingOfTheBucket", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }, { "Sid": "AllowListBucketOfASpecificUserPrefix", "Action": "s3:ListBucket", "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "Condition":{ "StringLike":{"s3:prefix":["${aws:username}/*"] } } }, { "Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix", "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/${aws:username}/*" } ] }
Nota

Nella versione 2012-10-17 della policy, le variabili di policy iniziano con $. Questa modifica nella sintassi potenzialmente può creare un conflitto se la chiave dell'oggetto (nome dell'oggetto) include un $.

Per evitare questo conflitto, specificare il carattere $ usando ${$}. Ad esempio, per includere una chiave dell'oggetto my$file in una policy, si specifica il carattere con my${$}file.

Sebbene i nomi utente IAM siano identificatori semplici, in formato leggibile, non sono necessariamente univoci a livello globale. Ad esempio, se l'utente Carlos lascia l'organizzazione ed entra un altro utente Carlos, il Carlos nuovo potrebbe accedere alle informazioni del precedente Carlos.

Invece di utilizzare i loro nomi utente, si potrebbero creare cartelle basate sugli ID utente IAM. Ogni ID utente IAM è univoco. In questo caso, si deve modificare la policy precedente per utilizzare la variabile di policy ${aws:userid}. Per ulteriori informazioni sugli identificatori utente, consulta Identificatori IAMnella Guida per l'utente di IAM.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/home/${aws:userid}/*" } ] }

Concessione a utenti non IAM (utenti dell'app per dispositivi mobili) dell'accesso alle cartelle in un bucket

Si supponga che si vuole sviluppare un'app mobile, un gioco che archivia i dati degli utenti in un bucket S3. Per ogni utente dell'app, si vuole creare una cartella nel bucket. Inoltre, desideri limitare l'accesso di ciascun utente alla propria cartella. Tuttavia, non è possibile creare cartelle prima che qualcuno scarichi l'app e inizi a utilizzare il gioco, perché non disponi dell'ID utente.

In questo caso, è possibile richiedere agli utenti di accedere all'app mediante provider di identità pubblici quali Login with Amazon, Facebook o Google. Una volta che gli utenti hanno effettuato l'accesso all'app mediante uno di questi provider, dispongono di un ID utente che può essere utilizzato per creare cartelle specifiche di un determinato utente al runtime.

È quindi possibile utilizzare la federazione delle identità Web in AWS Security Token Service per integrare le informazioni dal provider di identità con l'app e ottenere credenziali di sicurezza temporanee per ogni utente. Successivamente è possibile creare policy IAM che permettono all'app di accedere al bucket ed eseguire operazioni come la creazione di cartelle specifiche dell'utente e il caricamento dei dati. Per ulteriori informazioni sulla federazione delle identità Web, consulta Informazioni sulla federazione delle identità Web nella Guida per l'utente di IAM.

Concessione a un gruppo dell'accesso a una cartella condivisa in Amazon S3

Collegando la policy seguente al gruppo viene concesso a tutti i membri del gruppo l'accesso alla seguente cartella in Amazon S3: DOC-EXAMPLE-BUCKET1/share/marketing. I membri del gruppo possono accedere solo alle autorizzazioni Amazon S3 specifiche illustrate nella policy e unicamente per gli oggetti nella cartella specificata.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:PutObject", "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/share/marketing/*" } ] }

Permesso a tutti gli utenti di leggere gli oggetti in una parte del bucket

In questo esempio viene creato un gruppo denominato AllUsers, che contiene tutti gli utenti IAM che appartengono all'Account AWS. Viene collegata quindi una policy che consente al gruppo di accedere a GetObject e GetObjectVersion, ma solo per gli oggetti nella cartella DOC-EXAMPLE-BUCKET1/readonly.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "s3:GetObject", "s3:GetObjectVersion" ], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/readonly/*" } ] }

Permesso a un partner di rilasciare i file in una parte specifica del bucket

In questo esempio, viene creato un gruppo denominato AnyCompany che rappresenta un'azienda partner. Viene creato un utente IAM per la persona o l'applicazione specifica presso l'azienda partner che ha necessità di effettuare l'accesso, quindi l'utente viene inserito nel gruppo.

Viene collegata quindi una policy che consente al gruppo di accedere alla cartella seguente in un bucket aziendale:

DOC-EXAMPLE-BUCKET1/uploads/anycompany

Desideri inoltre impedire al gruppo AnyCompany di eseguire qualsiasi altra operazione con il bucket, quindi aggiungi un'istruzione che rifiuta esplicitamente l'autorizzazione per qualsiasi azione Amazon S3 ad eccezione di PutObject su qualsiasi risorsa Amazon S3 nell'account Account AWS.

{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/anycompany/*" }, { "Effect":"Deny", "Action":"s3:*", "NotResource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/uploads/anycompany/*" } ] }

Restrizione dell'accesso ai bucket Amazon S3 in un Account AWS specifico

Se vuoi assicurarti che i tuoi principal Amazon S3 accedano solo alle risorse che si trovano all'interno di un Account AWS attendibile, è possibile limitare l'accesso. Ad esempio, questa Policy IAM basata sull'identità utilizza un effetto Deny per bloccare l'accesso alle azioni Amazon S3, a meno che la risorsa Amazon S3 a cui si accede non sia presente nell'account 222222222222. Per evitare che un principal IAM in un Account AWS acceda a oggetti Amazon S3 al di fuori dell'account, allegare la seguente politica IAM:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": [ "222222222222" ] } } } ] }
Nota

Questo criterio non sostituisce i controlli di accesso IAM esistenti, perché non garantisce alcun accesso. Invece, questa policy funge da guardrail aggiuntivo per le altre autorizzazioni IAM, indipendentemente dalle autorizzazioni concesse tramite altre policy IAM.

Assicurati di sostituire l'ID account 222222222222 nella policy con il tuo Account AWS. Per applicare un criterio a più account pur mantenendo questa restrizione, sostituire l'ID account conla chiave di condizione aws:PrincipalAccount. Questa condizione richiede che il principal e la risorsa devono trovarsi nello stesso account.

Limitazione dell'accesso ai bucket Amazon S3 all'interno della tua unità organizzativa (OU)

Se si dispone di un'unità organizzativa (UO) configurata in AWS Organizations, potresti voler limitare l'accesso del bucket Amazon S3 a una parte specifica della tua organizzazione. In questo esempio, utilizziamo la chiave aws:ResourceOrgPaths per limitare l'accesso del bucket Amazon S3 a un'unità organizzativa della tua organizzazione. In questo esempio, l'ID dell'unità organizzativa è ou-acroot-exampleou. Assicurati di sostituire questo valore nella tua policy con i tuoi ID dell'unità organizzativa.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowS3AccessOutsideMyBoundary", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": "*", "Condition": { "ForAllValues:StringNotLike": { "aws:ResourceOrgPaths": [ "o-acorg/r-acroot/ou-acroot-exampleou/" ] } } } ] }
Nota

Questa policy non concede alcun accesso. Al contrario, questa policy funge da backstop per le altre autorizzazioni IAM, impedendo ai tuoi principal di accedere a oggetti Amazon S3 al di fuori di un limite definito dall'unità organizzativa.

La policy nega l'accesso alle azioni di Amazon S3 a meno che l'oggetto Amazon S3 a cui si accede non si trovi nell'UO ou-acroot-exampleou nella tua organizzazione. La Condizione di policy IAM richiede aws:ResourceOrgPaths, una chiave di condizione multivalore, per contenere uno qualsiasi dei percorsi dell'unità organizzativa elencati. La politica utilizza l'operatore ForAllValues:StringNotLike per confrontare i valori di aws:ResourceOrgPaths alle UO elencate senza corrispondenza in base a maiuscole e minuscole.

Limitazione dell'accesso ai bucket Amazon S3 all'interno dell'organizzazione

Per limitare l'accesso agli oggetti Amazon S3 all'interno dell'organizzazione, allega una policy IAM alla radice dell'organizzazione, applicandola a tutti gli account dell'organizzazione. Per richiedere ai tuoi principal IAM di seguire questa regola, usa una policy di controllo dei servizi (SCP). Se scegli di utilizzare una SCP, assicurati di testare l'SCP prima di allegare la policy alla radice dell'organizzazione.

Nella seguente policy di esempio, l'accesso viene negato alle azioni di Amazon S3 a meno che l'oggetto Amazon S3 a cui si accede non si trovi nella stessa organizzazione del principal IAM che vi sta accedendo:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyS3AccessOutsideMyBoundary", "Effect": "Deny", "Action": [ "s3:*" ], "Resource": "arn:aws:s3:::*/*", "Condition": { "StringNotEquals": { "aws:ResourceOrgID": "${aws:PrincipalOrgID}" } } } ] }
Nota

Questa policy non concede alcun accesso. Invece, questa policy funge da backstop per le altre autorizzazioni IAM, impedendo ai tuoi principal di accedere a qualsiasi oggetto Amazon S3 al di fuori della tua organizzazione. Questa policy si applica anche alle risorse Amazon S3 create dopo l'entrata in vigore della policy.

La Condizione di policy IAM in questo esempio richiede che aws:ResourceOrgID e aws:PrincipalOrgID siano uguali l'uno all'altro. Con questo requisito, il principal che effettua la richiesta e la risorsa a cui si accede devono trovarsi nella stessa organizzazione.