Procedura guidata: controllo dell'accesso a un bucket con policy utente - Amazon Simple Storage Service

Procedura guidata: controllo dell'accesso a un bucket con policy utente

Questa spiegazione passo per passo illustra il funzionamento delle autorizzazioni utente con Amazon S3. In questo esempio, viene creato un bucket con cartelle. Vengono quindi creati gli utenti AWS Identity and Access Management (IAM) nell'Account AWS concedendo agli stessi determinate autorizzazioni incrementali al bucket Amazon S3 e alle cartelle in esso contenute.

Principi di base relativi a bucket e cartelle

Il modello di dati di Amazon S3 è una struttura flat: crei un bucket e il bucket archivia gli oggetti. Non c'è nessuna gerarchia di bucket secondari o sottocartelle, ma è possibile emulare una gerarchia delle cartelle. Strumenti come la console Amazon S3 possono presentare una panoramica di queste cartelle e sottocartelle logiche nel bucket, come mostrato nell'immagine seguente.


                Screenshot della console che mostra una gerarchia di bucket, cartelle e oggetti.

La console mostra che un bucket denominato companybucket ha tre cartelle, Private, Development e Finance e un oggetto, s3-dg.pdf. La console utilizza i nomi oggetto (chiavi) per creare una gerarchia logica con cartelle e sottocartelle. Considerare i seguenti esempi:

  • Quando crei la cartella Development, la console crea un oggetto con la chiave Development/. Nota il delimitatore finale '/' (/).

  • Quando carichi un oggetto denominato Projects1.xls nella cartella Development, la console carica l'oggetto e gli assegna la chiave Development/Projects1.xls.

    Nella chiave, Development è il prefisso e / è il delimitatore. L'API Amazon S3 supporta prefissi e delimitatori nelle operazioni. Ad esempio, è possibile ottenere un elenco di tutti gli oggetti da un bucket con un prefisso e un delimitatore specifici. Nella console, quando apri la cartella Development, viene visualizzato un elenco degli oggetti in essa contenuti. Nell'esempio seguente, la cartella Development contiene un solo oggetto.

     

    
                        Screenshot della console che mostra una gerarchia di bucket, cartelle e oggetti.

     

    Quando la console visualizza la cartella Development nel bucket companybucket, invia una richiesta ad Amazon S3 in cui specifica un prefisso Development e un delimitatore /. La risposta della console si presenta proprio come un elenco di cartelle nel file system del computer. L'esempio precedente mostra che il bucket companybucket ha un oggetto con la chiave Development/Projects1.xls.

La console utilizza le chiavi degli oggetti per dedurre una gerarchia logica. Amazon S3 non ha una gerarchia fisica, ma solo bucket che contengono oggetti in una struttura di file flat. Quando si creano oggetti utilizzando l'API Amazon S3, è possibile utilizzare le chiavi degli oggetti che implicano una gerarchia logica. Quando viene creata una gerarchia logica di oggetti, è possibile gestire l'accesso alle singole cartelle, come dimostrato in questa procedura guidata.

Prima di iniziare, assicurarsi di acquisire familiarità con il concetto di contenuto di un bucket a livello di root. Si supponga che il bucket companybucket abbia i seguenti oggetti:

  • Private/privDoc1.txt

  • Private/privDoc2.zip

  • Development/project1.xls

  • Development/project2.xls

  • Finance/Tax2011/document1.pdf

  • Finance/Tax2011/document2.pdf

  • s3-dg.pdf

Queste chiavi degli oggetti creano una gerarchia logica con Private, Development e Finance come cartelle a livello root e s3-dg.pdf come un oggetto a livello root. Quando si sceglie il nome di un bucket nella console Amazon S3, le voci a livello root vengono visualizzate come nell'immagine seguente. La console mostra i prefissi di livello superiore (Private/, Development/ e Finance/) come cartelle a livello di root. La chiave dell'oggetto s3-dg.pdf non ha prefisso e quindi appare come voce a livello root.


                Screenshot della console della scheda oggetti con l'oggetto s3-dg.pdf nell'elenco.

Riepilogo della procedura guidata

In questa procedura guidata, creare un bucket con tre cartelle (Private, Development e Finance) al suo interno.

