Esempio 4 - Proprietario di un bucket che concede un'autorizzazione multi-account agli oggetti di cui non è proprietario - Amazon Simple Storage Service

Esempio 4 - Proprietario di un bucket che concede un'autorizzazione multi-account agli oggetti di cui non è proprietario

In questo esempio, sei proprietario di un bucket e hai abilitato altri Account AWS per il caricamento di oggetti. Se è stata applicata l'impostazione proprietario del bucket applicato per S3 Object Ownership per il bucket, si avrà proprietà di tutti gli oggetti nel bucket, inclusi gli oggetti scritti da un altro Account AWS. Questo approccio risolve il problema che gli oggetti non sono di proprietà dell'utente, il proprietario del bucket. Quindi, puoi delegare le autorizzazioni agli utenti nel tuo account o ad altri Account AWS. Supponiamo che l'impostazione proprietario del bucket applicato per S3 Object Ownership non sia abilitata. In altre parole, il bucket può avere oggetti di proprietà di altri Account AWS.

Ora, si supponga che, in qualità di proprietario del bucket, si debbano concedere autorizzazioni multiaccount per gli oggetti a un utente di un altro account, indipendentemente dall'utente a cui appartengono. Ad esempio, l'utente potrebbe essere un'applicazione per la fatturazione che deve accedere ai metadata dell'oggetto. Esistono due problemi principali:

  • Il proprietario del bucket non dispone delle autorizzazioni per gli oggetti creati dagli altri Account AWS. Affinché il proprietario del bucket possa concedere autorizzazioni su oggetti che non possiede, il proprietario dell'oggetto deve prima concedere l'autorizzazione al proprietario del bucket. Il proprietario dell'oggetto è Account AWS che ha creato gli oggetti. Il proprietario del bucket può quindi delegare tali autorizzazioni.

  • L'account proprietario del bucket può delegare le autorizzazioni agli utenti del proprio account (consulta Esempio 3: il proprietario del bucket concede autorizzazioni per gli oggetti che non sono di sua proprietà). Tuttavia, l'account proprietario del bucket non può delegare le autorizzazioni ad altri Account AWS perché la delega tra account non è supportata.

In questo scenario, il proprietario del bucket può creare un ruolo AWS Identity and Access Management (IAM) con il permesso di accedere agli oggetti Poi, il proprietario del bucket può concedere a un altro Account AWS il permesso di assumere il ruolo, abilitandolo temporaneamente ad accedere agli oggetti del bucket.

Nota

S3 Proprietà dell'oggetto è un'impostazione a livello di bucket Amazon S3 che è possibile utilizzare per controllare la proprietà degli oggetti caricati nel bucket e per disabilitare o abilitare le liste di controllo degli accessi (ACL). Per impostazione predefinita, Proprietà dell'oggetto è impostata su Proprietario del bucket applicato e tutte le liste di controllo degli accessi (ACL) sono disabilitate. Quando le ACL sono disabilitate, il proprietario del bucket dispone di tutti gli oggetti nel bucket e gestisce l'accesso ad essi in maniera esclusiva utilizzando policy di gestione dell'accesso.

La maggior parte degli attuali casi d'uso in Amazon S3 non richiede più l'uso delle ACL. È consigliabile mantenere le ACL disabilitate, tranne nelle circostanze in cui è necessario controllare individualmente l’accesso per ciascun oggetto. Con le ACL disabilitate, puoi utilizzare le policy per controllare l'accesso a tutti gli oggetti nel bucket, a prescindere da chi ha caricato gli oggetti nel bucket. Per ulteriori informazioni, consulta Controllo della proprietà degli oggetti e disabilitazione degli ACL per il bucket.

Comprendere le autorizzazioni multi-account e utilizzare i ruoli IAM

