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 nell'account A per gli scenari 1 e 2, devi definire un utente IAM in ciascuno degli account B, C e Z. Ogni utente IAM assumerà programmaticamente il ruolo appropriato per accedere ai file di log. In altre parole, l'utente nell'account B assumerà il ruolo creato per l'account B, l'utente nell'account C assumerà il ruolo creato per l'account C, mentre l'utente nell'account Z assumerà il ruolo creato per l'account Z. Quando un utente assume un ruolo, AWS restituisce le credenziali di sicurezza temporanee a quell'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 tra gli scenari 1 e 2 risiede nella policy di accesso creata per ogni ruolo IAM in ogni scenario.
-
Nello scenario 1, le policy di accesso per gli account B e C limitano ogni account alle operazioni di lettura solo dei propri file di log. Per ulteriori informazioni, consulta Creazione di una policy di accesso per concedere l'accesso ad account di proprietà.
-
Nello scenario 2, la policy di accesso per l'account Z permette di leggere tutti i file di log aggregati nel bucket Amazon S3. Per ulteriori informazioni, consulta Creazione di una policy di accesso per concedere l'accesso a una terza parte.
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 nell'account B che permette all'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)
Accedi alla AWS Management Console e apri la console IAM all'indirizzo https://console.aws.amazon.com/iam/
. -
Nel pannello di navigazione, seleziona Policies (Policy).
-
Nell'elenco delle policy, selezionare il nome della policy da modificare. Puoi utilizzare la casella di ricerca per filtrare l'elenco di policy.
-
Seleziona la scheda Autorizzazioni e scegli Modifica.
-
Completa una delle seguenti 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.
-
-
Nella pagina Verifica e salva, esamina il campo Autorizzazioni definite in questa policy, quindi scegli Salva modifiche per salvare il lavoro.
-
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 nell'account B, C o Z 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 definita dall'account A quando crea il ruolo di assumere. L'eventuale ID esterno viene definito dall'account Z e passato all'account A 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
-
Selezionare Roles (Ruoli).
-
Scegliere il ruolo da esaminare.
-
Cercare il valore in Role ARN (ARN ruolo) nella sezione Summary (Riepilogo).
L'API AssumeRole restituisce le credenziali temporanee che un utente nell'account B, C o Z può utilizzare per accedere alle risorse nell'account A. In questo esempio, le risorse a cui desideri accedere si trovano nel bucket Amazon S3 e nei file di log contenuti nel bucket. Le credenziali temporanee dispongono delle autorizzazioni definite nella policy di accesso del ruolo.
Il seguente esempio Python (che utilizza AWS SDK for Python (Boto)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