Comprensione dei Profili AWS CLI
L'AWS Command Line Interface (AWS CLI) è uno strumento potente per interagire con Amazon Web Services. Per gli utenti che gestiscono più account AWS o ruoli diversi all'interno di un account, la configurazione e il passaggio tra profili sono cruciali per una gestione efficiente del flusso di lavoro. I profili denominati consentono di memorizzare diversi set di credenziali, regioni predefinite e formati di output, consentendo transizioni fluide tra vari ambienti AWS senza specificare manualmente le credenziali ogni volta.
Questa guida ti accompagnerà nel processo di impostazione, gestione e utilizzo di più profili AWS CLI. Alla fine, sarai in grado di ottimizzare le tue interazioni da riga di comando su diversi account AWS, migliorando la sicurezza e la produttività.
Impostazione del File di Configurazione AWS CLI
L'AWS CLI memorizza le informazioni di configurazione in un file chiamato config e le credenziali in un file chiamato credentials. Per impostazione predefinita, questi file si trovano nella directory .aws all'interno della home directory dell'utente (~/.aws/ su Linux/macOS, %USERPROFILE%\.aws\ su Windows).
Profilo Predefinito
Quando configuri per la prima volta l'AWS CLI utilizzando aws configure, viene creato un profilo predefinito chiamato [default]. Questo profilo viene utilizzato se non viene specificato nessun altro profilo.
# Esempio di profilo predefinito in ~/.aws/credentials
[default]
aws_access_key_id = LA_TUA_CHIAVE_DI_ACCESSO_PREDEFINITA
aws_secret_access_key = LA_TUA_CHIAVE_SEGRETA_PREDEFINITA
# Esempio di profilo predefinito in ~/.aws/config
[default]
region = us-east-1
output = json
Creazione di Profili Denominati
Per creare un profilo denominato, è sufficiente aggiungere una nuova sezione ai file credentials e config, utilizzando un nome descrittivo per il profilo. Ad esempio, per creare un profilo per un account di produzione e un altro per un account di sviluppo:
1. Modifica di ~/.aws/credentials:
Aggiungi una nuova sezione con un nome di profilo (ad es. [prod], [dev]).
# ~/.aws/credentials
[default]
aws_access_key_id = LA_TUA_CHIAVE_DI_ACCESSO_PREDEFINITA
aws_secret_access_key = LA_TUA_CHIAVE_SEGRETA_PREDEFINITA
[prod]
aws_access_key_id = LA_TUA_CHIAVE_DI_ACCESSO_PROD
aws_secret_access_key = LA_TUA_CHIAVE_SEGRETA_PROD
[dev]
aws_access_key_id = LA_TUA_CHIAVE_DI_ACCESSO_DEV
aws_secret_access_key = LA_TUA_CHIAVE_SEGRETA_DEV
2. Modifica di ~/.aws/config:
Allo stesso modo, aggiungi le sezioni corrispondenti al file config. Puoi specificare la regione e il formato di output per profilo.
# ~/.aws/config
[default]
region = us-east-1
output = json
[profile prod]
region = us-west-2
output = text
[profile dev]
region = eu-central-1
output = json
Note Importanti:
* Quando definisci i profili in ~/.aws/config, devi prefissare il nome del profilo con profile (ad es. [profile prod]). Questo è diverso da ~/.aws/credentials, dove usi solo il nome del profilo (ad es. [prod]).
* Se un'impostazione è definita sia nel profilo [default] che in un profilo denominato, l'impostazione del profilo denominato ha la precedenza.
Passaggio tra Profili
Una volta impostati i profili denominati, puoi utilizzarli specificando l'opzione --profile con i tuoi comandi AWS CLI.
Esempio: Per elencare i bucket S3 nel tuo account di produzione:
aws s3 ls --profile prod
Esempio: Per descrivere le istanze EC2 nel tuo account di sviluppo:
aws ec2 describe-instances --profile dev
Se ometti l'opzione --profile, la CLI utilizzerà il profilo [default].
Impostazione di un Profilo Predefinito per l'Ambiente
Digitare costantemente --profile può essere noioso. Puoi impostare una variabile d'ambiente per specificare quale profilo la AWS CLI deve utilizzare per impostazione predefinita per la sessione corrente.
Utilizzo della variabile d'ambiente AWS_PROFILE:
Su Linux/macOS:
export AWS_PROFILE=prod
# Ora, i comandi utilizzeranno il profilo 'prod' per impostazione predefinita
aws s3 ls
aws ec2 describe-instances
Per rimuoverla:
unset AWS_PROFILE
Su Windows (Prompt dei comandi):
set AWS_PROFILE=prod
# Ora, i comandi utilizzeranno il profilo 'prod' per impostazione predefinita
aws s3 ls
Per rimuoverla:
set AWS_PROFILE=
Su Windows (PowerShell):
$env:AWS_PROFILE = "prod"
# Ora, i comandi utilizzeranno il profilo 'prod' per impostazione predefinita
aws s3 ls
Per rimuoverla:
Remove-Item Env:\AWS_PROFILE
Gestione di più Account AWS con Profili
Questo è un caso d'uso comune per i profili denominati. Ogni profilo può essere configurato con le chiavi di accesso dell'utente IAM per un diverso account AWS. Questo è particolarmente utile per:
- Sviluppo vs. Produzione: Mantenere separati gli ambienti di sviluppo e produzione per sicurezza.
- Team/Progetti Diversi: Isolare risorse e autorizzazioni per team o progetti distinti.
- Accesso tra Account: Se sei un amministratore o uno sviluppatore che necessita di gestire risorse in più account.
Best Practice: Utilizzo di Ruoli IAM
Invece di memorizzare chiavi di accesso a lunga durata per ciascun account direttamente nel tuo file delle credenziali, è una pratica più sicura e consigliata utilizzare i ruoli IAM. Questo comporta:
- Creazione di un ruolo IAM nell'account di destinazione che il tuo utente IAM (nel tuo account principale) può assumere.
- Configurazione del tuo AWS CLI locale per assumere questo ruolo quando utilizzi un profilo specifico.
Per configurare l'assunzione del ruolo in ~/.aws/config:
# ~/.aws/config
[profile dev-role]
role_arn = arn:aws:iam::ACCOUNT_ID:role/NOME_RUOLO
source_profile = default # O un altro profilo che ha i permessi per assumere il ruolo
region = us-east-1
output = json
Quando utilizzi aws ec2 describe-instances --profile dev-role, la CLI tenterà automaticamente di assumere il ruolo IAM specificato e utilizzerà le credenziali temporanee ottenute.
Opzioni di Configurazione Avanzate
Oltre a credenziali e regione, i profili possono specificare altre impostazioni AWS CLI:
output:json,text,tableregion: ad es.us-east-1s3.max_concurrent_requests: Numero di richieste parallele per operazioni S3.s3.max_queue_size: Dimensione della coda per i caricamenti multipart S3.cli_binary_url: Specifica un URL personalizzato per il download di binari CLI (meno comune).
Esempio: Configurazione delle impostazioni S3 per un profilo specifico
# ~/.aws/config
[profile s3-optimized]
region = us-east-1
output = json
s3.max_concurrent_requests = 50
s3.max_queue_size = 10000
Suggerimenti e Best Practice
- Utilizza Nomi di Profilo Descrittivi: Rendi i nomi dei tuoi profili chiari e indicativi dell'account o dell'ambiente che rappresentano (ad es.
prod-admin,dev-web,sandbox-research). - Proteggi le Tue Credenziali: Non inviare mai il tuo file
~/.aws/credentialsal controllo di versione. Utilizza ruoli IAM per l'accesso tra account quando possibile per evitare di memorizzare chiavi di accesso a lunga durata. - Rivedi Regolarmente le Chiavi di Accesso: Se devi utilizzare chiavi di accesso, ruotale periodicamente e disabilita quelle vecchie.
- Sfrutta le Variabili d'Ambiente: Utilizza
AWS_PROFILEper cambi temporanei o per pipeline CI/CD in cui devi puntare ad account specifici. - Combina Profili e Variabili d'Ambiente: Se è impostata una variabile d'ambiente
AWS_PROFILE, sovrascriverà qualsiasi profilo specificato con--profile.
Conclusione
Padroneggiare i profili AWS CLI è un'abilità fondamentale per chiunque lavori in modo estensivo con Amazon Web Services. Configurando e utilizzando correttamente i profili denominati, puoi migliorare significativamente la tua produttività, mantenere migliori pratiche di sicurezza e gestire più ambienti AWS con facilità. Sia che tu stia passando da account di sviluppo, staging e produzione o gestendo risorse per diversi clienti, i profili forniscono la flessibilità e il controllo necessari per operazioni cloud efficienti.