I ruoli IAM consentono diversi scenari per la delega dell'accesso alle risorse. Uno degli scenari principali è l'accesso multiaccount. In questo esempio, il proprietario del bucket, l'account A, utilizza un ruolo IAM per delegare temporaneamente l'accesso agli oggetti da un account all'altro agli utenti di un altro Account AWS, l'account C. A ogni ruolo IAM creato sono associate le due seguenti policy:

  • Una policy di attendibilità per l'identificazione di un altro Account AWS che può assumere il ruolo.

  • Una policy di accesso per la definizione delle autorizzazioni consentite quando qualcuno assume il ruolo, ad esempio s3:GetObject. Per un elenco delle autorizzazioni che è possibile specificare in una policy, consulta Azioni di policy per Amazon S3.

L'Account AWS identificato nella policy di attendibilità a questo punto garantisce all'utente l'autorizzazione per assumere il ruolo. L'utente può quindi accedere agli oggetti nel modo seguente:

  • Assumere il ruolo e, in risposta, ottenere le credenziali di sicurezza temporanee.

  • Accedere agli oggetti nel bucket utilizzando le credenziali di sicurezza temporanee.

Per ulteriori informazioni sui ruoli IAM, consulta Ruoli IAM nella Guida per l'utente di IAM.

Di seguito è riportato un riepilogo delle fasi della procedura:

Autorizzazioni multi-account utilizzando i ruoli IAM.
  1. L'utente amministratore dell'account A collega una policy di bucket che concede all'Account B un'autorizzazione condizionale per caricare gli oggetti.

  2. L'amministratore dell'Account A crea un ruolo IAM per stabilire l'attendibilità con l'Account C, pertanto gli utenti in quell'account possono accedere all'Account A. La policy di accesso collegata al ruolo limita le operazioni consentite all'utente nell'Account C quando accede all'Account A.

  3. L'amministratore dell'Account B carica un oggetto nel bucket di proprietà dell'Account A, concedendo al proprietario del bucket un'autorizzazione al controllo completo.

  4. L'amministratore dell'account C crea un utente e collega una policy utente che gli consente di assumere il ruolo.

  5. L'utente nell'Account C per prima cosa assume il ruolo, che restituisce all'utente credenziali di sicurezza temporanee. Mediante tali credenziali temporanee, l'utente accede quindi agli oggetti nel bucket.

