Come configurare e gestire in modo efficiente più profili AWS CLI

Impara a gestire in modo efficiente più account e ambienti AWS utilizzando i profili nominati AWS CLI. Questa guida fornisce istruzioni passo passo su come configurare, passare tra e proteggere diversi set di credenziali e impostazioni AWS. Ottimizza il tuo flusso di lavoro cloud padroneggiando la gestione dei profili per una maggiore produttività e sicurezza.

Come configurare e gestire più profili AWS CLI in modo efficiente

I profili AWS CLI mantengono separati i tuoi account, ruoli, regioni e impostazioni di output. Se gestisci ambienti di sviluppo, staging e produzione dallo stesso laptop, i profili ti aiutano a evitare di eseguire un comando contro l'account AWS sbagliato.

L'obiettivo è semplice: rendere esplicito l'account previsto, ridurre le credenziali di lunga durata dove possibile e darti controlli rapidi prima di comandi distruttivi.

Configurazione del file di configurazione AWS CLI

La CLI AWS memorizza le impostazioni dei profili in due file condivisi:

  • ~/.aws/credentials per le chiavi di accesso e le credenziali di sessione.
  • ~/.aws/config per regione, formato di output, impostazioni dei ruoli e altre opzioni della CLI.

Su Windows, gli stessi file si trovano in %USERPROFILE%\.aws\.

Profilo predefinito

Quando esegui aws configure senza --profile, scrive le impostazioni per [default]. La CLI utilizza questo profilo quando non ne specifichi un altro e nessuna variabile d'ambiente pertinente lo sovrascrive.

# Esempio di un profilo predefinito in ~/.aws/credentials
[default]
aws_access_key_id = YOUR_DEFAULT_ACCESS_KEY
aws_secret_access_key = YOUR_DEFAULT_SECRET_KEY
# Esempio di un profilo predefinito in ~/.aws/config
[default]
region = us-east-1
output = json

Creazione di profili denominati

Puoi creare profili denominati con aws configure --profile:

aws configure --profile dev
aws configure --profile prod

Puoi anche modificare i file direttamente. Usa nomi di profilo semplici in ~/.aws/credentials:

~/.aws/credentials:

[default]
aws_access_key_id = YOUR_DEFAULT_ACCESS_KEY
aws_secret_access_key = YOUR_DEFAULT_SECRET_KEY

[prod]
aws_access_key_id = YOUR_PROD_ACCESS_KEY
aws_secret_access_key = YOUR_PROD_SECRET_KEY

[dev]
aws_access_key_id = YOUR_DEV_ACCESS_KEY
aws_secret_access_key = YOUR_DEV_SECRET_KEY

In ~/.aws/config, i profili denominati usano il prefisso profile :

~/.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

Dettagli importanti:

  • Quando definisci profili in ~/.aws/config, devi anteporre al nome del profilo il prefisso profile (ad esempio, [profile prod]). Questo è diverso da ~/.aws/credentials, dove usi solo il nome del profilo (ad esempio, [prod]).
  • Il profilo [default] non funge automaticamente da genitore per i profili denominati. Se prod necessita di una regione, imposta region sotto [profile prod] o fornisci la regione in altro modo.

Passaggio tra profili

Una volta configurati 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

Prima di eseguire un comando rischioso, verifica chi sei:

aws sts get-caller-identity --profile prod

Questo restituisce l'ID account e l'ARN per le credenziali che la CLI sta utilizzando.

Impostazione di un profilo predefinito per l'ambiente

Digitare costantemente --profile può essere noioso. Puoi impostare AWS_PROFILE per la sessione corrente della shell.

Linux/macOS:

export AWS_PROFILE=prod

# Ora, i comandi useranno il profilo 'prod' per impostazione predefinita
aws s3 ls
aws ec2 describe-instances

Per annullare:

unset AWS_PROFILE

Prompt dei comandi di Windows:

set AWS_PROFILE=prod

# Ora, i comandi useranno il profilo 'prod' per impostazione predefinita
aws s3 ls

Per annullare:

set AWS_PROFILE=

Windows PowerShell:

$env:AWS_PROFILE = "prod"