Ci sono due utenti, Alice e Bob. Alice deve accedere solo alla cartella Development, mentre Bob deve accedere solo alla cartella Finance. Il contenuto della cartella Private deve essere mantenuto privato. Nella spiegazione passo per passo l'accesso viene gestito creando utenti IAM (nell'esempio vengono utilizzati i nomi utente Alice e Bob) e concedendo le autorizzazioni necessarie.

IAM supporta inoltre la creazione di gruppi di utenti e la concessione di autorizzazioni a livello di gruppo valide per tutti gli utenti presenti nel gruppo. In questo modo è possibile gestire le autorizzazioni in modo più efficiente. Per questo esercizio sia Alice che Bob hanno bisogno di autorizzazioni comuni. Pertanto, verrà creato anche un gruppo denominato Consultants e Alice e Bob saranno aggiunti al gruppo. Inizialmente, le autorizzazioni vengono assegnate collegando una policy di gruppo al gruppo stesso. Quindi, vengono aggiunte autorizzazioni specifiche per gli utenti collegando le policy agli utenti specifici.

Nota

La spiegazione passo per passo utilizza companybucket come nome del bucket, Alice e Bob come utenti IAM e Consultants come nome del gruppo. Poiché Amazon S3 richiede che i nomi di bucket siano univoci a livello globale, è necessario sostituire il nome del bucket con un nome personalizzato.

Preparazione della procedura guidata

In questo esempio vengono utilizzate le credenziali del tuo Account AWS per creare utenti IAM. Inizialmente, questi utenti non hanno autorizzazioni. Le autorizzazioni vengono concesse in modo incrementale per l'esecuzione di operazioni di Amazon S3 specifiche. Per testare queste autorizzazioni, viene effettuato l'accesso alla console con le credenziali di ciascun utente. Quando concedi autorizzazioni incrementali come proprietario dell'Account AWS e le testi come utente IAM, devi ogni volta effettuare l'accesso e la disconnessione utilizzando credenziali differenti. È possibile eseguire questo test con un browser, ma il processo sarà più rapido se è possibile utilizzare due browser diversi. Utilizza un browser per connetterti alla AWS Management Console con le tue credenziali Account AWS e un altro per connetterti con le credenziali dell'utente IAM.

Per accedere alla AWS Management Console con le credenziali Account AWS, passa a https://console.aws.amazon.com/. Un utente IAM non può accedere utilizzando lo stesso collegamento. Un utente IAM deve utilizzare una pagina di accesso abilitata per IAM. Come proprietario dell'account, è possibile fornire questo link agli utenti.

Per ulteriori informazioni su IAM, consulta la pagina di accesso alla AWS Management Console nella Guida per l'utente di IAM.

Per fornire un collegamento di accesso agli utenti IAM

  1. Accedi alla AWS Management Console e apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel riquadro Navigation (Navigazione) scegliereIAM Dashboard (Pannello di controllo IAM).

  3. Prendere nota dell'URL in IAM users sign in link (Collegamento di accesso utenti IAM). Sarà necessario fornire questo collegamento agli utenti IAM affinché possano accedere alla console con il loro nome utente e la loro password IAM.

Fase 1: creazione di un bucket

In questa fase viene eseguito l'accesso alla console Amazon S3 con le credenziali dell'Account AWS, viene creato un bucket, vengono aggiunte cartelle (Development, Finance e Private) al bucket e vengono caricati uno o due documenti di esempio in ogni cartella.

  1. Accedi alla AWS Management Console e apri la console Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

  2. Creare un bucket.

    Per istruzioni dettagliate, consulta Creazione di un bucket.

  3. Caricare un documento nel bucket.

    Questo esercizio presume che il documento s3-dg.pdf si trovi a livello root di questo bucket. Se viene caricato un documento differente, è necessario sostituire il nome file con s3-dg.pdf.

  4. Aggiungere tre cartelle denominate Private, Finance e Development al bucket.

    Per istruzioni dettagliate sulla creazione di una cartella, consulta Organizzazione degli oggetti nella console Amazon S3 utilizzando le cartelle> nella Guida per l'utente di Amazon Simple Storage Service.

  5. Caricare uno o due documenti in ciascuna cartella.

    Per questo esercizio, si presume che siano stati caricati un paio di documenti in ciascuna cartella, in modo che il bucket abbia oggetti con le seguenti chiavi:

    • Private/privDoc1.txt

    • Private/privDoc2.zip

    • Development/project1.xls

    • Development/project2.xls

    • Finance/Tax2011/document1.pdf

    • Finance/Tax2011/document2.pdf

    • s3-dg.pdf

    Per istruzioni dettagliate, consulta Caricamento degli oggetti.

