Utilizzo di un ruolo IAM nella AWS CLI
Un ruolo (IAM) AWS Identity and Access Management è uno strumento di autorizzazione che consente a un utente di ottenere autorizzazioni aggiuntive (o differenti) o di ottenere le autorizzazioni per eseguire azioni in un account diverso.
Prerequisiti
Per eseguire i comandi iam, è necessario installare e configurare la AWS CLI. Questo include l’impostazione di un profilo configurato, ad esempio presupponendo che un ruolo sia associato a un altro metodo di credenziali. Per ulteriori informazioni, consulta Installazione o aggiornamento dell’ultima versione di AWS CLI.
Panoramica sull’utilizzo dei ruoli IAM
Puoi configurare AWS Command Line Interface (AWS CLI) per l’utilizzo di un ruolo IAM definendo un profilo per il ruolo nel file ~/.aws/config.
L'esempio seguente mostra un profilo del ruolo denominato marketingadmin. Se esegui i comandi con --profile marketingadmin (o lo specifichi con la variabile di ambiente AWS_PROFILE), la AWS CLI utilizza le credenziali definite in un profilo user1 separato per assumere il ruolo con il nome della risorsa Amazon (ARN) arn:aws:iam::. Puoi eseguire tutte le operazioni consentite dalle autorizzazioni assegnate a tale ruolo.123456789012:role/marketingadminrole
[profilemarketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrolesource_profile = user1
Puoi specificare un elemento source_profile che punti a un profilo denominato separato contenente le credenziali utente con l’autorizzazione per utilizzare il ruolo. Nell'esempio precedente il profilo marketingadmin utilizza le credenziali del profilo user1. Quando specifichi che un comando AWS CLI deve utilizzare il profilo marketingadmin, la AWS CLI cerca automaticamente le credenziali per il profilo user1 collegato e le utilizza per richiedere le credenziali temporanee per il ruolo IAM specificato. L'interfaccia a riga di comando usa l'operazione sts:AssumeRole in background per completare questa attività. Tali credenziali temporanee vengono quindi utilizzate per eseguire il comando AWS CLI richiesto. Al ruolo specificato devono essere collegate policy di autorizzazione IAM che consentono l’esecuzione del comando AWS CLI richiesto.
Per eseguire un comando AWS CLI da un’istanza di Amazon Elastic Compute Cloud (Amazon EC2) o un container Amazon Elastic Container Service (Amazon ECS), puoi utilizzare un ruolo IAM collegato al profilo dell’istanza o al container. Se non specifichi alcun profilo o non imposti variabili di ambiente, tale ruolo viene utilizzato direttamente. In questo modo, potrai evitare di archiviare chiavi di accesso di lunga durata nelle istanze. Puoi anche utilizzare i ruoli dell'istanza o del container solo per ottenere le credenziali per un altro ruolo. A tale scopo, usa credential_source (anziché source_profile) per specificare come trovare le credenziali. L'attributo credential_source supporta i seguenti valori:
-
Environment: recupera le credenziali di origine dalle variabili di ambiente. -
Ec2InstanceMetadata: utilizza il ruolo IAM collegato al profilo dell’istanza Amazon EC2. -
EcsContainer: utilizza il ruolo IAM collegato al container Amazon ECS.
Nell’esempio seguente viene mostrato lo stesso ruolo marketingadminrole utilizzato facendo riferimento a un profilo dell’istanza Amazon EC2.
[profile marketingadmin] role_arn = arn:aws:iam::123456789012:role/marketingadminrole credential_source = Ec2InstanceMetadata
Quando si richiama un ruolo, sono disponibili opzioni aggiuntive che è possibile richiedere, ad esempio l'utilizzo dell'autenticazione a più fattori e di un ID esterno (utilizzato da società terze per accedere alle risorse dei client). È inoltre possibile specificare nomi di sessione di ruolo univoci che possono essere controllati più facilmente nei log AWS CloudTrail.
Configurazione e utilizzo di un ruolo
Quando esegui comandi utilizzando un profilo che specifica un ruolo IAM, la AWS CLI utilizza le credenziali del profilo di origine per chiamare AWS Security Token Service (AWS STS) e richiedere credenziali temporanee per il ruolo specificato. L'utente nel profilo di origine deve disporre dell'autorizzazione per chiamare sts:assume-role per il ruolo nel profilo specificato. Il ruolo deve disporre di una relazione di trust che consente all'utente nel profilo di origine di usare il ruolo. Il processo di recupero e quindi di utilizzo delle credenziali temporanee per un ruolo è spesso definito come assunzione del ruolo.
Puoi creare un ruolo in IAM con le autorizzazioni che gli utenti devono assumere seguendo la procedura descritta in Creating a Role to Delegate Permissions to an IAM user nella Guida per l’utente di AWS Identity and Access Management. Se il ruolo e l'utente del profilo di origine appartengono allo stesso account, puoi immettere il tuo ID account durante la configurazione della relazione di trust del ruolo.
Dopo aver creato il ruolo, modifica la relazione di fiducia per consentire all'utente di assumerlo.
L'esempio seguente mostra una policy di trust che può essere collegata a un ruolo. La policy fa in modo che il ruolo possa essere assunto da qualsiasi utente nell’account 123456789012, se l’amministratore di tale account concede esplicitamente l’autorizzazione sts:AssumeRole all’utente.
La policy di trust non concede attualmente autorizzazioni. L'amministratore dell'account deve delegare l'autorizzazione per assumere il ruolo a singoli utenti collegando una policy con le autorizzazioni appropriate. Nell’esempio seguente viene illustrata una policy che puoi collegare a un utente e che permette a tale utente di assumere solo il ruolo marketingadminrole. Per ulteriori informazioni su come concedere a un utente l’accesso per assumere un ruolo, consulta Concessione di autorizzazioni agli utenti per il cambio di ruoli nella Guida per l’utente di IAM.
Per eseguire i comandi AWS CLI utilizzando il profilo del ruolo, non è necessario che l’utente disponga di ulteriori autorizzazioni. Al contrario, le autorizzazioni per eseguire il comando provengono da quelle associate al ruolo. È possibile collegare le policy di autorizzazione al ruolo per specificare quali azioni possono essere eseguite su risorse AWS specifiche. Per ulteriori informazioni su come collegare le autorizzazioni a un ruolo, il cui funzionamento è del tutto identico a quello di un utente, consulta Modifica delle autorizzazioni per un utente IAM nella Guida per l’utente di IAM.
Ora che il profilo del ruolo, le autorizzazioni del ruolo, la relazione di trust del ruolo e le autorizzazioni utente sono configurate correttamente, puoi utilizzare il ruolo nella riga di comando richiamando l'opzione --profile. Ad esempio, il comando seguente chiama il comando ls di Amazon S3 utilizzando le autorizzazioni collegate al ruolo marketingadmin, come definito dall’esempio all’inizio di questo argomento.
$aws s3 ls --profilemarketingadmin
Per utilizzare il ruolo per diverse chiamate, puoi impostare la variabile di ambiente AWS_PROFILE per la sessione corrente dalla riga di comando. Sebbene la variabile di ambiente sia definita, non è necessario specificare l'opzione --profile su ogni comando.
Linux o macOS
$export AWS_PROFILE=marketingadmin
Windows
C:\>setx AWS_PROFILE marketingadmin
Per ulteriori informazioni sulla configurazione di utenti e ruoli, consulta Identità IAM (utenti, gruppi e ruoli) e Ruoli IAM nella Guida per l’utente di IAM.
Utilizzo dell'autenticazione a più fattori
Per una maggiore sicurezza, puoi richiedere agli utenti di fornire una chiave monouso generata da un dispositivo di autenticazione a più fattori (MFA), da un dispositivo U2F o da un'app per dispositivi mobili durante il tentativo di effettuare una chiamata utilizzando il profilo del ruolo.
In primo luogo, puoi scegliere di modificare la relazione di trust sul ruolo IAM per richiedere la MFA. Ciò impedisce a chiunque di utilizzare il ruolo senza prima autenticarsi utilizzando MFA. Per un esempio, consulta la riga Condition nel seguente esempio. Questa policy consente all’utente denominato anika di assumere il ruolo collegato alla policy, ma solo se esegue l’autenticazione utilizzando MFA.
Quindi, aggiungi una riga al profilo del ruolo che specifica l'ARN del dispositivo MFA dell'utente. Le seguenti voci del file config di esempio illustrano due profili di ruolo che utilizzano le chiavi di accesso per l’utente anika per richiedere le credenziali provvisorie per il ruolo cli-role. L'utente anika ha le autorizzazioni per assumere quel ruolo concesse dalla policy di trust del ruolo.
[profile role-without-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile=cli-user [profile role-with-mfa] region = us-west-2 role_arn= arn:aws:iam::128716708097:role/cli-role source_profile = cli-user mfa_serial = arn:aws:iam::128716708097:mfa/cli-user [profile cli-user] region = us-west-2 output = json
L'impostazione mfa_serial può richiedere un ARN, come illustrato, o il numero di serie di un token hardware MFA.
Il primo profilo, role-without-mfa, non richiede MFA. Tuttavia, poiché la precedente policy di trust di esempio associata al ruolo richiede MFA, qualsiasi tentativo di eseguire un comando con questo profilo non riesce.
$aws iam list-users --profile role-without-mfaAn error occurred (AccessDenied) when calling the AssumeRole operation: Access denied
Il secondo profilo role-with-mfa, identifica un dispositivo MFA da utilizzare. Quando l’utente tenta di eseguire un comando AWS CLI con questo profilo, la AWS CLI richiede all’utente di immettere il codice OTP (One-Time Password) fornito dal dispositivo per la MFA. Se l'autenticazione MFA ha esito positivo, il comando esegue l'operazione richiesta. La password monouso non viene visualizzata sullo schermo.
$aws iam list-users --profile role-with-mfaEnter MFA code for arn:aws:iam::123456789012:mfa/cli-user: { "Users": [ { ...
Ruoli per più account e ID esterno
Puoi abilitare gli utenti in modo che assumano ruoli appartenenti ad account diversi configurando il ruolo come ruolo per più account. Durante la creazione del ruolo, imposta il tipo di ruolo su Another AWS account, come descritto in Creating a Role to Delegate Permissions to an IAM user. Facoltativamente, seleziona Require MFA (Richiedi MFA). Require MFA (Richiedi MFA) configura la condizione appropriata nella relazione di trust, come descritto in Utilizzo dell'autenticazione a più fattori.
Se utilizzi un ID esterno per fornire ulteriore controllo su chi può usare un ruolo per diversi account, devi aggiungere il parametro external_id al profilo del ruolo. Ciò viene utilizzato in genere solo quando l'altro account è controllato da qualcuno esterno all'azienda o organizzazione.
[profile crossaccountrole] role_arn = arn:aws:iam::234567890123:role/SomeRolesource_profile = default mfa_serial = arn:aws:iam::123456789012:mfa/saanviexternal_id =123456
Specifica di un nome di sessione del ruolo per semplificare l'audit
Quando molti individui condividono un ruolo, l'audit diventa più difficile. Si supponga che tu voglia associare ogni operazione richiamata alla persona che ha richiamato l'operazione. Tuttavia, quando la persona utilizza un ruolo, l'assunzione del ruolo da parte dell'individuo è un'operazione distinta rispetto alla chiamata di un'operazione ed è pertanto necessario correlare manualmente le due cose.
Puoi semplificare questa operazione specificando nomi univoci delle sessioni del ruolo quando gli utenti assumono un ruolo. A tale scopo, aggiungi un parametro role_session_name a ogni profilo denominato nel file config che specifica un ruolo. Il valore role_session_name viene passato all'operazione AssumeRole e diventa parte dell'ARN della sessione del ruolo. Viene inoltre incluso nei log di AWS CloudTrail per tutte le operazioni registrate.
Ad esempio, puoi creare un profilo basato su ruoli come segue.
[profile namedsessionrole] role_arn = arn:aws:iam::234567890123:role/SomeRolesource_profile = default role_session_name =Session_Maria_Garcia
Di conseguenza, la sessione del ruolo ha il seguente ARN.
arn:aws:iam::234567890123:assumed-role/SomeRole/Session_Maria_Garcia
Inoltre, tutti i log di AWS CloudTrail includono il nome della sessione del ruolo nelle informazioni acquisite per ogni operazione.
Assunzione di un ruolo con un'identità Web
Puoi configurare un profilo per indicare che l'AWS CLI deve assumere un ruolo utilizzando la federazione delle identità Web e Open ID Connect (OIDC). Quando specifichi questa opzione in un profilo, l'AWS CLI effettua automaticamente la chiamata AWS STS AssumeRoleWithWebIdentity corrispondente.
Nota
Quando specifichi un profilo che utilizza un ruolo IAM, la AWS CLI effettua le chiamate appropriate per recuperare le credenziali temporanee. Queste credenziali sono archiviate in ~/.aws/cli/cache. I comandi dell'AWS CLI successivi che specificano lo stesso profilo utilizzano le credenziali temporanee memorizzate nella cache fino alla scadenza. A questo punto, l'AWS CLI aggiorna automaticamente le credenziali.
Per recuperare e utilizzare le credenziali temporanee utilizzando la federazione delle identità Web, puoi specificare i seguenti valori di configurazione in un profilo condiviso.
- role_arn
-
Specificare l'ARN del ruolo da assumere.
- web_identity_token_file
-
Specifica il percorso di un file che contiene un token di accesso OAuth 2.0 o un token ID OpenID Connect fornito dal provider di identità. L'AWS CLI carica questo file e passa il relativo contenuto come argomento
WebIdentityTokenall'operazioneAssumeRoleWithWebIdentity. - role_session_name
-
Specifica un nome facoltativo applicato a questa sessione assume-role.
Di seguito è riportato un esempio di configurazione per la quantità minima di configurazione necessaria per configurare un profilo del ruolo assunto con un'identità Web:
# In ~/.aws/config [profile web-identity] role_arn=arn:aws:iam:123456789012:role/RoleNameToAssumeweb_identity_token_file=/path/to/a/token
Puoi anche fornire questa configurazione utilizzando variabili di ambiente:
- AWS_ROLE_ARN
-
L'ARN del ruolo da assumere.
- AWS_WEB_IDENTITY_TOKEN_FILE
-
Il percorso del file del token dell'identità Web.
- AWS_ROLE_SESSION_NAME
-
Il nome applicato a questa sessione assume-role.
Nota
Queste variabili di ambiente attualmente si applicano solo al ruolo assumere con provider di identità Web. Non si applicano alla configurazione generale del provider dell'assunzione di ruoli.
Cancellazione delle credenziali nella cache
Quando usi un ruolo, l'AWS CLI memorizza le credenziali temporanee nella cache in locale finché non scadono. La prossima volta che provi a utilizzarle, l'AWS CLI tenta di rinnovarle per tuo conto.
Se le credenziali temporanee del ruolo vengono revocate, non vengono rinnovate automaticamente e i tentativi di utilizzarle non vanno a buon fine. Tuttavia, puoi eliminare la cache per forzare l'AWS CLI a recuperare nuove credenziali.
Linux o macOS
$rm -r ~/.aws/cli/cache
Windows
C:\>del /s /q %UserProfile%\.aws\cli\cache