Condivisione di file di log di CloudTrail tra account AWS - AWS CloudTrail

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à.

Condivisione di file di log di CloudTrail tra account AWS

Questa sezione spiega come condividere i file di log di CloudTrail tra più account AWS. L'approccio utilizzato per condividere i log tra Account AWS dipende dalla configurazione del bucket S3. Di seguito sono riportate le opzioni di condivisione dei file di log:

  • Proprietario del bucket applicato: l'impostazione Proprietà dell'oggetto S3 a livello di bucket Amazon S3 può essere utilizzata 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 ACL sono disabilitate. Quando le ACL sono disabilitate, il proprietario del bucket dispone di tutti gli oggetti nel bucket e gestisce l'accesso ai dati in maniera esclusiva utilizzando policy di gestione dell'accesso. Quando l'opzione Proprietario del bucket applicato è impostata, l'accesso viene gestito tramite la policy del bucket, eliminando così la necessità per gli utenti di assumere un ruolo.

  • Assunzione di un ruolo per condividere i file di log: se non hai scelto l'impostazione Proprietario del bucket applicato, gli utenti dovranno assumere un ruolo per accedere ai file di log nel tuo bucket S3.

Condivisione di file di log tra account tramite l'assunzione di un ruolo

Nota

Questa sezione si applica solo ai bucket Amazon S3 che non utilizzano l'impostazione Proprietario del bucket applicato.

Questa sezione spiega come condividere i file di log di CloudTrail tra più Account AWS tramite l'assunzione di un ruolo e descrive gli scenari della condivisione dei file di log.

  • Scenario 1: concedi accesso in sola lettura agli account che hanno generato i file di log inseriti nel bucket Amazon S3.

  • Scenario 2: concedi l'accesso a tutti i file di log nel tuo bucket Amazon S3 a un account di terze parti in grado di analizzare i file di log per te.

Per concedere l'accesso in sola lettura ai file di log nel bucket Amazon S3
  1. Crea un ruolo IAM per ogni account con cui desideri condividere i file di log. Devi essere un amministratore per poter concedere l'autorizzazione.

    Quando crei il ruolo, procedi nel seguente modo:

    • Scegli l'opzione Un altro Account AWS.

    • Inserisci l'ID a dodici cifre dell'account a cui concedere l'accesso.

    • Selezionare la casella Require MFA (Richiedi MFA) se vuoi che gli utenti forniscano l'autenticazione a più fattori prima di assumere il ruolo.

    • Scegli la policy Amazons3ReadOnlyAccess.

      Nota

      Per impostazione predefinita, la policy AmazonS3ReadOnlyAccess concede diritti di recupero ed elencazione a tutti i bucket Amazon S3 all'interno del tuo account.

    Per ulteriori dettagli sulla gestione delle autorizzazioni per i ruoli IAM, consulta Ruoli IAM nella Guida per l'utente IAM.

  2. Crea una policy di accesso che conceda l'accesso in sola lettura all'account con cui vuoi condividere i file di log.

  3. Chiedi a ciascun account di assumere un ruolo per recuperare i file di log.

Per concedere l'accesso in sola lettura ai file di log con account di terze parti
  1. Crea un ruolo IAM per l'account di terze parti con cui desideri condividere i file di log. Devi essere un amministratore per poter concedere l'autorizzazione.

    Quando crei il ruolo, procedi nel seguente modo:

    • Scegli l'opzione Un altro Account AWS.

    • Inserisci l'ID a dodici cifre dell'account a cui concedere l'accesso.

    • Inserire un ID esterno che fornisca ulteriore controllo sugli utenti che possono assumere quel ruolo. Per ulteriori informazioni, consulta Utilizzo di un ID esterno quando si concede a una terza parte l'accesso alle proprie risorse AWS nella Guida per l'utente di IAM.

    • Scegli la policy Amazons3ReadOnlyAccess.

      Nota

      Per impostazione predefinita, la policy AmazonS3ReadOnlyAccess concede diritti di recupero ed elencazione a tutti i bucket Amazon S3 all'interno del tuo account.

  2. Crea una policy di accesso che conceda l'accesso in sola lettura all'account di terze parti con cui vuoi condividere i file di log.

  3. Chiedi all'account di terze parti di assumere un ruolo per recuperare i file di log.

