Come posso risolvere gli errori di accesso negato o di operazione non autorizzata con una policy IAM?

10 minuti di lettura
0

Sto cercando di eseguire un'azione su una risorsa AWS e ho ricevuto un errore di accesso negato o operazione non autorizzata. Come posso risolvere questi problemi di autorizzazione?

Breve descrizione

Per risolvere i problemi relativi alle policy di AWS Identity and Access Management (IAM):

Risoluzione

Identifica il chiamante API e comprendi i messaggi di errore

Importante:

Assicurati che le chiamate API siano effettuate per conto dell'entità IAM corretta prima di esaminare le policy IAM. Se il messaggio di errore non include le informazioni sul chiamante, segui questi passaggi per identificare il chiamante dell'API:

  1. Apri la Console di gestione AWS.
  2. Nell'angolo in alto a destra della pagina, scegli la freccia accanto alle informazioni sull'account.
  3. Se hai effettuato l'accesso come ruolo IAM, consulta "Attualmente attivo come" per il nome del ruolo assunto e "ID account" per l'ID dell'account.
  4. Se hai effettuato l'accesso come utente federato, fai riferimento a “Utente federato” per il nome del ruolo federativo e il nome della sessione del ruolo.

-oppure-

Usa il comando AWS CLI get-caller-identity per identificare il chiamante API. Puoi anche utilizzare il comando AWS CLI con il flag \ --debug per identificare l'origine delle credenziali dall'output in modo simile al seguente:

2018-03-13 16:23:57,570 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials

Controlla le autorizzazioni della policy IAM

Verifica se le autorizzazioni necessarie sono concesse al chiamante API controllando le policy IAM allegate. Per ulteriori informazioni, consulta Determining whether a request is allowed or denied within an account.

Valuta gli SCP di AWS Organizations

Se l'account AWS fa parte di un'organizzazione AWS, gli SCP possono essere applicati a livello gerarchico per consentire o negare azioni. Le autorizzazioni SCP vengono ereditate da tutte le entità IAM nell'account AWS. Assicurati che il chiamante API non sia esplicitamente negato nell'SCP.

Assicurati che l'API chiamata non sia esplicitamente negata in una policy SCP organizzativa che ha un impatto sul chiamante

Rivedi le policy basate sull'identità e sulle risorse

Assicurati che sia presente una dichiarazione di autorizzazione esplicita nella policybasata sull'identità delle entità IAM per il chiamante API. Quindi, assicurati che l'API supporti le autorizzazioni a livello di risorsa. Se il chiamante dell'API non supporta le autorizzazioni a livello di risorsa, assicurati che il carattere jolly "*" sia specificato nell'elemento risorsa della dichiarazione della policy IAM.

Puoi allegare policy basate sulle risorse a una risorsa all'interno del servizio AWS per fornire l'accesso. Per ulteriori informazioni, consulta Identity-based policies and resource-based policies.

Per visualizzare il riepilogo della policy IAM:

  1. Apri la console IAM.
  2. Nel riquadro di navigazione, scegli Policy.
  3. Scegli la freccia accanto al nome della policy per visualizzare i dettagli della policy.

Nel seguente esempio, la policy non funziona perché non tutte le azioni API Amazon Elastic Compute Cloud (Amazon EC2) supportano le autorizzazioni a livello di risorsa:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SorryThisIsNotGoingToWorkAsExpected",
            "Effect": "Allow",
            "Action": ["ec2:*"],
            "Resource": "arn:aws:ec2:us-east-1:accountid:instance/*"
        }
    ]
}

Gli utenti IAM che tentano di avviare un'istanza Amazon EC2 nella Regione us-east-1 con il comando run-instances AWS CLI ricevono un messaggio di errore simile al seguente:

"An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message:…"

Per risolvere questo problema, cambia la risorsa con un carattere jolly "*". Ciò si verifica perché Amazon EC2 supporta solo autorizzazioni parziali a livello di risorsa.

Per decodificare il messaggio di errore di autorizzazione e ottenere maggiori dettagli sulla causa dell’errore, utilizza un'azione API DecodeAuthorizationMessage simile alla seguente:

$ aws sts decode-authorization-message --encoded-message <encoded-message-from-the-error>

Verifica i limiti delle autorizzazioni

Se all'entità IAM è associato un limite di autorizzazione, il limite imposta le autorizzazioni massime di cui dispone l'entità.

Valuta le policy delle sessioni

Se il chiamante API è un ruolo IAM o un utente federato, le policy di sessione vengono passate per la durata della sessione. Le autorizzazioni per una sessione sono l'intersezione delle policy basate sull'identità dell'entità IAM utilizzata per creare la sessione e le policy di sessione. Assicurati che la chiamata API esista nella policy e nell'entità IAM.

Assicurati che le chiavi di condizione nella policy siano supportate dalle API

Le chiavi di condizione AWS possono essere utilizzate per confrontare gli elementi di una richiesta API effettuata ad AWS con i valori chiave specificati in una policy IAM. Le chiavi di condizione possono essere una chiave di condizione globale o definite dal servizio AWS. Le chiavi di condizione specifiche del servizio AWS possono essere utilizzate solo all'interno di quel servizio (ad esempio condizioni EC2 sulle azioni API EC2). Per ulteriori informazioni, consulta Actions, resources, and condition context keys for AWS services.

Un elemento di condizione può contenere più condizioni e all'interno di ogni blocco di condizioni può contenere più coppie chiave-valore. Per ulteriori informazioni, consulta Creating a condition with multiple keys or values.

In questa policy di esempio, l'elemento condizione viene abbinato se una richiesta API IAM viene richiamata dall'amministratore dell'utente IAM e l'indirizzo IP di origine è 1.1.1.0/24 o 2.2.2.0/24.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:username": "admin"
        },
        "IpAddress": {
          "aws:SourceIp": [
            "1.1.1.0/24",
            "2.2.2.0/24"
          ]
        }
      }
    }
  ]
}

Errori delle policy IAM ed esempi di risoluzione dei problemi

Guarda i seguenti esempi per identificare il messaggio di errore, il chiamante API, l'API e le risorse chiamate:

Esempio di messaggio di erroreChiamante APIAPIRisorseQuando
A: "An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation."sconosciutoDescribeInstancessconosciutoora in cui si verifica l'errore
B: "An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::123456789012:user/test is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/EC2-FullAccess"arn:aws:iam::123456789012:user/testAssumeRolearn:aws:iam::123456789012:role/EC2-FullAccessora in cui si verifica l'errore
C: "An error occurred (AccessDenied) when calling the GetSessionToken operation: Cannot call GetSessionToken with session credentials"sconosciutoGetSessionTokensconosciutoora in cui si verifica l'errore
D: "An error occurred (UnauthorizedOperation) when calling the AssociateIamInstanceProfile operation: You are not authorized to perform this operation. Encoded authorization failure message: ...."sconosciutoAssociateIamInstanceProfilesconosciutoora in cui si verifica l'errore

Utilizzando questo metodo di valutazione, puoi identificare la causa dei messaggi di errore dovuti a problemi di autorizzazione per diversi servizi AWS. Per maggiori dettagli, consulta i seguenti messaggi di errore e le procedure per la risoluzione dei problemi:

Esempio di messaggio di errore A:

Questo messaggio di errore indica che non disponi dell'autorizzazione per chiamare l'API DescribeInstances.

Per risolvere questo errore, procedi come segue:

  1. Identifica il chiamante API.
  2. Verifica che l'azione API ec2:DescribeInstances non sia inclusa in nessuna dichiarazione di rifiuto.
  3. Verifica che l'azione API ec2:DescribeInstances sia inclusa nelle dichiarazioni di autorizzazione.
  4. Conferma che non sia stata specificata alcuna risorsa per questa azione API. Nota: questa azione API non supporta le autorizzazioni a livello di risorsa.
  5. Verifica che tutte le condizioni IAM specificate nella dichiarazione di autorizzazione siano supportate dall'azione DescribeInstances e che le condizioni siano soddisfatte.

Per ulteriori informazioni, consulta DescribeInstanceStatus.

