Esempio 4: il proprietario del bucket concede autorizzazioni multiaccount per gli oggetti che non sono di sua proprietà - Amazon Simple Storage Service

Esempio 4: il proprietario del bucket concede autorizzazioni multiaccount per gli oggetti che non sono di sua proprietà

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 risolverà il problema qualora gli oggetti non appartengano al 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. Pertanto, per concedere le autorizzazioni agli oggetti che non gli appartengono, il proprietario dell'oggetto deve in primo luogo concedere le autorizzazioni al proprietario del bucket utilizzando l'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 nel proprio account (consulta Esempio 3: il proprietario del bucket concede autorizzazioni per gli oggetti che non sono di sua proprietà) ma non può delegare le autorizzazioni ad altri Account AWS in quanto la delega multiaccount non è supportata.

In questo scenario, il proprietario del bucket può creare un ruolo AWS Identity and Access Management (IAM) con l'autorizzazione per l'accesso agli oggetti e concedere a un altro Account AWS l'autorizzazione per assumere il ruolo, abilitandolo all'accesso temporaneo agli oggetti del bucket.

Nota

Per impostazione predefinita, quando un altro Account AWS carica un oggetto nel bucket S3, tale account (l'object writer) possiede l'oggetto, ne ha accesso e può concedere ad altri utenti l'accesso tramite ACL. È possibile utilizzare Object Ownership per modificare questo comportamento di default in modo che le ACL siano disabilitate e che tu, in qualità di proprietario del bucket, possieda automaticamente ogni oggetto nel tuo bucket. Di conseguenza, il controllo degli accessi per i tuoi dati è basato su policy, come policy IAM, policy bucket S3, policy endpoint del cloud privato virtuale (VPC) e policy di controllo dei servizi (SCP) di AWS Organizations.

La maggior parte dei casi d'uso moderni in Amazon S3 non richiede più l'uso di ACL ed è consigliabile disabilitarle tranne in circostanze straordinarie in cui è necessario controllare l'accesso individualmente per ciascun oggetto. Con Object Ownership, è possibile disabilitare le ACL e fare affidamento sulle policy per il controllo degli accessi. Quando si disabilitano le ACL, è possibile mantenere facilmente un bucket con oggetti caricati da diversi Account AWS. In qualità di proprietario del bucket, possiedi tutti gli oggetti nel bucket e puoi gestirne l'accesso utilizzando le policy. Per ulteriori informazioni, consulta Controllo della proprietà degli oggetti e disabilitazione degli ACL per il bucket.

Contesto: autorizzazioni multiaccount e utilizzo dei 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 multiaccount agli utenti di un altro Account AWS, l'Account C. Ad ogni ruolo IAM creato sono collegate due 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 Operazioni di 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 guidata:

  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: Per le linee guida IAM (vedere Informazioni sull'uso di un utente amministratore per creare risorse e concedere autorizzazioni) non vengono utilizzate le credenziali account root in questa procedura guidata. 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

ID Account AWS 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

È possibile aprire un editor di testo e annotare alcune informazioni mentre si procede con le varie fasi. 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. Verifica di disporre di tre Account AWS con un utente amministratore ciascuno, come illustrato 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.

      1. Passa a https://aws.amazon.com/s3/ e fai clic su Crea un account AWS.

      2. Seguire le istruzioni su schermo.

        AWS comunicherà via e-mail quando l'account è attivo e pronto all'uso.

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

      • Creare l'utente AccountAadmin e prendere nota delle 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 AccountAadmin collegando una policy utente per l'accesso completo. Per istruzioni, consulta Gestione di policy IAM nella Guida per l'utente di IAM.

      • Nella console IAM, nel Dashboard (Pannello di controllo) prendere nota dell'IAM User Sign-In URL (URL di accesso dell'utente IAM). Gli utenti di questo account devono utilizzare questo URL per accedere alla AWS Management Console. Per ulteriori informazioni, consulta la sezione In che modo gli utenti effettuano l'accesso al tuo account nella Guida per l'utente IAM.

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

  2. Per Account C, prendere nota dell'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 Account AWS o l'alias account, 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. Prendere nota di 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 utente per l'amministratore dell'Account B – È possibile trovare l'ARN utente nella console IAM. È necessario selezionare l'utente e trovare il relativo ARN nella scheda Summary (Riepilogo).

      Nella policy di bucket, è possibile concedere autorizzazioni di AccountBadmin per caricare gli oggetti e specificare l'utente che utilizza 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. Assicurarsi di salvare le credenziali dell'utente amministratore nel modo seguente:

    • Se utilizzi la AWS CLI, crea i profili AccountAadmin e AccountBadmin nel file di configurazione.

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

    Per istruzioni, consultare Configurazione degli strumenti per le procedure guidate di esempio.

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

In questo esempio, l'Account A è il proprietario del bucket. L'utente AccountAadmin nell'Account A creerà un bucket, collegherà una policy di bucket per concedere all'amministratore dell'Account B l'autorizzazione per caricare gli oggetti, quindi creerà un ruolo IAM per concedere all'Account C l'autorizzazione per assumere il ruolo, abilitandolo all'accesso agli oggetti del bucket.

Fase 1.1: accesso alla AWS Management Console

Mediante l'URL di accesso dell'utente IAM per l'Account A, per prima cosa accedere alla AWS Management Console come utente AccountAadmin. L'utente creerà un bucket e allegherà ad esso una policy.

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

Nella console Amazon S3 effettuare quanto segue:

  1. Creare un bucket. In questo esercizio si presume che il nome del bucket sia examplebucket.

    Per istruzioni, consultare Creazione di un bucket.

  2. Collegare la seguente policy di bucket che concede all'amministratore dell'Account B un'autorizzazione condizionale per caricare gli oggetti.

    È necessario aggiornare la policy fornendo dei valori personalizzati per examplebucket, AccountB-ID e CanonicalUserId-of-AWSaccountA-BucketOwner.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "111", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*" }, { "Sid": "112", "Effect": "Deny", "Principal": { "AWS": "arn:aws:iam::AccountB-ID:user/AccountBadmin" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "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 multiaccount nell'Account A

Nella console IAM, creare un ruolo IAM ("examplerole") che concede all'Account C l'autorizzazione per assumere il ruolo. Assicurarsi di essere ancora collegati in qualità di amministratore dell'Account A in quanto 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 sulla sinistra, selezionare Policy, quindi fare clic su Create Policy (Crea policy).

    2. Accanto a Create Your Own Policy (Crea la tua policy), fare clic su 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, pertanto quando assume il ruolo, l'utente dell'Account C può eseguire solo l'operazione s3:GetObject.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }
    5. Fare clic su Create policy (Crea policy).

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

  2. Nel riquadro di navigazione sulla sinistra, fare clic su Role (Ruolo), quindi su Create New Role (Crea nuovo ruolo).

  3. In Seleziona tipo di ruolo, seleziona Ruolo per accesso di più account e quindi fai clic sul pulsante Seleziona accanto a Fornisci accesso tra account Account AWS di tua proprietà.

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

    Poiché in questa procedura guidata non è necessario richiedere agli utenti l'autenticazione a più fattori (MFA) per assumere il ruolo, non occorre selezionare l'opzione corrispondente.

  5. Fare clic su Next Step (Fase successiva) per impostare le autorizzazioni da associare al ruolo.

  6. Selezionare la casella accanto alla policy access-accountA-bucket creata e quindi fare clic su Next Step (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 fanno clic sul collegamento vengono indirizzati direttamente alla pagina Switch Role (Cambia ruolo), in cui i campi relativi all'ID account e al nome del ruolo sono già compilati. Questo collegamento sarà inoltre visualizzato in un secondo momento nella pagina Role Summary (Riepilogo ruolo) per qualsiasi ruolo multiaccount.

  7. Immettere examplerole come nome del ruolo, quindi fare clic su Next Step (Fase successiva).

  8. Dopo aver rivisto il ruolo, fare clic su Create Role (Crea ruolo).

    Il ruolo examplerole viene visualizzato nell'elenco dei ruoli.

  9. Fare clic sul nome del ruolo examplerole.

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

  11. Fare clic su Show policy document (Visualizza documento policy) e verificare che la policy di attendibilità mostrata corrisponda alla seguente policy.

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountC-ID:root" }, "Action": "sts:AssumeRole" } ] }
  12. Prendere nota del valore Amazon Resource Name (ARN) del ruolo examplerole.

    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: eseguire le attività per l'Account B

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

  • Utilizza il comando put-object della AWS CLI, carica un oggetto in examplebucket.

    aws s3api put-object --bucket examplebucket --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, pertanto 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. Se ad esempio il file si trova nell'unità C: di un computer Windows, specificare c:\HappyFace.jpg.

Fase 3: eseguire le attività per l'Account C

Nelle fasi precedenti, l'Account A ha già creato un ruolo, examplerole, stabilendo l'attendibilità con l'Account C. Ciò consente agli utenti nell'Account C di accedere all'Account A. In questa fase, l'amministratore dell'Account C crea un utente (Dave) e gli delega l'autorizzazione sts:AssumeRole ricevuta dall'Account A. In tal modo Dave può assumere examplerole ottenere l'accesso temporaneo all'Account A. La policy di accesso che l'Account A ha collegato al ruolo limiterà le operazioni che Dave può effettuare quando accede all'Account A, in modo specifico ottenere gli oggetti in examplebucket.

Fase 3.1: creare un utente nell'Account C e delegare le autorizzazioni per assumere examplerole

  1. Mediante l'URL di accesso dell'utente IAM per l'Account C, per prima cosa accedere alla AWS Management Console come utente AccountCadmin.

  2. Nella console IAM, creare un utente Dave.

    Per le istruzioni, consulta Creazione di utenti IAM (AWS Management Console) nella Guida per l'utente di IAM.

  3. Prendere nota delle credenziali dell'utente Dave. Dave dovrà utilizzare queste credenziali per assumere il ruolo examplerole.

  4. Creare una policy inline per l'utente IAM Dave, per delegare a Dave l'autorizzazione sts:AssumeRole ad assumere il ruolo examplerole nell'Account A.

    1. Nel riquadro di navigazione a sinistra, fare clic su Users (Utenti).

    2. Fare clic sul 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. Fare clic su Custom Policy (Policy personalizzata) e quindi su 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).

      Sarà necessario aggiornare la policy specificando l'ID dell'Account A.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["sts:AssumeRole"], "Resource": "arn:aws:iam::AccountA-ID:role/examplerole" } ] }
    8. Fare clic su Apply policy (Applica policy).

  5. Salva le credenziali dell'utente Dave nel file di configurazione della 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) 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, emetti il seguente comando AWS CLI assume-role utilizzando il profilo AccountCDave.

    Sarà necessario aggiornare il valore ARN nel comando fornendo l'ID dell'Account A 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 (STS) restituisce le credenziali di sicurezza temporanee (ID 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 examplebucket --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 prova ad eseguire un'altra operazione, ad esempio get-object-acl, l'autorizzazione verrà rifiutata perché il ruolo non è consentita per il ruolo assunto.

    aws s3api get-object-acl --bucket examplebucket --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 examplebucket può essere effettuato anche da un'applicazione nell'Account C. 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. Dopo aver completato il test, è possibile eseguire la pulizia nel modo seguente:

    1. Accedi alla AWS Management Console (AWS Management Console) utilizzando le credenziali dell'Account A ed effettuare quanto segue:

      • Nella console Amazon S3 rimuovere la policy del bucket collegata a examplebucket. Nella sezione Properties (Proprietà) del bucket, eliminare la policy nella sezione Permissions (Autorizzazioni).

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

      • Nella console IAM, rimuovere il ruolo examplerole creato nell'Account A.

      • Nella console IAM, rimuovere l'utente AccountAadmin.

  2. Accedere alla AWS Management Console (AWS Management Console) tramite le credenziali dell'Account B. Nella console IAM, eliminare l'utente AccountBadmin.

  3. Accedi alla AWS Management Console (AWS Management Console) utilizzando le credenziali dell'Account C. Nella console IAM, eliminare l'utente AccountCadmin e l'utente Dave.

Risorse correlate