Risoluzione dei problemi di 'Accesso negato' e autenticazione nella AWS CLI

Risolvi sistematicamente gli errori di 'Accesso negato' e di autenticazione quando utilizzi la AWS CLI. Questa guida copre passaggi diagnostici essenziali, a partire dalla convalida delle credenziali utilizzando `aws sts get-caller-identity`, esaminando la complessa gerarchia di valutazione delle policy IAM e risolvendo i problemi derivanti da credenziali temporanee o policy basate su risorse (come le policy dei bucket S3). Impara a utilizzare comandi chiave e l'IAM Policy Simulator per identificare e correggere rapidamente i fallimenti di autorizzazione nel tuo ambiente AWS.

44 visualizzazioni

Risoluzione dei problemi di 'Accesso negato' e di autenticazione nell'AWS CLI

Riscontrare errori di Accesso negato o fallimenti inattesi nell'autenticazione durante l'utilizzo dell'AWS Command Line Interface (CLI) è uno degli ostacoli più frequenti che sviluppatori e amministratori di sistema devono affrontare. Questi problemi sono quasi sempre dovuti a policy IAM (Identity and Access Management) configurate in modo errato, credenziali temporanee scadute o una configurazione errata dell'ambiente CLI.

La risoluzione efficace di questi errori richiede un approccio sistematico, che inizia con la conferma dell'identità e delle credenziali e prosegue con una valutazione dettagliata delle policy IAM. Questa guida completa fornisce passaggi attuabili e comandi diagnostici per identificare e correggere rapidamente i problemi di autorizzazione comuni nell'AWS CLI, garantendo la possibilità di gestire le risorse in modo efficace.


1. Diagnosi Iniziale: Identificazione del Chiamante e delle Credenziali

Prima di immergersi nell'analisi complessa delle policy, il primo passo è confermare in modo definitivo quale identità IAM stia utilizzando l'AWS CLI e se tali credenziali siano ancora valide.

Verifica dell'Identità Corrente: sts get-caller-identity

Questo è il comando diagnostico più critico. Ti indica esattamente quale ARN utente, ARN ruolo o sessione di ruolo assunto sta eseguendo i comandi AWS successivi.

aws sts get-caller-identity

Output Previsto:

{
    "UserId": "AIDAIAMUSERID",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/DevUser"
}

Se l'ARN restituito non corrisponde all'utente o al ruolo che ti aspetti, stai operando con il profilo AWS o le variabili d'ambiente errati.

Verifica della Configurazione del Profilo e della Regione

Assicurati che venga utilizzato il profilo AWS corretto, specificato tramite il flag --profile o impostato tramite la variabile d'ambiente AWS_PROFILE.

# Controlla le impostazioni configurate per il profilo predefinito
aws configure list

# Oppure controlla un profilo specifico
aws configure list --profile prod-admin

Se l'output non mostra alcuna regione o una regione errata, le operazioni su risorse globali o servizi specifici per regione (come bucket S3 o istanze EC2) potrebbero fallire, a volte risultando in un Accesso negato se la risorsa non viene trovata dove la CLI la sta cercando.

Suggerimento: Se il comando sts get-caller-identity stesso fallisce con un errore di autenticazione, indica un problema fondamentale con le chiavi di accesso (potrebbero essere state eliminate, revocate o essere errate).

Gestione delle Credenziali Temporanee

Se stai utilizzando un Ruolo IAM (tramite STS AssumeRole), la CLI opera su credenziali temporanee che includono un SessionToken. Queste credenziali scadono (tipicamente dopo 1 ora). Sebbene l'AWS CLI di solito le aggiorni automaticamente quando le ottiene dalla catena di provider di credenziali standard, le configurazioni manuali possono fallire.

Sintomo: I comandi funzionano inizialmente, ma falliscono dopo un periodo prestabilito (ad esempio, 60 minuti) con un errore di autenticazione.

Soluzione: Se si utilizza uno script personalizzato o un ambiente caricato manualmente, assicurati che il tuo metodo per assumere il ruolo includa un meccanismo per aggiornare le credenziali quando scadono.


2. Approfondimento su Policy IAM e Autorizzazione

Una volta confermata l'identità in uso, il passo successivo è determinare perché quell'identità manca delle autorizzazioni necessarie. I fallimenti di autorizzazione AWS sono complessi perché più policy vengono valutate contemporaneamente.

La Gerarchia di Valutazione delle Policy IAM

Gli errori di autorizzazione si verificano tipicamente a causa di uno dei seguenti componenti delle policy:

  1. Negazione Esplicita: Una dichiarazione Deny esplicita in qualsiasi policy applicabile (Identità, Risorsa o Limite di autorizzazione) prevale sempre su una dichiarazione Allow.
  2. Mancanza di Permesso Allow: Nessuna policy applicabile all'identità o alla risorsa concede l'azione specifica.

A. Policy Basate sull'Identità (Utenti e Ruoli)

Controlla le policy IAM allegate direttamente all'utente o al ruolo che viene assunto. Cerca:

  • Azioni Mancanti: La policy elenca specificamente l'azione API necessaria (ad esempio, s3:ListBucket, ec2:DescribeInstances)?
  • Vincoli sulle Risorse: La policy limita l'azione a risorse specifiche utilizzando l'elemento Resource? Un errore comune è impostare Resource: "*" quando l'azione richiede un ARN specifico, o viceversa.
  • Condizioni: Ci sono condizioni (ad esempio, indirizzo IP di origine, ora del giorno, MFA richiesto) che non vengono soddisfatte?

B. Policy Basate sulle Risorse (S3, SQS, KMS)