Per questo esempio sono necessari tre account. La tabella seguente mostra come viene fatto riferimento a questi account e agli utenti amministratori degli account: In conformità con le linee guida IAM (consulta Informazioni sull'uso di un utente amministratore per creare risorse e concedere autorizzazioni), in questa guida non utilizzeremo le credenziali Utente root dell'account AWS. Viene invece creato un utente amministratore in ciascun account e le credenziali vengono utilizzate per la creazione di risorse e per concedere autorizzazioni a tali risorse.

Account AWSID Account denominato Utente amministratore nell'account

1111-1111-1111

Account A

AccountAadmin

2222-2222-2222

Account B

AccountBadmin

3333-3333-3333

Account C

AccountCadmin

Fase 0: preparazione della procedura guidata

Nota

Si consiglia di aprire un editor di testo e di annotare alcune informazioni man mano che si procede. In particolare, è necessario disporre di ID account, ID utenti canonici, URL di accesso utente IAM per la connessione di ciascun account alla console, Amazon Resource Names (ARN) degli utenti IAM e ruoli.

  1. Assicurati di avere tre Account AWS e che ogni account abbia un utente amministratore, come mostrato nella tabella della sezione precedente.

    1. Registrare un Account AWS, se necessario. Si fa riferimento a questi account come Account A, Account B e Account C.

    2. Utilizzando le credenziali dell'Account A, accedere alla console IAM ed effettuare quanto segue per creare un utente amministratore:

      • Crea l'utente AccountAadmin e prendi nota delle sue credenziali di sicurezza. Per ulteriori informazioni sull'aggiunta di utenti, consulta Creazione di un utente IAM nell'Account AWS nella Guida per l'utente di IAM.

      • Concedere i privilegi di amministratore ad AccountAadmin allegando una policy utente che dia accesso completo. Per istruzioni, consulta Gestione delle policy IAM nella Guida all'utente IAM.

      • Nella Dashboard della Console IAM, annota l'URL di accesso dell'utente IAM. Gli utenti di questo account devono utilizzare questo URL per accedere alla Console di gestione AWS. Per ulteriori informazioni, consulta Accesso a Console di gestione AWS come utente IAM nella Guida all'utente IAM.

    3. Ripetere la fase precedente per creare utenti amministratore nell'Account B e nell'Account C.

  2. Per l'account C, annota l'ID utente canonico.

    Quando si crea un ruolo IAM nell'Account A, la policy di attendibilità concede all'Account C l'autorizzazione per assumere il ruolo mediante la specifica dell'ID account. È possibile trovare informazioni sull'account come indicato di seguito:

    1. Utilizza l'ID o l'alias dell'account Account AWS, il nome utente IAM e la password per accedere alla console Amazon S3.

    2. Scegliere il nome di un bucket Amazon S3 per visualizzare i relativi dettagli.

    3. Selezionare la scheda Permissions (Autorizzazioni) e selezionare Access Control List (Lista di controllo accessi).

    4. Nella sezione Accesso per il tuo Account AWS, nella colonna Account è presente un identificatore lungo, come c1daexampleaaf850ea79cf0430f33d72579fd1611c97f7ded193374c0b163b6. Questo è il tuo ID utente canonico.

  3. Quando si crea una policy di bucket, è necessario disporre delle informazioni seguenti. Osserva questi valori:

    • ID utente canonico dell'Account A – Quando l'amministratore dell'Account A concede all'amministratore dell'Account B l'autorizzazione condizionale per il caricamento degli oggetti, la condizione specifica l'ID utente canonico dell'utente dell'Account A che deve ottenere controllo completo degli oggetti.

      Nota

      L'ID utente canonico è un concetto esclusivo di Amazon S3. Si tratta di una versione offuscata dell'ID account, composta da 64 caratteri.

    • ARN dell'utente per l'amministratore dell'account B - È possibile trovare l'ARN dell'utente nella Console IAM. È necessario selezionare l'utente e trovare l'ARN dell'utente nella scheda Riepilogo.

      Nella policy del bucket, si concede a AccountBadmin l'autorizzazione a caricare oggetti e si specifica l'utente utilizzando l'ARN. Ecco un esempio di valore ARN:

      arn:aws:iam::AccountB-ID:user/AccountBadmin
  4. Imposta AWS Command Line Interface (CLI) o AWS Tools for Windows PowerShell. Assicurati di salvare le credenziali dell'utente amministratore come segue:

    • Se si utilizza AWS CLI, creare i profili AccountAadmin e AccountBadmin nel file di configurazione.

    • Se si utilizza AWS Tools for Windows PowerShell, assicurati di memorizzare le credenziali per la sessione come AccountAadmin e AccountBadmin.

    Per istruzioni, consulta Impostazione degli strumenti per le visite guidate.

Fase 1: eseguire le attività per l'Account A

In questo esempio, l'Account A è il proprietario del bucket. Quindi l'utente AccountAadmin nell'account A eseguirà le seguenti operazioni:

  • Creare un bucket.

  • Allega una policy del bucket che conceda all'amministratore dell'account B l'autorizzazione a caricare oggetti.

  • Crea un ruolo IAM che conceda all'account C l'autorizzazione ad assumere il ruolo in modo da poter accedere agli oggetti del bucket.

Fase 1.1: accesso alla Console di gestione AWS

Utilizzando l'URL di accesso dell'utente IAM per l'account A, accedi prima a Console di gestione AWS come utente AccountAadmin. Questo utente creerà un bucket e vi allegherà una policy.

Fase 1.2: creare un bucket e allegarlo alla policy di bucket

Nella console di Amazon S3 effettuare quanto segue:

  1. Creare un bucket. In questo esercizio si presume che il nome del bucket sia amzn-s3-demo-bucket1.

    Per istruzioni, consulta Creazione di un bucket per uso generico.

  2. Allega la seguente policy del bucket. La policy concede all'amministratore dell'account B l'autorizzazione condizionata a caricare gli oggetti.

    Aggiorna la policy fornendo valori personalizzati per amzn-s3-demo-bucket1, AccountB-ID, e CanonicalUserId-of-AWSaccountA-BucketOwner.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "111", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" }, { "Sid": "112", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::111122223333:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition": { "StringNotEquals": { "s3:x-amz-grant-full-control": "id=CanonicalUserId-of-AWSaccountA-BucketOwner" } } } ] }

