Best Practices for Securely Managing Credentials with the AWS CLI
Gestire le credenziali in modo sicuro è fondamentale quando si interagisce con Amazon Web Services (AWS) tramite l'interfaccia a riga di comando (CLI). Le chiavi di accesso (ID chiave di accesso e Chiave di accesso segreta) garantiscono l'accesso programmatico alle tue risorse cloud, rendendo la loro compromissione un rischio significativo per la sicurezza. Questo articolo delinea le migliori pratiche fondamentali per l'archiviazione, la gestione e l'utilizzo di queste credenziali al fine di minimizzare l'esposizione e mantenere una solida postura di sicurezza durante l'automazione di attività o la gestione di risorse tramite la CLI.
L'AWS CLI si basa su metodi specifici per individuare le credenziali. Comprendere questi metodi—dai file di configurazione alle variabili d'ambiente e ai Ruoli IAM—è il primo passo verso la messa in sicurezza del tuo ambiente. Esploreremo l'ordine di precedenza consigliato e metteremo in evidenza alternative moderne e più sicure alla codifica rigida dei segreti (hardcoding).
Comprensione dell'Ordine di Caricamento delle Credenziali nell'AWS CLI
L'AWS CLI risolve le credenziali utilizzando una gerarchia definita. Conoscere quest'ordine ti aiuta a capire dove la CLI cerca prima le credenziali e assicura che la configurazione più sicura e che intendi utilizzare abbia la precedenza.
La CLI verifica la presenza delle credenziali nel seguente ordine (dalla priorità più alta alla più bassa):
- Opzioni della riga di comando: Credenziali passate direttamente tramite flag (
--access-key-ide--secret-access-key). - Variabili d'ambiente: Credenziali impostate nella sessione shell corrente.
- Processo di credenziali (Credential Process): L'output di un processo di credenziali configurato (spesso utilizzato da SSO o strumenti esterni).
- Catena di provider di credenziali AWS (AWS Credential Provider Chain): Questa catena verifica quanto segue in ordine:
a. Credenziali da un Ruolo IAM assegnato all'istanza EC2 o all'attività ECS in esecuzione.
b. Credenziali archiviate nel file di credenziali condiviso (~/.aws/credentials). - File di configurazione: Se non vengono trovate credenziali, la CLI interromperà la ricerca.
Suggerimento per la Sicurezza: Affidarsi ai flag della riga di comando è generalmente sconsigliato per l'uso regolare, poiché la cronologia dei comandi (
.bash_history) può esporre informazioni sensibili.
1. Protezione delle Credenziali nei File di Configurazione (~/.aws/credentials)
Per impostazione predefinita, l'AWS CLI memorizza le credenziali nel file di credenziali condiviso, in genere situato in ~/.aws/credentials. Sebbene sia comodo, questo file deve essere protetto.
Protezione e Autorizzazioni dei File
È fondamentale limitare l'accesso in lettura a questo file. Sui sistemi Linux/macOS, imposta le autorizzazioni in modo che solo il proprietario possa leggere o scrivere il file:
chmod 600 ~/.aws/credentials
Utilizzo dei Profili per la Segregazione
L'utilizzo di profili distinti consente di separare le credenziali per ambienti diversi (ad esempio, sviluppo, staging, produzione) o account diversi. Ciò previene azioni accidentali tra ambienti diversi.
Esempio di ~/.aws/credentials:
[default]
aws_access_key_id = AKIABCDEFGHIJKLMNO
aws_secret_access_key = xYzdEfGhIjKlMnOpQrStUvWxYz1234567890
[production-user]
aws_access_key_id = AKIA9876543210ZYXWVU
aws_secret_access_key = aBcDeFgHiJkLmNoPqRsTuVwXyZ9876543210
Quando si utilizza un profilo denominato, è necessario specificarlo con il flag --profile:
aws s3 ls --profile production-user
2. Sfruttare le Variabili d'Ambiente
Le variabili d'ambiente offrono un modo dinamico per fornire le credenziali alla sessione CLI senza scriverle su disco. Questo è spesso preferito per l'accesso temporaneo o all'interno di ambienti di scripting in cui la scrittura su disco è limitata o indesiderabile.
Imposta le seguenti variabili nella tua sessione shell:
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="us-east-1"
Nota Importante sulla Precedenza: Le credenziali impostate tramite variabili d'ambiente prevalgono sempre su quelle trovate nel file ~/.aws/credentials, poiché compaiono 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 (loggati). Annulla sempre l'impostazione (unset) immediatamente dopo l'uso:
bash unset AWS_ACCESS_KEY_ID unset AWS_SECRET_ACCESS_KEY
3. Il Metodo Più Sicuro: Ruoli IAM (Profili Istanza/Identità Web)
Per i carichi di lavoro in esecuzione sull' infrastruttura AWS (come istanze EC2, funzioni Lambda o attività ECS), la pratica più sicura è non utilizzare mai credenziali statiche. Utilizza invece i Ruoli IAM.
I Ruoli IAM consentono di assegnare credenziali di sicurezza temporanee e ruotate automaticamente alla risorsa tramite il servizio di metadati dell'istanza. L'AWS CLI rileva e utilizza automaticamente queste credenziali senza che vengano mai archiviate sul disco o nelle variabili d'ambiente.
Come funziona:
- Un'istanza EC2 viene avviata con un Ruolo IAM associato.
- La CLI in esecuzione su tale istanza interroga il Servizio di Metadati dell'Istanza (IMDS) per le credenziali temporanee.
- La CLI utilizza queste credenziali temporanee per tutte le successive chiamate API.
Ciò elimina completamente il rischio associato alle chiavi di accesso a lunga durata.
4. Utilizzo del Processo di Credenziali e SSO
La gestione moderna delle credenziali si affida sempre più a provider di autenticazione esterni, spesso integrati tramite la configurazione credential_process.
AWS SSO (Single Sign-On)
AWS SSO fornisce un modo unificato per gestire l'accesso a più account e ruoli utilizzando provider di identità (IdP) esistenti. L'AWS CLI si integra perfettamente con SSO, astraendo la gestione dei token di sessione temporanei.
Per iniziare a utilizzare SSO, devi prima eseguire il comando di login:
aws sso login --profile <profile-name>
Questo apre una finestra del browser per l'autenticazione. Una volta completata con successo, la CLI memorizza i token di sessione necessari, spesso utilizzando il meccanismo credential_process internamente per aggiornare automaticamente i token, il che significa che non gestisci chiavi segrete grezze.
Configurazione di credential_process
Puoi configurare la CLI per chiamare uno strumento esterno (come un agente vault o un helper SSO) per recuperare le credenziali in modo dinamico. Questo è specificato nel file di configurazione:
Esempio ~/.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 delle Best Practices e Checklist
Per massimizzare la sicurezza delle tue operazioni AWS CLI, aderisci 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 propri compiti.
- Preferisci i Ruoli alle Chiavi: Utilizza sempre i Ruoli IAM (Profili Istanza) quando operi all'interno dell'infrastruttura AWS.
- Usa SSO: Per l'uso interattivo umano, sfrutta AWS SSO per gestire l'accesso a più account.
- Non Codificare Mai Rigidamente (Hardcode) le Chiavi: Evita di inserire le Chiavi di Accesso direttamente in script, codice sorgente o cronologia dei comandi.
- Proteggi il File delle Credenziali: Limita le autorizzazioni del filesystem (
chmod 600) su~/.aws/credentials. - Ruota Regolarmente le Chiavi: Se devono essere utilizzate chiavi statiche, imporre una rigorosa pianificazione della rotazione.
Dando la priorità ai metodi di acquisizione dinamica delle credenziali come i Ruoli IAM e SSO rispetto alle chiavi di accesso statiche archiviate su disco, riduci significativamente la superficie di attacco associata all'uso dell'AWS CLI.