Fase 2: creazione di un gruppo e di utenti IAM

A questo punto, utilizza la console IAM per aggiungere due utenti IAM, Alice e Bob, al tuo Account AWS. Inoltre, creare un gruppo amministrativo denominato Consultants e aggiungere entrambi gli utenti al gruppo.

avvertimento

Quando si aggiungono utenti e un gruppo, non collegare alcuna policy che assegni autorizzazioni agli utenti. Inizialmente, questi utenti non dispongono di alcuna autorizzazione. Nelle sezioni seguenti, le autorizzazioni vengono concesse in modo incrementale. In primo luogo, devi accertarti di avere assegnato le password a questi utenti IAM. Queste credenziali utente vengono utilizzate per testare le operazioni di Amazon S3 e verificare che le autorizzazioni funzionino come previsto.

Per istruzioni dettagliate sulla creazione di un nuovo utente IAM, consulta Creazione di un utente IAM nell'Account AWS nella Guida per l'utente di IAM. Quando crei gli utenti per questa procedura guidata, seleziona Accesso alla AWS Management Console e deseleziona Accesso programmatico.

Per istruzioni dettagliate sulla creazione di un gruppo amministrativo, consulta Creazione del primo utente e gruppo di amministrazione IAM nella Guida per l'utente di IAM.

Fase 3: verifica che gli utenti IAM non dispongano di autorizzazioni

Se stai utilizzando due browser, puoi ora utilizzare il secondo browser per effettuare l'accesso alla console con una delle credenziali utente IAM.

  1. Utilizzando il link di accesso dell'utente IAM (consulta Per fornire un collegamento di accesso agli utenti IAM), effettua l'accesso alla AWS Management Console utilizzando una delle credenziali utente IAM.

  2. Apri la console Amazon S3 su https://console.aws.amazon.com/s3/.

    Verificare il seguente messaggio della console che indica che l'accesso viene negato.

    
                        Screenshot della console che mostra un messaggio di errore di accesso negato.

Ora, è possibile iniziare a concedere le autorizzazioni incrementali agli utenti. Innanzitutto, collegare una policy di gruppo che concede le autorizzazioni necessarie per entrambi gli utenti.

Fase 4: concessione di autorizzazioni a livello di gruppo

Gli utenti devono essere in grado di effettuare quanto segue:

  • Elencare tutti i bucket di proprietà dell'account padre. A tale scopo, Bob e Alice devono avere l'autorizzazione per l'operazione s3:ListAllMyBuckets.

  • Elencare le voci, le cartelle e gli oggetti a livello root nel bucket companybucket. A tale scopo, Bob e Alice devono avere l'autorizzazione per l'operazione s3:ListBucket nel bucket companybucket.

Innanzitutto, creare una policy che concede tali autorizzazioni e quindi collegarla al gruppo Consultants.

Fase 4.1: concessione di autorizzazione per elencare tutti i bucket