Fase 1.3: Creare un ruolo IAM per consentire all'account C l'accesso multi-account all'account A

Nella Console IAM, crea un ruolo IAM (examplerole) che conceda all'account C l'autorizzazione ad assumere il ruolo. Assicurati di aver effettuato l'accesso come amministratore dell'account A, poiché il ruolo deve essere creato nell'account A.

  1. Prima di creare il ruolo, preparare la policy gestita che definisce le autorizzazioni richieste dal ruolo. La policy verrà collegata al ruolo in una fase successiva.

    1. Nel riquadro di navigazione a sinistra, seleziona Policy e poi Crea policy.

    2. Accanto a Create Your Own Policy (Crea la tua policy) scegli Select (Seleziona).

    3. Immettere access-accountA-bucket nel campo Policy Name (Nome policy).

    4. Copiare la seguente policy di accesso e incollarla nel campo Policy Document (Documento policy). La policy di accesso concede l'autorizzazione al ruolo s3:GetObject, quindi, quando l'utente Account C assume il ruolo, può eseguire solo l'operazione s3:GetObject.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*" } ] }
    5. Scegli Crea policy.

      La nuova policy viene inserita nell'elenco delle policy gestite.

  2. Nel riquadro di navigazione a sinistra, scegli Ruoli e quindi Crea nuovo ruolo.

  3. In Seleziona tipo di ruolo, seleziona Ruolo per l'accesso multi-account, quindi scegli il pulsante Seleziona accanto a Fornisci l'accesso tra Account AWS di proprietà.

  4. Immettere l'ID account dell'Account C.

    Per questa guida, non è necessario richiedere agli utenti l'autenticazione a più fattori (MFA) per assumere il ruolo, quindi lasciare l'opzione deselezionata.

  5. Scegli Fase successiva per impostare le autorizzazioni associate al ruolo.

  6. Seleziona la casella di controllo accanto alla policy access-accountA-bucket creata, quindi scegli Fase successiva.

    Viene visualizzata la pagina Review (Revisione) che consente di confermare le impostazioni per il ruolo prima che venga creato. Questa pagina contiene una voce molto importante, ossia il collegamento che è possibile inviare agli utenti che hanno necessità di utilizzare questo ruolo. Gli utenti che utilizzano il link accedono direttamente alla pagina Cambia ruolo con i campi ID account e Nome ruolo già compilati. Questo link è visibile anche in seguito nella pagina di riepilogo dei ruoli per qualsiasi multi-account.

  7. Immetti examplerole per il nome del ruolo, quindi scegli Fase successiva.

  8. Dopo aver esaminato il ruolo, scegli Crea ruolo.

    Il ruolo examplerole viene visualizzato nell'elenco dei ruoli.

  9. Scegli il nome del ruolo examplerole.

  10. Selezionare la scheda Trust Relationships (Relazioni di trust).

  11. Scegli Mostra documento della policy e verifica che la policy di attendibilità mostrata corrisponda alla policy seguente.

    Le seguente policy di attendibilità stabilisce l'attendibilità con l'Account C, consentendogli di eseguire l'operazione sts:AssumeRole. Per ulteriori informazioni, consulta AssumeRole nella documentazione di riferimento dell'API AWS Security Token Service.

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:root" }, "Action": "sts:AssumeRole" } ] }
  12. Osserva il nome della risorsa Amazon (ARN) del ruolo examplerole creato.

    Nelle fasi successive verrà illustrato come allegare una policy utente per consentire all'utente IAM di assumere questo ruolo e come identificare il ruolo mediante il valore ARN.

