Esempi di policy basate sull'identità per 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à.

Esempi di policy basate sull'identità per Amazon S3

Questa sezione mostra diversi esempi di policy basate sull'identità AWS Identity and Access Management (IAM) per il controllo dell'accesso ad Amazon S3. Ad esempio, le bucket policy (politiche basate sulle risorse), vedi. Politiche Bucket per Amazon S3 Per informazioni sul linguaggio delle policy IAM, consulta Politiche e autorizzazioni in Amazon S3.

Le policy di esempio seguenti funzionano se vengono testate a livello di programma. Per utilizzarle con la console di Amazon S3 occorre tuttavia concedere autorizzazioni aggiuntive che sono richieste dalla console. Per ulteriori informazioni sull'utilizzo di policy come queste con la console di 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, vuoi concedere a un utente IAM incluso nel tuo account l' Account AWS accesso a uno dei tuoi bucket, DOC-EXAMPLE-BUCKET1, e consentire all'utente di aggiungere, aggiornare ed eliminare 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. Potresti creare cartelle con nomi che corrispondono ai rispettivi 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 politica viene valutata, la variabile di policy ${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 di 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 nomi utente, puoi 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 ogni utente alla propria cartella. Ma non puoi creare cartelle prima che qualcuno scarichi la tua app e inizi a giocare, perché non hai il suo 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.

Puoi quindi utilizzare la federazione delle identità web AWS Security Token Service per integrare le informazioni del provider di identità con la tua 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 responsabili di Amazon S3 accedano solo alle risorse che si trovano all'interno di un account affidabile Account AWS, puoi 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 impedire a un principale IAM di accedere a oggetti Amazon S3 al di fuori dell'account, allega la seguente policy IAM: Account AWS

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

Questa policy non sostituisce i controlli di accesso IAM esistenti, perché non concede 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 una policy a più account pur mantenendo questa restrizione, sostituire l'ID account con la chiave di condizione aws:PrincipalAccount. Questa condizione richiede che il principale e la risorsa devono trovarsi nello stesso account.

Limitazione dell'accesso ai bucket Amazon S3 all'interno dell'unità organizzativa

Se disponi di un'unità organizzativa (OU) configurata in AWS Organizations, potresti voler limitare l'accesso ai bucket Amazon S3 a una parte specifica dell'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 politica non concede alcun accesso. Al contrario, questa policy funge da backstop per le altre autorizzazioni IAM, impedendo ai tuoi principali 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 principale 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 principale 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 politica non concede alcun accesso. Invece, questa policy funge da backstop per le altre autorizzazioni IAM, impedendo ai tuoi principali 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 principale che effettua la richiesta e la risorsa a cui si accede devono trovarsi nella stessa organizzazione.

L'esempio seguente di politica basata sull'identità concede l'autorizzazione a un utente. s3:GetAccountPublicAccessBlock Per queste autorizzazioni, è necessario impostare il valore Resource su "*". Per informazioni sugli ARN delle risorse, vedere. Risorse relative alle policy per Amazon S3

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action":[ "s3:GetAccountPublicAccessBlock" ], "Resource":[ "*" ] } ] }

Limitazione della creazione di bucket a una sola regione

Supponiamo che un Account AWS amministratore voglia concedere al proprio utente (Dave) l'autorizzazione a creare un bucket solo nella regione del Sud America (San Paolo). L'amministratore dell'account può collegare la seguente policy utente assegnando l'autorizzazione s3:CreateBucket con una condizione, come mostrato. La coppia chiave-valore nel blocco Condition specifica la chiave s3:LocationConstraint e la regione sa-east-1 come valore corrispondente.

Nota

In questo esempio, il proprietario di bucket sta assegnando un'autorizzazione a uno dei suoi utenti, in modo da poter utilizzare una policy di bucket o una policy utente. Questo esempio mostra una policy utente.

Per un elenco delle regioni di Amazon S3, consultare la sezione relativa a regioni ed endpoint nella Riferimenti generali di AWS.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }
Aggiunta del rifiuto esplicito

La policy precedente limita l'utente impedendogli di creare un bucket in qualsiasi altra regione al di fuori di sa-east-1. Tuttavia, qualche altra policy potrebbe assegnare a questo utente l'autorizzazione a creare bucket in un'altra regione. Ad esempio, se l'utente appartiene a un gruppo, è possibile che questo gruppo abbia una policy collegata che assegna a tutti gli utenti del gruppo stesso l'autorizzazione a creare bucket in un'altra regione. Per garantire che l'utente non ottenga l'autorizzazione a creare bucket in nessun'altra regione, puoi aggiungere una dichiarazione di rifiuto esplicita nella politica di cui sopra.

L'istruzione Deny utilizza la condizione StringNotLike. Cioè, la richiesta di creazione del bucket viene rifiutata se il vincolo di posizione non è sa-east-1. La negazione esplicita non consente all'utente di creare un bucket in nessun'altra regione, indipendentemente dalle altre autorizzazioni ottenute dall'utente. La seguente politica include una dichiarazione di negazione esplicita.

{ "Version":"2012-10-17", "Statement":[ { "Sid":"statement1", "Effect":"Allow", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringLike": { "s3:LocationConstraint": "sa-east-1" } } }, { "Sid":"statement2", "Effect":"Deny", "Action": "s3:CreateBucket", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotLike": { "s3:LocationConstraint": "sa-east-1" } } } ] }
Verificate la politica con AWS CLI

È possibile testare la politica utilizzando il seguente create-bucket AWS CLI comando. Questo esempio utilizza il file bucketconfig.txt per specificare il vincolo di posizione. Annotate il percorso Windows del file. È necessario aggiornare il nome del bucket e il percorso come opportuno. È necessario fornire le credenziali utente utilizzando il parametro --profile. Per ulteriori informazioni sulla configurazione e l'utilizzo di AWS CLI, vedereSviluppo con Amazon S3 tramite la AWS CLI.

aws s3api create-bucket --bucket examplebucket --profile AccountADave --create-bucket-configuration file://c:/Users/someUser/bucketconfig.txt

Il file bucketconfig.txt specifica la configurazione come segue:

{"LocationConstraint": "sa-east-1"}