In questa fase viene creata una policy gestita che concede agli utenti le autorizzazioni minime per consentire loro di elencare tutti i bucket di proprietà dell'account padre. Quindi, tale policy verrà collegata al gruppo Consultants. Quando si collega la policy gestita a un utente o a un gruppo, si concede all'utente o al gruppo l'autorizzazione per ottenere un elenco dei bucket di proprietà dell'Account AWS parent.

  1. Accedi alla AWS Management Console e apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

    Nota

    Poiché stai concedendo autorizzazioni utente, è necessario effettuare l'accesso con le credenziali dell'Account AWS, non come utente IAM.

  2. Creare la policy gestita.

    1. Nel riquadro di navigazione sulla sinistra, selezionare Policies (Policy) e scegliere Create Policy (Crea policy).

    2. Selezionare la scheda JSON.

    3. Copiare la policy di accesso seguente e incollarla nel campo di testo relativo alla policy.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": ["s3:ListAllMyBuckets"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] } ] }

      Una policy è un documento JSON. Nel documento, uno Statement è una serie di oggetti, ognuno dei quali descrive un'autorizzazione utilizzando un insieme di coppie di nome-valore. La suddetta policy descrive un'autorizzazione specifica. L'Action specifica il tipo di accesso. Nella policy, s3:ListAllMyBuckets è un'operazione di Amazon S3 predefinita. Questa operazione copre l'operazione GET Service di Amazon S3, che restituisce l'elenco di tutti i bucket di proprietà del mittente autenticato. Il valore dell'elemento Effect determina se un'autorizzazione specifica è consentita o rifiutata.

    4. Scegliere Review policy (Esamina policy). Nella pagina successiva, immettere AllowGroupToSeeBucketListInTheConsole nel campo Name (Nome), quindi scegliere Create policy (Crea policy).

      Nota

      La voce Summary (Riepilogo) visualizza un messaggio in cui si afferma che la policy non concede alcuna autorizzazione. Per questa procedura guidata, il messaggio può essere ignorato.

  3. Collegare la policy gestita AllowGroupToSeeBucketListInTheConsole che è stata creata al gruppo Consultants.

    Per istruzioni dettagliate su come collegare una policy gestita, consultare Aggiunta e rimozione di autorizzazioni per identità IAM nella Guida per l'utente di IAM.

    I documenti della policy vengono collegati agli utenti e ai gruppi IAM nella console IAM. Poiché entrambi gli utenti devono essere in grado di elencare i bucket, la policy deve essere collegata al gruppo.

  4. Testare l'autorizzazione.

    1. Utilizzando il collegamento di accesso utente IAM (consultare Per fornire un collegamento di accesso agli utenti IAM), accedere alla console con una delle credenziali utente IAM.

    2. Apri la console Amazon S3 su https://console.aws.amazon.com/s3/.

      La console ora dovrebbe elencare tutti i bucket, ma non gli oggetti contenuti in ogni bucket.

      
                                    Screenshot della console che mostra un elenco di bucket.

Fase 4.2: abilitazione degli utenti a elencare il contenuto di un bucket a livello root

Di seguito, consentire a tutti gli utenti nel gruppo Consultants di elencare le voci del bucket companybucket a livello root. Quando un utente sceglie il bucket aziendale nella console Amazon S3, può visualizzare le voci a livello root nel bucket.


                    Screenshot della console che mostra i contenuti del bucket aziendale.
Nota

Questo esempio utilizza companybucket a scopo illustrativo. È necessario utilizzare il nome del bucket che è stato creato.

Per comprendere la richiesta che la console invia ad Amazon S3 quando viene scelto un nome di bucket, la risposta restituita da Amazon S3 e il modo in cui la console interpreta la risposta, è necessario esaminarla in maniera più approfondita.

Quando viene scelto un nome di bucket, la console invia la richiesta GET Bucket (ListObjects) ad Amazon S3. Questa richiesta include i seguenti parametri:

  • Il parametro prefix che presenta una stringa vuota come valore.

  • Il delimiter parametro con / come valore.

Di seguito è riportata una richiesta di esempio.

GET ?prefix=&delimiter=/ HTTP/1.1 Host: companybucket.s3.amazonaws.com Date: Wed, 01 Aug 2012 12:00:00 GMT Authorization: AWS AKIAIOSFODNN7EXAMPLE:xQE0diMbLRepdf3YB+FIEXAMPLE=

Amazon S3 restituisce una risposta che include il seguente elemento <ListBucketResult/>.

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>companybucket</Name> <Prefix></Prefix> <Delimiter>/</Delimiter> ... <Contents> <Key>s3-dg.pdf</Key> ... </Contents> <CommonPrefixes> <Prefix>Development/</Prefix> </CommonPrefixes> <CommonPrefixes> <Prefix>Finance/</Prefix> </CommonPrefixes> <CommonPrefixes> <Prefix>Private/</Prefix> </CommonPrefixes> </ListBucketResult>