Le seguenti sezioni forniscono maggiori dettagli su questi passaggi.

Creazione di una policy di accesso per concedere l'accesso ad account di proprietà

In qualità di proprietario del bucket Amazon S3 disponi del controllo completo sul bucket Amazon S3 in cui CloudTrail scrive i file di log per gli altri account. Potresti voler condividere i file di log di ogni unità aziendale con l'unità aziendale che li ha creati. Tuttavia, non vuoi che una business unit sia in grado di leggere i file di log di tutte le altre.

Ad esempio, per condividere i file di log dell'account B con l'account B ma non con l'account C, nell'account A devi creare un nuovo ruolo IAM che specifichi che l'account B è un account attendibile. Questa policy di attendibilità del ruolo specifica che l'account B può essere considerato attendibile per l'assunzione del ruolo creato dall'account A. La policy dovrebbe essere simile all'esempio seguente. La policy di attendibilità viene creata automaticamente se crei il ruolo utilizzando la console. Se utilizzi l'SDK per creare il ruolo, devi specificare la policy di attendibilità come parametro nell'API CreateRole. Se utilizzi la CLI per creare il ruolo, devi specificare la policy di attendibilità nel comando CLI create-role.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-B-id:root" }, "Action": "sts:AssumeRole" } ] }

Devi inoltre creare una policy di accesso per specificare che l'account B può leggere solo dalla posizione in cui l'account B scrive i propri file di log. La policy di accesso sarà simile all'esempio seguente. Nota che l'ARN del parametro Risorsa include l'ID account a dodici cifre dell'account B e l'eventuale prefisso specificato quando è stato attivato CloudTrail per l'account B durante il processo di aggregazione. Per ulteriori informazioni sulla specifica di un prefisso, consulta Creazione di percorsi in account aggiuntivi.

Importante

