Best Practices per la Gestione Sicura delle Credenziali con AWS CLI
Scopri le migliori pratiche definitive per proteggere le tue credenziali AWS CLI. Questa guida copre l'ordine di caricamento delle credenziali, l'uso corretto dei file di configurazione, le variabili d'ambiente e, soprattutto, come sfruttare i ruoli IAM e AWS SSO per eliminare il rischio di memorizzare chiavi di accesso statiche a lunga durata. Implementa queste strategie per ottenere una sicurezza robusta nei tuoi flussi di lavoro di automazione e gestione AWS.
Migliori Pratiche per la Gestione Sicura delle Credenziali con AWS CLI
Le credenziali AWS CLI possono creare, eliminare ed esporre risorse cloud reali, quindi una chiave di accesso divulgata non è un piccolo errore. La configurazione più sicura fornisce agli umani credenziali a breve durata tramite IAM Identity Center e ai carichi di lavoro credenziali temporanee tramite ruoli.
Queste migliori pratiche per la gestione sicura delle credenziali con AWS CLI spiegano dove il CLI cerca le credenziali, quando utilizzare i profili e come evitare chiavi statiche a lunga durata negli script.
Comprendere l'Ordine di Caricamento delle Credenziali AWS CLI
Il AWS CLI risolve le credenziali attraverso una catena di provider. La catena esatta può variare in base alla versione del CLI e alla configurazione, ma l'ordine pratico che risolverai più spesso è:
- Variabili d'Ambiente:
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEYe opzionalmenteAWS_SESSION_TOKEN. - Configurazione Assume-role e Web Identity: Profili che dicono al CLI di chiamare AWS STS per credenziali temporanee.
- Credenziali IAM Identity Center: Profili creati da
aws configure ssooaws configure sso-session. - File delle credenziali condivise: Di solito
~/.aws/credentials. - File di configurazione condiviso: Di solito
~/.aws/config, incluse le vocicredential_process. - Credenziali del contenitore: Ruoli delle attività ECS e endpoint delle credenziali del contenitore compatibili.
- Credenziali del profilo dell'istanza EC2: Credenziali temporanee dal Servizio di Metadati delle Istanze (IMDS).
Il AWS CLI non utilizza i flag --access-key-id o --secret-access-key per i comandi normali. Se li vedi in uno script, probabilmente si sta confondendo il comportamento del AWS CLI con un altro strumento o SDK.
1. Proteggere le Credenziali nei File di Configurazione (~/.aws/credentials)
Il file delle credenziali condivise, tipicamente ~/.aws/credentials, è comodo ma dovrebbe essere un'opzione di ripiego per i casi in cui non puoi utilizzare IAM Identity Center o i ruoli. Se devi memorizzare chiavi statiche lì, proteggi il file e mantieni i permessi ristretti.
Protezione del File e Permessi
È fondamentale limitare l'accesso in lettura a questo file. Su sistemi Linux/macOS, imposta i permessi in modo che solo il proprietario possa leggere o scrivere il file:
chmod 600 ~/.aws/credentials
Utilizzo dei Profili per la Segregazione
Utilizzare profili distinti ti permette di separare le credenziali per diversi ambienti (ad esempio, sviluppo, staging, produzione) o diversi account. Questo previene azioni accidentali tra ambienti.
Esempio di ~/.aws/credentials:
[default]
aws_access_key_id = AKIAEXAMPLE000000000
aws_secret_access_key = exampleSecretAccessKeyDoNotUse
[production-user]
aws_access_key_id = AKIAEXAMPLE111111111
aws_secret_access_key = anotherExampleSecretDoNotUse
Quando utilizzi un profilo nominato, devi specificarlo con il flag --profile:
aws s3 ls --profile production-user
2. Sfruttare le Variabili d'Ambiente
Le variabili d'ambiente forniscono credenziali al processo corrente e ai suoi processi figli senza modificare i file di configurazione AWS. Sono utili per sessioni temporanee e lavori CI, ma possono comunque essere esposte attraverso ambienti di processo, log di debug o una cronologia della shell poco attenta.
Imposta le seguenti variabili nella tua sessione della shell:
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_SESSION_TOKEN="temporary-session-token-if-using-sts"
export AWS_DEFAULT_REGION="us-east-1"
Nota Importante sulla Precedenza: Le credenziali impostate tramite variabili d'ambiente sovrascrivono sempre quelle trovate nel file ~/.aws/credentials, poiché appaiono più in alto nella catena di caricamento delle credenziali.
Avviso di Sicurezza: Fai attenzione quando esporti variabili d'ambiente, specialmente in terminali condivisi o script che potrebbero essere registrati. Rimuovile sempre immediatamente dopo l'uso:
unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY unset AWS_SESSION_TOKEN
3. Preferire i Ruoli IAM per i Carichi di Lavoro AWS
Per i carichi di lavoro in esecuzione sull'infrastruttura AWS, come EC2, Lambda, ECS ed EKS, evita le credenziali statiche. Utilizza i ruoli IAM in modo che AWS emetta automaticamente credenziali temporanee.
Su EC2, un profilo dell'istanza espone credenziali temporanee tramite IMDS. Su ECS, i ruoli delle attività espongono credenziali tramite l'endpoint delle credenziali del contenitore. Su EKS, i Ruoli IAM per gli Account di Servizio utilizzano token di identità web. Il AWS CLI e gli SDK sanno come utilizzare questi provider senza memorizzare chiavi a lunga durata su disco.
Come Funziona:
- Un'istanza EC2 viene avviata con un ruolo IAM associato tramite un profilo dell'istanza.
- Il CLI in esecuzione su quell'istanza interroga il Servizio di Metadati delle Istanze (IMDS) per credenziali temporanee.
- Il CLI utilizza queste credenziali temporanee per tutte le successive chiamate API.
Questo elimina completamente il rischio associato alle chiavi di accesso a lunga durata.
4. Utilizzare IAM Identity Center per l'Accesso Umano
Per gli ingegneri che utilizzano il AWS CLI dai laptop, IAM Identity Center è solitamente più sicuro delle chiavi di accesso degli utenti IAM. Accedi tramite un browser, scegli un account e un ruolo, e il CLI utilizza credenziali a breve durata memorizzate nella cache.
Configuralo con:
aws configure sso
Poi accedi quando la tua sessione scade:
aws sso login --profile <nome-profilo>
IAM Identity Center era precedentemente chiamato AWS SSO, quindi potresti ancora vedere sso nei comandi CLI e nelle chiavi di configurazione.
5. Utilizzare credential_process per Broker Esterni
Puoi configurare il CLI per chiamare uno strumento esterno, come un agente di vault o un broker di credenziali aziendale, per ottenere credenziali dinamicamente. Questo viene specificato in ~/.aws/config:
Esempio di ~/.aws/config:
[profile my-vault-profile]
region = us-west-2
credential_process = /usr/local/bin/my-vault-cli get-aws-creds --profile my-vault-profile
Questo metodo è cruciale quando si integra con strumenti di gestione dei segreti come HashiCorp Vault.
Riepilogo e Checklist delle Migliori Pratiche
Per massimizzare la sicurezza delle tue operazioni AWS CLI, attieniti a questi principi fondamentali:
- Principio del Minimo Privilegio: Assicurati che tutti gli utenti e i ruoli IAM abbiano solo le autorizzazioni strettamente necessarie per svolgere i loro compiti.
- Preferire i Ruoli alle Chiavi: Utilizza sempre i Ruoli IAM (Profili delle Istanza) quando operi all'interno dell'infrastruttura AWS.
- Utilizzare IAM Identity Center: Per l'uso interattivo umano, utilizza IAM Identity Center per gestire l'accesso a più account.
- Non Codificare Mai le Chiavi: Evita di inserire le Chiavi di Accesso direttamente in script, codice sorgente o cronologia dei comandi.
- Proteggere il File delle Credenziali: Limita i permessi del filesystem (
chmod 600) su~/.aws/credentials. - Ruotare le Chiavi Regolarmente: Se devono essere utilizzate chiavi statiche, imposta un programma di rotazione rigoroso.
Il tuo default dovrebbero essere le credenziali temporanee: IAM Identity Center per le persone, ruoli IAM per i carichi di lavoro e credential_process per l'accesso aziendale intermediato. Utilizza le chiavi di accesso statiche solo quando non c'è un'opzione migliore, poi limitale strettamente, ruotale e rimuovile non appena la dipendenza è scomparsa.