Esempio di messaggio di errore B:

Questo messaggio di errore include il nome dell'API, il chiamante API e la risorsa di destinazione. Assicurati che l'identità IAM che ha chiamato l'API abbia l'accesso corretto alle risorse. Rivedi le policy IAM utilizzando il metodo di valutazione precedente.

Per risolvere questo errore, segui questi passaggi per confermare la policy di attendibilità del ruolo IAM: EC2-FullAccess:

  1. Conferma che arn:aws:iam::123456789012:user/test o arn:aws:iam::123456789012:root non sia incluso in nessuna dichiarazione di rifiuto della policy di attendibilità.
  2. Conferma che arn:aws:iam::123456789012:user/test o arn:aws:iam::123456789012:root sia incluso nella dichiarazione di autorizzazione della policy di attendibilità.
  3. Verifica che tutte le condizioni IAM specificate in tale dichiarazione di autorizzazione siano supportate dall'azione dell'API sts:AssumeRole e corrispondano.

Segui questi passaggi per confermare le policy IAM associate al chiamante API (arn:aws:iam::123456789012:user/test):

  1. Conferma che arn:aws:iam::123456789012:role/EC2-FullAccess non sia incluso in nessuna dichiarazione di rifiuto con l'azione dell'API sts:AssumeRole.
  2. Se arn:aws:iam::123456789012:root è presente nella dichiarazione di autorizzazione della policy di attendibilità, conferma che arn:aws:iam::123456789012:role/EC2-FullAccess sia incluso nella dichiarazione di autorizzazione delle policy IAM con l'azione API sts:AssumeRole.
  3. Verifica che tutte le condizioni IAM specificate in tale dichiarazione di autorizzazione siano supportate dall'azione e dalla corrispondenza dell'API sts:AssumeRole.

Esempio di messaggio di errore C:

Questo messaggio di errore indica che get-session-token non è supportato dalle credenziali temporanee. Per ulteriori informazioni, consulta Comparing the AWS STS API operations.

Esempio di messaggio di errore D:

Questo messaggio di errore restituisce un messaggio codificato che può fornire dettagli sull'errore di autorizzazione. Per decodificare il messaggio di errore e ottenere i dettagli dell'errore di autorizzazione, consulta DecodeAuthorizationMessage. Dopo avere decodificato il messaggio di errore, identifica il chiamante API e rivedi le autorizzazioni e le condizioni a livello di risorsa.

Per risolvere questo errore, segui questi passaggi per rivedere le autorizzazioni delle policy IAM:

  1. Se il messaggio di errore indica che l'API è stata rifiutata esplicitamente, rimuovi le azioni API ec2:AssociateIamInstanceProfile o iam:PassRole dalla dichiarazione corrispondente.
  2. Verifica che ec2:AssociateIamInstanceProfile e iam:PassRole siano presenti nella dichiarazione di autorizzazione con destinazioni di risorse supportate e corrette. Ad esempio, conferma che le destinazioni delle risorse dell'azione API ec2:AssociateIamInstanceProfile siano istanze EC2 e le destinazioni delle risorse di iam:PassRole siano ruoli IAM.
  3. Se le azioni API ec2:AssociateIamInstanceProfile e iam:PassRole sono incluse nella stessa dichiarazione di autorizzazione, conferma che tutte le condizioni siano supportate dalle azioni API ec2:AssociateIamInstanceProfile e iam:PassRole e che le condizioni corrispondano.
  4. Se le azioni API ec2:AssociateIamInstanceProfile e iam:PassRole sono contenute in dichiarazioni di autorizzazione separate, conferma che tutte le condizioni in ciascuna dichiarazione di autorizzazione siano supportate da un'azione e che le condizioni corrispondano.

Per ulteriori informazioni, consulta Policy evaluation logic e Determining whether a request is allowed or denied within an account.


Informazioni correlate

Troubleshoot IAM policies

Perché ho ricevuto un errore “AccessDenied” o “Informazioni non valide” nel tentativo di assumere un ruolo IAM tra account?

IAM JSON policy elements reference