L'oggetto s3-dg.pdf della chiave non contiene il delimitatore barra (/) e Amazon S3 restituisce la chiave nell'elemento <Contents>. Tutte le altre chiavi nel bucket di esempio contengono tuttavia il delimitatore /. Amazon S3 raggruppa queste chiavi e restituisce un elemento <CommonPrefixes> per ciascuno dei diversi valori di prefisso Development/, Finance/ e Private/ che corrisponde a una sottostringa dall'inizio di queste chiavi alla prima occorrenza del delimitatore / specificato.

La console interpreta questo risultato e mostra le voci a livello root come tre cartelle e una chiave dell'oggetto.


                    Screenshot della console che mostra i contenuti del companybucket con tre cartelle e un file pdf.

Se Bob o Alice apre la cartella Development, la console invia la richiesta GET Bucket (ListObjects) ad Amazon S3 con i parametri prefix e delimiter impostati sui seguenti valori:

  • Il parametro prefix con il valore Development/.

  • Il parametro delimiter con il valore "/".

In risposta, Amazon S3 restituisce le chiavi degli oggetti che iniziano con il prefisso specificato.

<ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Name>companybucket</Name> <Prefix>Development</Prefix> <Delimiter>/</Delimiter> ... <Contents> <Key>Project1.xls</Key> ... </Contents> <Contents> <Key>Project2.xls</Key> ... </Contents> </ListBucketResult>

La console mostra le chiavi degli oggetti.


                    Screenshot della console che mostra la cartella Development contenente due file xls.

Ora, tornare alla concessione dell'autorizzazione agli utenti per elencare le voci del bucket a livello root. Per elencare il contenuto del bucket, gli utenti devono disporre dell'autorizzazione per chiamare l'operazione s3:ListBucket, come illustrato nella seguente dichiarazione di policy. Per fare in modo che possa essere visualizzato il contenuto a livello root, è necessario aggiungere una condizione per richiedere che gli utenti specifichino un oggetto prefix vuoto nella richiesta, ovvero gli utenti non sono autorizzati a fare doppio clic su alcuna cartella a livello root. Infine, aggiungere una condizione per esigere un accesso di tipo cartella imponendo che le richieste dell'utente includano il parametro delimiter con il valore "/".

{ "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } }

Quando si sceglie un bucket nella console Amazon S3, la console prima di tutto invia la richiesta GET Bucket location per individuare la Regione AWS in cui è distribuito il bucket. La console utilizza quindi l'endpoint specifico della regione per il bucket per inviare la richiesta GET Bucket (ListObjects). Di conseguenza, se gli utenti utilizzeranno la console, è necessario assegnare l'autorizzazione per l'operazione s3:GetBucketLocation come illustrato nella seguente dichiarazione di policy.

{ "Sid": "RequiredByS3Console", "Action": ["s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] }
Per consentire agli utenti di elencare il contenuto di un bucket a livello root
  1. Accedi alla AWS Management Console e apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

    Per accedere alla console, utilizzare le credenziali del tuo accesso Account AWS, non le credenziali di un utente IAM.

  2. Sostituire la policy gestita AllowGroupToSeeBucketListInTheConsole esistente che è collegata al gruppo Consultants con la seguente policy, che consente anche l'operazione s3:ListBucket. Ricordare di sostituire companybucket nella policy Resource con il nome del bucket.

    Per istruzioni dettagliate, consultare Modifica delle policy IAM nella Guida per l'utente di IAM. Quando si seguono le istruzioni dettagliate, accertarsi di seguire le fasi per l'applicazione delle modifiche a tutte le entità principali a cui è collegata la policy.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{ "s3:prefix":[""], "s3:delimiter":["/"] } } } ] }
  3. Test delle autorizzazioni aggiornate.

    1. Mediante il link di accesso dell'utente IAM (consulta Per fornire un collegamento di accesso agli utenti IAM), accedere alla AWS Management Console.

      Apri la console Amazon S3 su https://console.aws.amazon.com/s3/.

    2. Scegliere il bucket creato. La console mostra le voci del bucket a livello root. Se si sceglie qualsiasi cartella nel bucket, non sarà possibile visualizzare il contenuto della cartella perché le relative autorizzazioni non sono state ancora concesse.

      
                                    Screenshot della console che mostra il bucket aziendale contenente tre cartelle.

Questo test ha esito positivo quando gli utenti utilizzano la console Amazon S3. Quando si sceglie un bucket sulla console, l'implementazione della console invia una richiesta che include il parametro prefix con una stringa vuota come valore e il parametro delimiter con "/" come valore.

