Come posso ottenere dati per la risoluzione dei problemi relativi all'accesso negato o non autorizzato alle autorizzazioni IAM?

6 minuti di lettura
0

Sto cercando di accedere a una risorsa AWS e ho ricevuto un errore di "accesso negato" o "non autorizzato". Come posso ottenere dati che aiutino a risolvere questi errori nelle chiamate API di AWS Identity and Access Management (IAM)?

Breve descrizione

Puoi utilizzare le query di Amazon Athena o l'Interfaccia della linea di comando AWS (AWS CLI) per ottenere i log degli errori relativi ai problemi di chiamata alle API IAM. Quindi, segui le istruzioni per risolvere gli errori di accesso negato o di funzionamento non autorizzato con una policy IAM.

Risoluzione

Nota: se ricevi errori durante l'esecuzione dei comandi di AWS CLI, assicurati di utilizzare la versione più recente di AWS CLI.

Opzione 1: Usa le query Athena per risolvere gli errori di chiamata alle API IAM effettuando una ricerca nei log di CloudTrail

Nota: prima di iniziare, devi creare un percorso per accedere a un bucket Amazon Simple Storage Service (Amazon S3). Questo perché Athena utilizza eventi registrati nei file di log di AWS CloudTrail che vengono consegnati a un bucket Amazon S3 per quel percorso.

  1. Segui i passaggi indicati nella sezione relativa alla creazione della tabella Athena di Come posso creare automaticamente tabelle in Athena per cercare nei log di AWS CloudTrail?

Nota: le tabelle Athena create automaticamente si trovano nella stessa Regione AWS del tuo bucket Amazon S3.

  1. Apri la console Athena, quindi scegli il segno più "+" per creare una nuova query.

  2. Inserisci la seguente query di esempio, quindi scegli Esegui.

In questa query di esempio, il formato dell'ora utilizza il formato base ISO 8601 con la variabile Z per UTC.

Nota: sostituisci your-arn con il nome della risorsa Amazon (ARN) per le tue risorse e your-table con il nome della tua tabella.

SELECT from_iso8601_timestamp(eventTime) AS "Time", useridentity.arn AS "Identity ARN", eventID AS "Event ID",
         eventsource AS "Service", eventname AS "Action", errorCode AS "Error", errorMessage AS "Message"
FROM your-table
WHERE from_iso8601_timestamp(eventtime) >= from_iso8601_timestamp('2019-10-29T06:40:00Z')
        AND from_iso8601_timestamp(eventtime) < from_iso8601_timestamp('2019-10-29T06:55:00Z')
        AND userIdentity.arn = 'your-arn'
        AND eventType = 'AwsApiCall'
        AND errorCode is not null
        AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%')
ORDER BY eventTime desc
  1. L'output di questa tabella di esempio elenca gli errori di autorizzazione per l'identità ARN:
| Time                        | Event ID                             | Service                  | Action       | Error        | Message                                                                                                              |
|-----------------------------|--------------------------------------|--------------------------|--------------|--------------|----------------------------------------------------------------------------------------------------------------------|
| 2019-10-29 06:52:45.000 UTC | 0406f0c1-47a8-4f71-8a94-18267b84042a | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy |
| 2019-10-29 06:41:48.000 UTC | 14e5e77c-f682-45e1-8c88-12d15af293dd | cloudtrail.amazonaws.com | LookupEvents | AccessDenied | User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action |

Nota: gli output degli eventi CloudTrail possono impiegare fino a 15 minuti per fornire risultati.

  1. Facoltativamente, ottieni errori per tutti gli utenti rimuovendo questa riga dalla query di esempio:
AND userIdentity.arn = 'your-arn'
  1. Facoltativamente, ottieni tutti gli errori di un periodo di tempo selezionato rimuovendo questa riga dalla query di esempio:
AND (lower(errorCode) LIKE '%accessdenied%' OR lower(errorCode) LIKE '%unauthorized%')

Opzione 2: usa AWS CLI per risolvere gli errori di chiamata alle API di autorizzazione IAM

Nota: questo script di AWS CLI richiede il processore JSON della linea di comando jq. Per il tutorial e le istruzioni per il download, consulta Formato di output JSON. Per le distribuzioni che utilizzano il pacchetto yum, esegui il seguente comando:

$ sudo yum install jq
  1. Esegui il seguente comando di AWS CLI:

Nota: sostituisci your-arn con gli ARN IAM per le tue risorse.

( echo "Time,Identity ARN,Event ID,Service,Action,Error,Message";
  aws cloudtrail lookup-events --start-time "2019-10-29T06:40:00Z" --end-time "2019-10-29T06:55:00Z" --query "Events[*].CloudTrailEvent" --output text \
    | jq -r ". | select(.userIdentity.arn == \"your-arn\" and .eventType == \"AwsApiCall\" and .errorCode != null
    and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\"))))
    | [.eventTime, .userIdentity.arn, .eventID, .eventSource, .eventName, .errorCode, .errorMessage] | @csv"
) | column -t -s'",'

Nota: la frequenza delle richieste di ricerca verso CloudTrail è limitata a due richieste al secondo, per account, per Regione. Se questo limite viene superato, si verifica un errore di limitazione (della larghezza di banda della rete).

  1. L'output di questa tabella di esempio elenca gli errori di autorizzazione per l'identità ARN del periodo di tempo specificato.

Nota: puoi cercare gli eventi che si sono verificati in una Regione negli ultimi 90 giorni.

Time                  Event ID                              Service                   Action        Error         Message
2019-10-29T06:52:45Z  0406f0c1-47a8-4f71-8a94-18267b84042a  cloudtrail.amazonaws.com  LookupEvents  AccessDenied  User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents with an explicit deny in an identity-based policy
2019-10-29T06:41:48Z  14e5e77c-f682-45e1-8c88-12d15af293dd  cloudtrail.amazonaws.com  LookupEvents  AccessDenied  User: arn:aws:iam::account:user/username is not authorized to perform: cloudtrail:LookupEvents because no identity-based policy allows the cloudtrail:LookupEvents action
  1. (Facoltativo) ottieni errori per tutti gli utenti rimuovendo questa riga:
.userIdentity.arn == \"your-arn\" and
  1. (Facoltativo) ottieni tutti gli errori del periodo di tempo selezionato rimuovendo questa riga:
and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\")))

Risoluzione degli errori non autorizzati

Athena e i precedenti output di esempio di AWS CLI sono rilevanti per le chiamate API LookupEvents di CloudTrail.

Le policy IAM che negano l'accesso perché contengono un'istruzione Deny includono una frase specifica nel messaggio di errore per le negazioni esplicite e implicite. Gli errori di negazione esplicita di IAM contengono la frase "con un rifiuto esplicito in una <type> policy". Gli errori di negazione implicita di IAM contengono la frase "perché nessuna <type> policy consente l' <action> azione".

L’output cloudtrail:LookupEvents con una negazione esplicita indica che una policy IAM associata non è corretta.

Una negazione esplicita può verificarsi per uno qualsiasi di questi tipi di policy. Ad esempio, policy basate sull'identità, policy basate sulle risorse, limiti delle autorizzazioni, SCP delle organizzazioni e policy di sessione. Le dichiarazioni di negazioni esplicite hanno sempre la precedenza sulle istruzioni di autorizzazione. La negazione esplicita esiste nella policy basata sull'identità degli utenti IAM.

L'output cloudtrail:LookupEvents, poiché nessuna policy basata sull'identità consente, indica che la policy basata sull'identità non consente questa azione API con conseguente negazione implicita. La policy basata sull'identità non dispone di una dichiarazione di autorizzazione esplicita per l'azione API cloudtrail:LookupEvents.

I tipi di policy valutati da AWS per stabilire l'accesso sono:

Per ulteriori informazioni su come vengono valutate e gestite le policy IAM, consulta Logica di valutazione delle policy e Gestione delle policy IAM.


Informazioni correlate

Policy e autorizzazioni in IAM

Risoluzione dei problemi relativi alle policy IAM