# Ora, i comandi useranno il profilo 'prod' per impostazione predefinita
aws s3 ls

Per annullare:

Remove-Item Env:\AWS_PROFILE

Le opzioni della riga di comando hanno la precedenza sulle variabili d'ambiente. Se AWS_PROFILE=dev è impostato ma esegui aws s3 ls --profile prod, il comando utilizza prod.

Gestione di più account AWS con profili

I profili sono utili 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 deve gestire risorse in più account.

Buona pratica: Utilizzo dei ruoli IAM

Evita di memorizzare chiavi di accesso di lunga durata per ogni account. Un modello comune è mantenere un profilo di origine o un profilo SSO, quindi assumere ruoli negli account di destinazione.

Per l'assunzione di ruoli, configura un profilo come questo:

# ~/.aws/config

[profile dev-role]
role_arn = arn:aws:iam::ACCOUNT_ID:role/ROLE_NAME
source_profile = default
region = us-east-1
output = json

Quando esegui un comando con --profile dev-role, la CLI utilizza il profilo default per chiamare AWS STS, assume il ruolo e utilizza credenziali temporanee per il comando.

Se la tua organizzazione utilizza IAM Identity Center, il tuo profilo potrebbe utilizzare impostazioni SSO invece delle chiavi di accesso:

[profile sandbox]
sso_start_url = https://example.awsapps.com/start
sso_region = us-east-1
sso_account_id = 123456789012
sso_role_name = DeveloperAccess
region = us-east-1
output = json

Quindi autenticati con:

aws sso login --profile sandbox

Opzioni di configurazione avanzate

Oltre alle credenziali e alla regione, i profili possono specificare altre impostazioni della CLI AWS:

  • output: json, text, table
  • region: ad esempio, us-east-1
  • s3.max_concurrent_requests: Numero di richieste parallele per le operazioni S3.
  • s3.max_queue_size: Dimensione della coda per i caricamenti multipart S3.
  • cli_binary_format: Come vengono interpretati i parametri binari in AWS CLI v2.

Esempio: Configurazione delle impostazioni S3 per un profilo specifico

Usa aws configure set per evitare errori di indentazione:

aws configure set s3.max_concurrent_requests 20 --profile s3-optimized
aws configure set s3.max_queue_size 10000 --profile s3-optimized

Questo scrive le impostazioni S3 sotto il profilo in ~/.aws/config:

# ~/.aws/config

[profile s3-optimized]
region = us-east-1
output = json
s3 =
    max_concurrent_requests = 20
    max_queue_size = 10000

Suggerimenti e buone pratiche

  • Usa nomi di profilo descrittivi: Rendi i nomi dei tuoi profili chiari e indicativi dell'account o dell'ambiente che rappresentano (ad esempio, prod-admin, dev-web, sandbox-research).
  • Proteggi le tue credenziali: Non committare mai il tuo file ~/.aws/credentials nel controllo versione. Usa i ruoli IAM per l'accesso tra account quando possibile per evitare di memorizzare chiavi di accesso di lunga durata.
  • Rivedi regolarmente le chiavi di accesso: Se devi usare chiavi di accesso, ruotale periodicamente e disabilita quelle vecchie.
  • Sfrutta le variabili d'ambiente: Usa AWS_PROFILE per il passaggio temporaneo o per pipeline CI/CD in cui devi indirizzare account specifici.
  • Tieni d'occhio le variabili d'ambiente delle credenziali: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY e AWS_SESSION_TOKEN possono sovrascrivere le credenziali dai profili. Cancellale se la CLI sembra utilizzare l'identità sbagliata.
  • Assegna nomi ai profili in base al raggio di impatto: Nomi come prod-readonly, prod-admin e sandbox-dev sono più sicuri di nomi vaghi come main o test.

Conclusione pratica

Usa i profili per ogni account e ruolo che tocchi spesso e controlla aws sts get-caller-identity prima di modificare le risorse di produzione. Preferisci profili basati su SSO o ruoli rispetto a chiavi di accesso di lunga durata e tieni a mente le variabili d'ambiente quando un comando sembra indirizzare l'account sbagliato.