Fase 4.3: sintesi della policy di gruppo

L'effetto della policy di gruppo aggiunta è quello di concedere agli utenti IAM Alice e Bob le seguenti autorizzazioni minime:

  • Elencare tutti i bucket di proprietà dell'account padre.

  • Visualizzare le voci a livello root nel bucket companybucket.

Tuttavia, gli utenti ancora non possono fare molto. Di seguito, concedere autorizzazioni specifiche per utente, come segue:

  • Consentire a Alice di prendere e mettere oggetti nella cartella Development.

  • Consentite a Bob di prendere e mettere oggetti nella cartella Finance.

Per le autorizzazioni specifiche dell'utente, collegare una policy all'utente specifico, non al gruppo. Nella sezione seguente, ad Alice vengono concesse le autorizzazioni per lavorare nella cartella Development. È possibile ripetere le fasi per concedere un'autorizzazione simile a Bob per lavorare nella cartella Finance.

Fase 5: concessione di autorizzazioni specifiche all'utente IAM Alice

È necessario ora concedere autorizzazioni aggiuntive ad Alice in modo che possa vedere il contenuto della cartella Development per poter prendere e mettere oggetti nella stessa.

Fase 5.1: concessione dell'autorizzazione a elencare il contenuto della cartella Development all'utente IAM Alice

Affinché Alice possa elencare il contenuto della cartella Development, è necessario applicare una policy all'utente Alice che assegni l'autorizzazione per l'operazione s3:ListBucket sul bucket companybucket, purché la richiesta includa il prefisso Development/. Questa policy deve essere applicata solo all'utente Alice, pertanto viene utilizzata una policy inline. Per ulteriori informazioni sulle policy inline, consulta Policy gestite e policy inline nella Guida per l'utente di IAM.

  1. Accedi alla AWS Management Console e apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

    Per accedere alla console, utilizzare le credenziali del tuo accesso Account AWS, non le credenziali di un utente IAM.

  2. Creare una policy inline per concedere all'utente Alice l'autorizzazione per elencare il contenuto della cartella Development.

    1. Nel riquadro di navigazione sinistro, scegliere Users (Utenti).

    2. Scegliere il nome utente Alice.

    3. Nella pagina dei dettagli dell'utente, scegliere la scheda Permissions (Autorizzazioni), quindi selezionare Add inline policy (Aggiungi policy inline).

    4. Selezionare la scheda JSON.

    5. Copiare la policy seguente e incollarla nel campo di testo relativo alla policy.

      { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } } ] }
    6. Scegliere Review policy (Esamina policy). Nella pagina successiva, immettere un nome nel campo Name (Nome), quindi scegliere Create policy (Crea policy).

  3. Test della modifica apportata alle autorizzazioni di Alice:

    1. Mediante il link di accesso dell'utente IAM (consulta Per fornire un collegamento di accesso agli utenti IAM), accedere alla AWS Management Console.

    2. Apri la console Amazon S3 su https://console.aws.amazon.com/s3/.

    3. Nella console Amazon S3 verificare che Alice possa visualizzare l'elenco degli oggetti nella cartella Development/ del bucket.

      Quando l'utente sceglie la cartella /Development per visualizzare l'elenco degli oggetti in essa contenuti, la console Amazon S3 invia la richiesta ListObjects ad Amazon S3 con il prefisso /Development. Poiché all'utente è stata concessa l'autorizzazione per visualizzare l'elenco degli oggetti con il prefisso Development e il delimitatore /, Amazon S3 restituisce l'elenco degli oggetti con il prefisso della chiave Development/ e la console visualizza tale elenco.

      
                                    Screenshot della console che mostra la cartella Development contenente due file xls.

Fase 5.2: concessione delle autorizzazioni a recuperare e inserire oggetti nella cartella Development all'utente IAM Alice

Affinché Alice possa prendere e mettere oggetti nella cartella Development, ha bisogno di un'autorizzazione per chiamare le operazioni s3:GetObject e s3:PutObject. Le seguenti dichiarazioni di policy assegnano queste autorizzazioni purché la richiesta includa il parametro prefix con un valore di Development/.