Devi verificare che il prefisso nella policy di accesso sia identico al prefisso utilizzato quando hai attivato CloudTrail per l'account B. Se non è uguale, devi modificare la policy di accesso del ruolo IAM nel tuo account in modo da includere il prefisso effettivo per l'account B. Se il prefisso nella policy di accesso del ruolo non è identico al prefisso specificato quando hai attivato CloudTrail nell'account B, l'account B non potrà accedere ai relativi file di log.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name/prefix/AWSLogs/account-B-id/*" }, { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name" } ] }

Utilizza il processo precedente anche per gli eventuali account aggiuntivi.

Dopo aver creato i ruoli per ogni account e aver specificato le policy di attendibilità e accesso appropriati, nonché dopo che a un utente IAM in ogni account è stato concesso l'accesso dall'amministratore di tale account, un utente IAM nell'account B o C potrà assumere il ruolo a livello di programmazione.

Per ulteriori informazioni, consulta Assunzione di un ruolo.

Creazione di una policy di accesso per concedere l'accesso a una terza parte

È necessario creare un ruolo IAM separato per un account di terze parti. Quando crei il ruolo, AWS crea automaticamente la relazioni di attendibilità, che specifica che l'account di terze parti è attendibile per l'assunzione del ruolo. La policy di accesso per il ruolo specifica le operazioni che tale account può eseguire. Per ulteriori informazioni sulla creazione dei ruoli, consulta Crea un ruolo IAM.

Ad esempio, la relazione di attendibilità creata da AWS specifica che l'account di terze parti (in questo esempio, account Z) è attendibile e può assumere il ruolo che hai creato. Di seguito è illustrato un esempio di policy di attendibilità:

{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::account-Z-id:root"}, "Action": "sts:AssumeRole" }] }

Se quando hai creato il ruolo per l'account di terze parti hai specificato un ID esterno, la policy di accesso contiene un altro elemento Condition che verifica l'ID univoco assegnato da tale account. La verifica viene eseguita quando si assume il ruolo. La policy di accesso di esempio seguente contiene un elemento Condition.

Per ulteriori informazioni, consulta Utilizzo di un ID esterno quando si concede a una terza parte l'accesso alle proprie risorse AWS nella Guida per l'utente di IAM.

{ "Version": "2012-10-17", "Statement": [{ "Sid": "", "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::account-Z-id:root"}, "Action": "sts:AssumeRole", "Condition": {"StringEquals": {"sts:ExternalId": "external-ID-issued-by-account-Z"}} }] }

Devi inoltre creare una policy di accesso per il tuo account per specificare che l'account di terze parti può leggere tutti i log nel bucket Amazon S3. La policy di accesso dovrebbe essere simile all'esempio seguente. Il carattere jolly (*) dopo il valore Resource indica che l'account di terze parti può accedere a qualsiasi file di log nel bucket S3 per il quale dispone dell'accesso.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name/*" }, { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": "arn:aws:s3:::bucket-name" } ] }

Dopo aver creato un ruolo per l'account di terze parti e aver specificato la relazione di attendibilità e la policy di accesso corrette, un utente IAM nell'account di terze parti deve assumere il ruolo a livello di programmazione in modo da poter leggere i file di log nel bucket. Per ulteriori informazioni, consulta Assunzione di un ruolo.

Assunzione di un ruolo

Devi designare un utente IAM separato per assumere ogni ruolo che crei in ogni account. Devi quindi assicurarti che ogni utente IAM disponga delle autorizzazioni appropriate.

Utenti e ruoli IAM

Dopo aver creato i ruoli e le policy necessari, devi definire un utente IAM in ciascuno degli account con cui desideri condividere i file. Ogni utente IAM assume il ruolo corretto a livello di programmazione per accedere ai file di log. Quando un utente assume un ruolo, AWS restituisce credenziali di sicurezza temporanee a tale utente. Possono quindi effettuare richieste per elencare, recuperare, copiare o eliminare i file di log a seconda delle autorizzazioni concesse dalla policy di accesso associata al ruolo.

Per ulteriori informazioni sulle diverse identità IAM, consulta Identità IAM (utenti, gruppi di utenti e ruoli).

La differenza principale risiede nella policy di accesso creata per ogni ruolo IAM in ogni scenario.

Creazione delle policy di autorizzazione per gli utenti IAM

Per eseguire le operazioni consentite da un ruolo, l'utente IAM deve disporre dell'autorizzazione per eseguire chiamate all'API AWS STS AssumeRole. Devi modificare la policy per ogni utente in modo da concedere le autorizzazioni appropriate. In altre parole, devi impostare un elemento Risorsa nella policy collegata all'utente IAM. L'esempio seguente mostra una policy per un utente IAM in un altro account che permette a tale utente di assumere un ruolo denominato Test creato in precedenza dall'account A.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["sts:AssumeRole"], "Resource": "arn:aws:iam::account-A-id:role/Test" } ] }
Per modificare una policy gestita dal cliente (console)
  1. Accedi a AWS Management Console e apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/.

  2. Nel pannello di navigazione, seleziona Policies (Policy).

  3. Nell'elenco delle policy, selezionare il nome della policy da modificare. Puoi utilizzare la casella di ricerca per filtrare l'elenco di policy.

  4. Seleziona la scheda Autorizzazioni e scegli Modifica.

  5. Esegui una di queste operazioni:

    • Per modificare la policy senza conoscere la sintassi JSON, seleziona l'opzione Visivo. Puoi modificare servizi, operazioni, risorse o condizioni opzionali per ogni blocco di autorizzazione della policy. Inoltre, puoi importare una policy per aggiungere ulteriori autorizzazioni nella parte finale. Al termine, seleziona Successivo per continuare.

    • Seleziona la scheda JSON per modificare la policy, digitando o copiando il testo nella casella JSON. Inoltre, puoi importare una policy per aggiungere ulteriori autorizzazioni nella parte finale. Risolvi eventuali avvisi di sicurezza, errori o avvisi generali generati durante la convalida delle policy, quindi scegli Next (Successivo).

      Nota

      È possibile alternare le opzioni dell'editor Visivo e JSON in qualsiasi momento. Se tuttavia si apportano modifiche o si seleziona Successivo nell'editor Visivo, IAM potrebbe ristrutturare la policy in modo da ottimizzarla per l'editor visivo. Per ulteriori informazioni, consulta Modifica della struttura delle policy nella Guida per l'utente di IAM.

  6. Nella pagina Verifica e salva, esamina il campo Autorizzazioni definite in questa policy, quindi scegli Salva modifiche per salvare il lavoro.

  7. Se esistono già un massimo di cinque versioni della policy gestita, seleziona Salva per visualizzare una finestra di dialogo. Per salvare la nuova versione, la versione non predefinita più vecchia della policy viene rimossa e sostituita con la nuova. Facoltativamente, puoi impostare la nuova versione come versione predefinita della policy.

    Scegli Salva modifiche per salvare la nuova versione della policy.

Chiamata dell'API AssumeRole

Un utente può assumere un ruolo mediante la creazione di un'applicazione che esegue una chiamata all'API AWS STS AssumeRole. L'applicazione dovrà quindi passare il nome della sessione del ruolo, l'ARN (Amazon Resource Number) del ruolo da assumere e un ID esterno opzionale. Il nome della sessione del ruolo viene definito dall'account che ha creato il ruolo da assumere. L'eventuale ID esterno viene definito dall'account di terze parti e passato all'account proprietario per essere incluso durante la creazione del ruolo. Per ulteriori informazioni, consulta Utilizzo di un ID esterno quando si concede a una terza parte l'accesso alle proprie risorse AWS nella Guida per l'utente di IAM. Puoi recuperare l'ARN dall'account A aprendo la console IAM.

Per individuare il valore ARN nell'account A con la console IAM
  1. Selezionare Roles (Ruoli).

  2. Scegliere il ruolo da esaminare.

  3. Cercare il valore in Role ARN (ARN ruolo) nella sezione Summary (Riepilogo).

L'API AssumeRole restituisce credenziali temporanee da utilizzare per accedere alle risorse dell'account proprietario. In questo esempio, le risorse a cui desideri accedere sono il bucket Amazon S3 e i file di log al suo interno. Le credenziali temporanee dispongono delle autorizzazioni definite nella policy di accesso del ruolo.

Il seguente esempio Python (che utilizza AWS SDK for Python (Boto)) mostra come chiamare AssumeRole e come utilizzare le credenziali di sicurezza temporanee restituite per elencare tutti i bucket Amazon S3 controllati dall'account A.

def list_buckets_from_assumed_role(user_key, assume_role_arn, session_name): """ Assumes a role that grants permission to list the Amazon S3 buckets in the account. Uses the temporary credentials from the role to list the buckets that are owned by the assumed role's account. :param user_key: The access key of a user that has permission to assume the role. :param assume_role_arn: The Amazon Resource Name (ARN) of the role that grants access to list the other account's buckets. :param session_name: The name of the STS session. """ sts_client = boto3.client( "sts", aws_access_key_id=user_key.id, aws_secret_access_key=user_key.secret ) try: response = sts_client.assume_role( RoleArn=assume_role_arn, RoleSessionName=session_name ) temp_credentials = response["Credentials"] print(f"Assumed role {assume_role_arn} and got temporary credentials.") except ClientError as error: print( f"Couldn't assume role {assume_role_arn}. Here's why: " f"{error.response['Error']['Message']}" ) raise # Create an S3 resource that can access the account with the temporary credentials. s3_resource = boto3.resource( "s3", aws_access_key_id=temp_credentials["AccessKeyId"], aws_secret_access_key=temp_credentials["SecretAccessKey"], aws_session_token=temp_credentials["SessionToken"], ) print(f"Listing buckets for the assumed role's account:") try: for bucket in s3_resource.buckets.all(): print(bucket.name) except ClientError as error: print( f"Couldn't list buckets for the account. Here's why: " f"{error.response['Error']['Message']}" ) raise

Interruzione della condivisione di file di log di CloudTrail tra account AWS

Per interrompere la condivisione di file di log con un altro Account AWS, elimina il ruolo che hai creato per tale account. Per informazioni sull'eliminazione di un ruolo, consulta Eliminazione di ruoli o profili delle istanze.