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 i log per CloudWatch AWS IoT Core e imposta il livello di registro su. DEBUG È possibile abilitare CloudWatch i log in AWS IoT Core console (https://console.aws.amazon.com/iot/). Per ulteriori informazioni sull'abilitazione e la configurazione dei log per AWS IoT Core, consulta Configura AWS IoT logging.

Nota

Se si lascia il livello di registro impostato DEBUGper lunghi periodi di tempo, è CloudWatch possibile che vengano archiviate grandi quantità di dati di registrazione. Ciò può aumentare i CloudWatch costi. 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 Configura AWS IoT logging. 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 DescribeAuthorizerAPIo facendo clic sull'autorizzatore desiderato nella sezione Sicuro del AWS IoT Core console.

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

    1. Aprire il 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 invocazioni, verificalo AWS IoT Core ha 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 nel AWS Lambda console.

    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 alla funzione dell'utente al AWS IoT Core preside. Se non lo vedi, dovrai aggiungerlo utilizzando AddPermissionAPI. L'esempio seguente mostra come eseguire questa operazione utilizzando il 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 AWS IoT Core invia ad esso.

    Per informazioni sulla gestione dell'evento nella funzione Lambda, consulta Scrittura della funzione Lambda. È possibile utilizzare la funzione di test in 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. È possibile 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 non corrette possono causare AWS IoT Core per non attivare l'autorizzatore. I problemi di connessione possono verificarsi sia a livello di applicazione che a livello di applicazione. TLS

Possibili problemi relativi ai TLS livelli:

  • I clienti devono inserire l'intestazione del nome host (HTTP, MQTT over WebSockets) o l'TLSestensione 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 quello del tuo account AWS IoT Core endpoint di dati. Questi sono gli endpoint che vengono restituiti quando si eseguono i seguenti CLI comandi.

    • 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 per MQTT le connessioni devono inoltre superare l'TLSestensione Application Layer Protocol Negotiation (ALPN) con un valore di. 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.