{ "Sid":"AllowUserToReadWriteObjectData", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] }

  1. Accedi alla AWS Management Console e apri la console Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

    Per accedere alla console, utilizzare le credenziali del tuo accesso Account AWS, non le credenziali di un utente IAM.

  2. Modificare la policy inline creata nella fase precedente.

    1. Nel riquadro di navigazione sinistro, scegliere Users (Utenti).

    2. Scegliere il nome utente Alice.

    3. Nella pagina dei dettagli, scegliere la scheda Permissions (Autorizzazioni) ed espandere la sezione Inline Policies (Policy inline).

    4. Accanto al nome della policy creata nella fase precedente, scegliere Edit Policy (Modifica policy) .

    5. Copiare la seguente policy e incollarla nel campo di testo della policy, sostituendo la policy esistente.

      { "Version": "2012-10-17", "Statement":[ { "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } }, { "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] } ] }
  3. Test della policy aggiornata:

    1. Mediante il link di accesso dell'utente IAM (consulta Per fornire un collegamento di accesso agli utenti IAM), accedere alla AWS Management Console.

    2. Apri la console Amazon S3 su https://console.aws.amazon.com/s3/.

    3. Nella console Amazon S3 verificare che Alice possa aggiungere e scaricare un oggetto nella cartella Development.

Fase 5.3: rifiuto esplicito delle autorizzazioni relative a qualsiasi altra cartella del bucket per l'utente IAM Alice

L'utente Alice ora può elencare il contenuto del bucket companybucket a livello root. Inoltre, ora può prendere e mettere oggetti nella cartella Development. Se si vuole effettivamente limitare le autorizzazioni di accesso, è possibile rifiutare esplicitamente ad Alice l'accesso a qualsiasi altra cartella del bucket. Se esiste qualsiasi altra policy (policy di bucket o ACL) che assegna ad Alice l'accesso a eventuali altre cartelle del bucket, questo rifiuto esplicito sovrascrive tali autorizzazioni.