Fase 2: esecuzione delle attività per l'Account B

Il bucket di esempio di proprietà dell'Account A necessita di oggetti di proprietà di altri account. In questa fase, l'amministratore dell'Account B carica un oggetto mediante gli strumenti a riga di comando.

  • Utilizzando il comando put-object della AWS CLI, caricare un oggetto in amzn-s3-demo-bucket1.

    aws s3api put-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --body HappyFace.jpg --grant-full-control id="canonicalUserId-ofTheBucketOwner" --profile AccountBadmin

    Tieni presente quanto segue:

    • Il parametro --Profile specifica il profilo AccountBadmin, quindi l'oggetto è di proprietà dell'account B.

    • Il parametro grant-full-control concede al proprietario del bucket l'autorizzazione al controllo completo sull'oggetto, come richiesto dalla policy di bucket.

    • Il parametro --body identifica il file di origine da caricare. Ad esempio, se il file si trova nell'unità C: di un computer Windows, si specifica c:\HappyFace.jpg.

Fase 3: Eseguire le attività dell'Account C

Nei passaggi precedenti, l'account A ha già creato un ruolo, examplerole, che stabilisce un rapporto di attendibilità con l'account C. Questo ruolo consente agli utenti dell'account C di accedere all'account A. In questo passaggio, l'amministratore dell'account C crea un utente (Dave) e gli delega il permesso sts:AssumeRole ricevuto dall'account A. Questo approccio consente a Dave di assumere il ruolo examplerole e di ottenere temporaneamente l'accesso all'account A. La policy di accesso che l'account A ha collegato al ruolo limita ciò che Dave può fare quando accede all'account A, in particolare ottenere oggetti in amzn-s3-demo-bucket1.

Fase 3.1: Creare un utente nel conto C e delegare l'autorizzazione ad assumere examplerole

  1. Utilizzando l'URL di accesso dell'utente IAM per l'account C, accedi prima a Console di gestione AWS come utente AccountCadmin.

  2. Nella console IAM, crea un utente, Dave.

    Per istruzioni dettagliate, consulta Creazione di utenti IAM (Console di gestione AWS) nella Guida all'utente IAM.

  3. Annota le credenziali di Dave. Dave dovrà utilizzare queste credenziali per assumere il ruolo examplerole.

  4. Crea una policy in linea per l'utente IAM Dave per delegare a Dave l'autorizzazione sts:AssumeRole sul ruolo examplerole nell'account A.

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

    2. Scegli il nome utente Dave.

    3. Nella pagina dei dettagli dell'utente, selezionare la scheda Permissions (Autorizzazioni), quindi espandere la sezione Inline Policies (Policy inline).

    4. Scegliere click here (fai clic qui) oppure Create User Policy (Crea policy di utente).

    5. Scegliere Custom Policy (Policy personalizzata) quindi Select (Seleziona).

    6. Immettere un nome per la policy nel campo Policy Name (Nome policy).

    7. Copiare la seguente policy nel campo Policy Document (Documento policy).

      È necessario aggiornare la policy fornendo AccountA-ID.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::111122223333:role/examplerole" } ] }
    8. Scegli Apply Policy (Applica policy).

  5. Salva le credenziali di Dave nel file di configurazione di AWS CLI aggiungendo un altro profilo, AccountCDave.

    [profile AccountCDave] aws_access_key_id = UserDaveAccessKeyID aws_secret_access_key = UserDaveSecretAccessKey region = us-west-2