Per servizi come S3 o KMS, la risorsa stessa ha una policy che detta chi può accedervi. Anche se la policy del tuo Utente IAM consente esplicitamente l'accesso, la Policy della Risorsa deve anche consentire all'utente di eseguire l'azione.

Esempio: Il tentativo di accedere a un bucket S3 (Policy della Risorsa) che ha un Deny esplicito per tutti gli utenti al di fuori di uno specifico VPC Endpoint risulterà in Accesso negato, indipendentemente dalla policy IAM dell'utente.

C. Limiti di Autorizzazione e SCP

Se la tua organizzazione utilizza AWS Organizations, le Service Control Policies (SCPs) definiscono le autorizzazioni massime consentite all'interno di un account. Allo stesso modo, i Limiti di Autorizzazione limitano le autorizzazioni massime che un'entità IAM può mai possedere.

Se l'SCP o il Limite di autorizzazione nega l'azione richiesta, l'operazione CLI fallirà, anche se la Policy dell'Identità concede l'autorizzazione.

Strumento Pratico: Simulatore di Policy IAM

Quando si risolvono problemi complessi, il Simulatore di Policy IAM nella AWS Management Console è prezioso. Puoi testare un'azione specifica (ad esempio, s3:GetObject) contro una risorsa specifica (ad esempio, arn:aws:s3:::my-bucket/key) e specificare l'entità IAM, aiutandoti a individuare esattamente quale dichiarazione di policy sta causando la negazione.


3. Scenari e Soluzioni Comuni di 'Accesso Negato'

Scenario 1: Accesso S3 Negato (Risorsa vs. Identità)

L'errore Accesso negato di S3 è noto perché può derivare sia dalla Policy Utente che dalla Policy del Bucket.

Causa Diagnosi Soluzione
Mancanza di permesso Allow nella Bucket Policy sts get-caller-identity funziona, ma aws s3 ls fallisce. Modifica la Bucket Policy per consentire esplicitamente all'ARN chiamante di eseguire le azioni necessarie (s3:ListBucket, s3:GetObject).
Mancanza di permessi di Decrypt per KMS L'accesso a oggetti crittografati fallisce (anche se la policy S3 lo consente). Assicurati che l'entità IAM abbia i permessi per utilizzare la chiave KMS sottostante (kms:Decrypt) che ha crittografato l'oggetto.
Requester Pays I tentativi di scaricare file di grandi dimensioni falliscono. Se il bucket richiede Requester Pays, il comando CLI deve includere il flag --request-payer requester.

Scenario 2: Negazione Implicita Dovuta a Fallimenti delle Condizioni

Molte policy utilizzano condizioni che applicano le migliori pratiche di sicurezza, come la richiesta di Multi-Factor Authentication (MFA).

Se la tua policy include una condizione come:

"Condition": {
    "Bool": {
        "aws:MultiFactorAuthPresent": "true"
    }
}

E tenti di eseguire un comando senza MFA autenticato, l'azione verrà implicitamente negata.

Soluzione: Per i comandi che richiedono MFA, devi prima creare una sessione STS autenticata con il tuo dispositivo MFA:

# 1. Ottieni credenziali temporanee utilizzando il tuo token MFA
aws sts get-session-token --serial-number arn:aws:iam::123456:mfa/user --token-code 123456

# 2. Esporta l'AccessKeyId, SecretAccessKey e SessionToken risultanti come variabili d'ambiente per la tua sessione CLI.

Scenario 3: Regione Mancante o Errata

Sebbene non sia sempre un errore di Accesso negato, il tentativo di eseguire un'azione su una risorsa senza specificare la regione corretta spesso porta a fallimenti di autorizzazione o di risorsa non trovata, specialmente quando si lavora con servizi regionali come EC2, DynamoDB o EKS.

Soluzione: Definisci esplicitamente la regione nel tuo comando o assicurati che il tuo profilo sia configurato correttamente.

aws ec2 describe-instances --region us-west-2

4. Riepilogo dei Comandi Diagnostici

Utilizza questa lista di controllo di comandi per diagnosticare rapidamente la catena di fallimenti di autorizzazione:

Obiettivo Comando Scopo
Verifica Identità aws sts get-caller-identity Conferma l'ARN che esegue il comando.
Verifica Configurazione aws configure list Controlla le impostazioni del profilo, la regione e il formato di output.
Test Validità Policy (Usa il Simulatore di Policy IAM) Controlla se un'identità IAM può eseguire un'azione API specifica su una risorsa.
Identifica Negazioni Policy aws cloudtrail lookup-events ... Usa CloudTrail per vedere il record esatto dell'evento in cui la valutazione della policy è fallita.

Conclusione: Migliori Pratiche per la Prevenzione

Per minimizzare gli errori di Accesso negato nell'AWS CLI, adotta queste migliori pratiche di sicurezza e operative:

  1. Usa il Principio del Minimo Privilegio: Non concedere accesso * (jolly) a meno che non sia assolutamente necessario. Limita rigorosamente le policy alle azioni e alle risorse richieste.
  2. Usa Ruoli IAM: Prediligi l'assunzione di Ruoli IAM rispetto all'utilizzo di chiavi Utente IAM a lunga durata, specialmente in script o pipeline CI/CD. Questo limita il tempo di esposizione se le credenziali vengono divulgate.
  3. Controlla CloudTrail: Se il problema persiste, la fonte autorevole è AWS CloudTrail. Un evento registrato per una chiamata API fallita spesso includerà la ragione del fallimento (ad esempio, Deny by Policy X, MFA required).
  4. Gestisci i Profili: Denomina e gestisci chiaramente profili separati per diversi account o ruoli AWS (--profile). Evita di mescolare variabili d'ambiente con la configurazione del profilo.