È possibile aggiungere la seguente istruzione alla policy utente di Alice, che prevede che tutte le richieste inviate da Alice ad Amazon S3 includano il parametro prefix, il cui valore può essere Development/* oppure una stringa vuota.

{ "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] }, "Null" : {"s3:prefix":false } } }

Esistono due espressioni condizionali nel blocco Condition. Il risultato di queste espressioni condizionali viene combinato utilizzando l'AND logico. Se entrambe le condizioni sono vere, il risultato della condizione combinata è vero. Poiché Effect in questa policy è Deny, quando Condition viene valutata true, gli utenti non saranno in grado di eseguire la Action specificata.

  • L'espressione condizionale Null assicura che le richieste provenienti da Alice includano il parametro prefix.

    Il parametro prefix richiede l'accesso di tipo cartella. Se viene inviata una richiesta senza il parametro prefix, Amazon S3 restituisce tutte le chiavi degli oggetti.

    Se la richiesta include il parametro prefix con un valore null, l'espressione restituisce il valore True, quindi tutta la Condition restituisce il valore True. È necessario consentire una stringa vuota come valore del parametro prefix. Da quanto detto in precedenza, ricordare che permettere una stringa nulla significa consentire ad Alice di recuperare le voci del bucket a livello root come fa la console nella precedente discussione. Per ulteriori informazioni, consulta Fase 4.2: abilitazione degli utenti a elencare il contenuto di un bucket a livello root.

  • L'espressione condizionale StringNotLike assicura che se il valore del parametro prefix viene specificato e non è Development/*, la richiesta ha esito negativo.

Seguire le fasi della sezione precedente e aggiornare nuovamente la policy inline creata per l'utente Alice.

Copiare la seguente policy e incollarla nel campo di testo della policy, sostituendo la policy esistente.

{ "Version": "2012-10-17", "Statement":[ { "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest", "Action":["s3:ListBucket"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket"], "Condition":{ "StringLike":{"s3:prefix":["Development/*"] } } }, { "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", "Action":["s3:GetObject", "s3:PutObject"], "Effect":"Allow", "Resource":["arn:aws:s3:::companybucket/Development/*"] }, { "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringNotLike": {"s3:prefix":["Development/*",""] }, "Null" : {"s3:prefix":false } } } ] }

Fase 6: concessione di autorizzazioni specifiche all'utente IAM Bob

È necessario ora assegnare a Bob l'autorizzazione per la cartella Finance. Seguire le fasi utilizzate precedentemente per assegnare le autorizzazioni ad Alice ma sostituire la cartella Development con la cartella Finance. Per istruzioni dettagliate, consulta Fase 5: concessione di autorizzazioni specifiche all'utente IAM Alice.

Fase 7: protezione della cartella Private (Privato)

In questo esempio, vi sono soltanto due utenti. Sono state concesse le autorizzazioni minime a livello di gruppo e quelle a livello di utente unicamente quando erano veramente necessarie delle autorizzazioni a livello di singolo utente. Questo approccio contribuisce ad alleggerire l'impegno necessario per gestire le autorizzazioni. Con l'aumento del numero degli utenti, la gestione delle autorizzazioni può diventare gravosa. Ad esempio, non vogliamo che alcun utente di questo esempio acceda al contenuto della cartella Private. Come è possibile accertarsi di non assegnare involontariamente l'autorizzazione a un utente? È necessario aggiungere una policy che rifiuti esplicitamente l'accesso alla cartella. Un rifiuto esplicito sovrascrive qualsiasi altra autorizzazione.

Per essere certi che la cartella Private resti privata, è possibile aggiungere le seguenti due dichiarazioni di rifiuto alla policy di gruppo:

  • Aggiungere la seguente dichiarazione per rifiutare esplicitamente qualsiasi operazione sulle risorse della cartella Private (companybucket/Private/*).

    { "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup", "Action": ["s3:*"], "Effect": "Deny", "Resource":["arn:aws:s3:::companybucket/Private/*"] }
  • Viene inoltre rifiutata l'autorizzazione a eseguire l'operazione di elenco degli oggetti quando la richiesta specifica il prefisso Private/. Nella console, se Bob o Alice apre la cartella Private, questa policy fa in modo che Amazon S3 restituisca una risposta di errore.

    { "Sid": "DenyListBucketOnPrivateFolder", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringLike":{"s3:prefix":["Private/"]} } }

Sostituire la policy del gruppo Consultants con una policy aggiornata che includa le precedenti dichiarazioni di rifiuto. Una volta applicata la policy aggiornata, nessuno degli utenti del gruppo può accedere alla cartella Private nel bucket.

  1. Accedi alla AWS Management Console e apri la console Amazon S3 all'indirizzo https://console.aws.amazon.com/s3/.

    Per accedere alla console, utilizzare le credenziali del tuo accesso Account AWS, non le credenziali di un utente IAM.

  2. Sostituire la policy gestita AllowGroupToSeeBucketListInTheConsole esistente che è collegata al gruppo Consultants con la seguente policy. È necessario ricordare di sostituire companybucket nella policy con il nome del bucket.

    Per istruzioni, consulta Modifica di policy gestite dal cliente (console) nella Guida per l'utente di IAM. Quando si seguono le istruzioni, osservare le indicazioni per l'applicazione delle modifiche a tutte le entità principali a cui è collegata la policy.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket", "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], "Effect": "Allow", "Resource": ["arn:aws:s3:::*"] }, { "Sid": "AllowRootLevelListingOfCompanyBucket", "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::companybucket"], "Condition":{ "StringEquals":{"s3:prefix":[""]} } }, { "Sid": "RequireFolderStyleList", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringNotEquals":{"s3:delimiter":"/"} } }, { "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup", "Action": ["s3:*"], "Effect": "Deny", "Resource":["arn:aws:s3:::companybucket/Private/*"] }, { "Sid": "DenyListBucketOnPrivateFolder", "Action": ["s3:ListBucket"], "Effect": "Deny", "Resource": ["arn:aws:s3:::*"], "Condition":{ "StringLike":{"s3:prefix":["Private/"]} } } ] }

Fase 8: Pulizia

Per effettuare la pulizia, è necessario aprire la console IAM e rimuovere gli utenti Alice e Bob. Per istruzioni dettagliate, consulta Eliminazione di un utente IAM nella Guida per l'utente di IAM.

Per essere certi che non vengano addebitati costi aggiuntivi per lo storage, è necessario eliminare anche gli oggetti e il bucket che è stato creato per questo esercizio.

Risorse correlate