Fase 3.2: Assumere il ruolo (examplerole) e accedere agli oggetti

Ora Dave può accedere agli oggetti nel bucket di proprietà dell'Account A nel modo seguente:

  • Per prima cosa, Dave assume il ruolo examplerole utilizzando le sue credenziali personali. Questa operazione restituirà le credenziali temporanee.

  • Dave utilizzerà le credenziali temporanee per accedere agli oggetti nel bucket dell'Account A.

  1. Al prompt dei comandi, esegui il seguente comando AWS CLI assume-role utilizzando il profilo AccountCDave.

    È necessario aggiornare il valore ARN nel comando fornendo l'AccountA-ID dove è definito examplerole.

    aws sts assume-role --role-arn arn:aws:iam::AccountA-ID:role/examplerole --profile AccountCDave --role-session-name test

    In risposta, AWS Security Token Service (AWS STS) restituisce le credenziali di sicurezza temporanee (ID della chiave di accesso, chiave di accesso segreta e un token di sessione).

  2. Salva le credenziali di sicurezza temporanee nel file di configurazione della AWS CLI sotto il profilo TempCred.

    [profile TempCred] aws_access_key_id = temp-access-key-ID aws_secret_access_key = temp-secret-access-key aws_session_token = session-token region = us-west-2
  3. Al prompt dei comandi, esegui il comando della AWS CLI per accedere all'oggetto utilizzando le credenziali temporanee. Ad esempio, il comando specifica l'API head-object per recuperare i metadata dell'oggetto per l'oggetto HappyFace.jpg.

    aws s3api get-object --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg SaveFileAs.jpg --profile TempCred

    Dal momento che la policy di accesso collegata a examplerole consente l'esecuzione delle operazioni, Amazon S3 elabora la richiesta. È possibile provare ad eseguire un'altra operazione su qualsiasi altro oggetto nel bucket.

    Se si tenta un'altra azione, ad esempio get-object-acl, l'autorizzazione sarà negata perché il ruolo non è autorizzato a eseguire tale azione.

    aws s3api get-object-acl --bucket amzn-s3-demo-bucket1 --key HappyFace.jpg --profile TempCred

    È stato utilizzato l'utente Dave per assumere il ruolo e accedere all'oggetto mediante le credenziali temporanee. L'accesso agli oggetti in può essere effettuato anche da un'applicazione nell'Account amzn-s3-demo-bucket1. L'applicazione può ottenere credenziali di sicurezza temporanee e l'Account C può delegare all'applicazione le autorizzazioni per assumere examplerole.

Fase 4: pulizia

  1. Una volta terminato il test, è possibile eseguire le seguenti operazioni di pulizia:

    1. Accedi alla Console di gestione AWS utilizzando le credenziali dell'Account A e procedere come di seguito:

      • Nella console di Amazon S3 rimuovere la policy del bucket collegata a amzn-s3-demo-bucket1. Nelle Proprietà del bucket, elimina la policy nella sezione Autorizzazioni.

      • Se il bucket è stato creato per questo esercizio, nella console di Amazon S3 eliminare gli oggetti e quindi il bucket.

      • Nella Console IAM, rimuovi l'indirizzo examplerole creato nell'account A. Per istruzioni dettagliate, consulta Eliminazione di un utente IAM nella Guida all'utente IAM.

      • Nella Console IAM, rimuovi l'utente AccountAadmin.

  2. Accedi alla Console IAM utilizzando le credenziali dell'account B. Elimina l'utente AccountBadmin.

  3. Accedi alla Console IAM utilizzando le credenziali dell'Account C. Elimina AccountCadmin e l'utente Dave.

Risorse correlate

Per ulteriori informazioni relative a questa guida, consulta le seguenti risorse nella Guida all'utente IAM: