Risoluzione dei problemi relativi agli autorizzatori - AWS IoT Core

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Risoluzione dei problemi relativi agli autorizzatori

In questo argomento vengono illustrati i problemi comuni che possono causare problemi nei flussi di lavoro di autenticazione personalizzata e i passaggi per risolverli. Per risolvere i problemi nel modo più efficace, abilita CloudWatch i log per AWS IoT Core e imposta il livello di registro su DEBUG. È possibile abilitare CloudWatch i log nella console (https://console.aws.amazon.com/iot/). AWS IoT Core Per ulteriori informazioni sull'attivazione e l'utilizzo dei registri per AWS IoT Core, consulta Configurare la registrazione AWS IoT.

Nota

Se si lascia il livello di registro su DEBUG per lunghi periodi di tempo, CloudWatch potrebbe memorizzare grandi quantità di dati di registrazione. Ciò può aumentare i costi. CloudWatch Prendi in considerazione l'utilizzo della registrazione basata sulle risorse per aumentare la verbosità solo per i dispositivi di un particolare gruppo di oggetti. Per ulteriori informazioni sulle registrazioni basate sulle risorse, consulta Configurare la registrazione AWS IoT. Inoltre, al termine della risoluzione dei problemi, ridurre il livello di registro a un livello meno verboso.

Prima di iniziare la risoluzione dei problemi, consulta Informazioni sul flusso di lavoro di autenticazione personalizzato per una visualizzazione generale del processo di autenticazione personalizzata. Questo ti aiuta a capire dove cercare la fonte di un problema.

In questo argomento vengono illustrate le due seguenti aree da esaminare.

  • Problemi relativi alla funzione Lambda dell’autorizzatore.

  • Problemi relativi al tuo dispositivo.

Controllo della presenza di problemi nella funzione Lambda dell'autorizzatore

Esegui la procedura seguente per assicurarti che i tentativi di connessione dei dispositivi richiamino la funzione Lambda.

  1. Verifica quale funzione Lambda è associata al tuo autorizzatore.

    Puoi farlo chiamando l'DescribeAuthorizerAPI o facendo clic sull'autorizzatore desiderato nella sezione Secure della AWS IoT Core console.

  2. Controlla i parametri di chiamata per la funzione Lambda. Esegui i seguenti passaggi.

    1. Apri la AWS Lambda console (https://console.aws.amazon.com/lambda/) e seleziona la funzione associata all'autorizzatore.

    2. Scegli la scheda Monitor (Monitorare) e visualizza i parametri relativi al periodo di tempo rilevante per il problema.

  3. Se non vedi alcuna chiamata, verifica di AWS IoT Core avere il permesso di richiamare la tua funzione Lambda. Se visualizzi i richiami, vai al passaggio successivo. Esegui la procedura seguente per verificare che la funzione Lambda disponga delle autorizzazioni richieste.

    1. Scegli la scheda Autorizzazioni per la tua funzione nella console. AWS Lambda

    2. Trova la sezione Resource-based Policy (Policy basata su risorse) nella parte inferiore della pagina. Se la funzione Lambda dispone delle autorizzazioni richieste, la policy sarà simile all'esempio seguente.

      { "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "Id123", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:111111111111:function:FunctionName", "Condition": { "ArnLike": { "AWS:SourceArn": "arn:aws:iot:us-east-1:111111111111:authorizer/AuthorizerName" }, "StringEquals": { "AWS:SourceAccount": "111111111111" } } } ] }
    3. Questa politica concede l'InvokeFunctionautorizzazione sulla tua funzione al AWS IoT Core preside. Se non la vedi, dovrai aggiungerla utilizzando l'AddPermissionAPI. Nell'esempio seguente viene illustrato come eseguire questa operazione utilizzando l' AWS CLI.

      aws lambda add-permission --function-name FunctionName --principal iot.amazonaws.com --source-arn AuthorizerARn --statement-id Id-123 --action "lambda:InvokeFunction"
  4. Se visualizzi i richiami, verifica che non vi siano errori. Un errore potrebbe indicare che la funzione Lambda non gestisce correttamente l'evento di connessione che la AWS IoT Core invia.

    Per informazioni sulla gestione dell'evento nella funzione Lambda, consulta Scrittura della funzione Lambda. È possibile utilizzare la funzionalità di test nella AWS Lambda console (https://console.aws.amazon.com/lambda/) per codificare i valori di test della funzione per assicurarsi che la funzione gestisca gli eventi correttamente.

  5. Se visualizzi i richiami senza errori, ma i tuoi dispositivi non sono in grado di connettersi (o pubblicare, sottoscrivere e ricevere messaggi), il problema potrebbe essere che la policy restituita dalla funzione Lambda non fornisce autorizzazioni per le operazioni che i tuoi dispositivi stanno tentando di eseguire. Eseguire la procedura seguente per determinare se qualcosa non è corretto nella policy restituita dalla funzione.

    1. Utilizza una query Amazon CloudWatch Logs Insights per scansionare i log in un breve periodo di tempo per verificare eventuali errori. La seguente query di esempio ordina gli eventi in base al timestamp e cerca errori.

      display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"
    2. Aggiorna la tua funzione Lambda per registrare i dati a cui ritorna AWS IoT Core e l'evento che attiva la funzione. È possibile utilizzare questi registri per esaminare le policy create dalla funzione.

  6. Se visualizzi invocazioni senza errori ma i tuoi dispositivi non sono in grado di connettersi (o pubblicare, sottoscrivere e ricevere messaggi), un altro motivo potrebbe essere che la funzione Lambda supera il limite di timeout. Il limite di timeout della funzione Lambda per l'autorizzatore personalizzato è di 5 secondi. Puoi controllare la durata della funzione nei CloudWatch log o nelle metriche.

Analisi dei problemi relativi ai dispositivi

Se non riscontri problemi con il richiamo della funzione Lambda o con la policy restituita dalla funzione, cerca i problemi con la connessione dei tuoi dispositivi. Le richieste di connessione AWS IoT Core non corrette possono impedire l'attivazione dell'autorizzatore. I problemi di connessione possono verificarsi sia a livello TLS che a livello di applicazione.

Possibili problemi di livello TLS:

  • I clienti devono inserire un'intestazione del nome host (HTTP, MQTT over WebSockets) o l'estensione TLS Server Name Indication (HTTP, MQTT over WebSockets, MQTT) in tutte le richieste di autenticazione personalizzate. In entrambi i casi, il valore passato deve corrispondere a uno degli endpoint di dati del tuo account. AWS IoT Core Questi sono gli endpoint restituiti quando si eseguono i seguenti comandi CLI.

    • aws iot describe-endpoint --endpoint-type iot:Data-ATS

    • aws iot describe-endpoint --endpoint-type iot:Data(per gli VeriSign endpoint precedenti)

  • I dispositivi che utilizzano l'autenticazione personalizzata nelle connessioni MQTT devono anche inviare l'estensione TLS Application Layer Protocol Negotiation (ALPN) con un valore pari a mqtt.

  • L'autenticazione personalizzata è attualmente disponibile solo sulla porta 443.

Possibili problemi relativi al livello dell'applicazione:

  • Se la firma è abilitata (il campo signingDisabled è false nel tuo autorizzatore), cerca i seguenti problemi di firma.

    • Assicurati di passare la firma del token nell'intestazionex-amz-customauthorizer-signature o in un parametro di stringa di query.

    • Assicurati che il servizio non firmi un valore diverso dal token.

    • Assicurati di passare il token nel parametro di intestazione o query specificato nel campo token-key-name dell'autorizzatore.

  • Assicurati che il nome dell'autorizzatore che si passa nell'intestazione x-amz-customauthorizer-name o nel parametro della stringa di query sia valido o che disponga di un autorizzatore predefinito definito per il proprio account.