Solução de problemas dos autorizadores
Este tópico aborda problemas comuns que podem causar problemas em fluxos de trabalho de autenticação personalizada e as etapas para resolvê-los. Para solucionar problemas com mais eficiência, habilite os registros do CloudWatch para o AWS IoT Core e defina o nível do log como DEBUG. Você pode ativar os logs do CloudWatch no console do AWS IoT Core (https://console.aws.amazon.com/iot/
nota
Se você deixar o nível de log em DEBUG por muito tempo, o CloudWatch poderá armazenar grandes quantidades de dados de registro. Isso pode aumentar suas cobranças do CloudWatch. Considere usar o registro baseado em recursos para aumentar a verbosidade somente para dispositivos em um determinado grupo de objetos. Para obter mais informações sobre o registro baseado em recursos, consulte Configurar registro em log da AWS IoT. Além disso, ao concluir a solução de problemas, reduza o nível do log para um nível menos detalhado.
Antes de iniciar a solução de problemas, analise Entender o fluxo de trabalho de autenticação personalizada para obter uma visão geral do processo de autenticação personalizada. Isso ajuda você a entender onde procurar a origem de um problema.
Este tópico discute as duas áreas a seguir para você investigar.
-
Problemas relacionados à função do Lambda do autorizador.
-
Problemas relacionados ao dispositivo.
Verifique se há problemas na função do Lambda do autorizador
Execute as etapas a seguir para garantir que as tentativas de conexão de seus dispositivos estejam invocando a função do Lambda.
-
Verifique qual função do Lambda está associada ao seu autorizador.
Você pode fazer isso chamando a API DescribeAuthorizer ou clicando no autorizador desejado na seção Seguro do console do AWS IoT Core.
-
Verifique as métricas de invocação da função do Lambda. Para fazer isso, execute as seguintes etapas.
-
Abra o console do AWS Lambda (https://console.aws.amazon.com/lambda/
) e selecione a função associada ao seu autorizador. -
Escolha a guia Monitorar e visualize as métricas do período relevante para o seu problema.
-
-
Se você não vir invocações, verifique se o AWS IoT Core tem permissão para invocar sua função do Lambda. Se você vir invocações, pule para a próxima etapa. Execute as etapas a seguir para verificar se sua função do Lambda tem as permissões necessárias.
-
Escolha a guia Permissões para sua função no console do AWS Lambda.
-
Localize a seção Política baseada em recursos na parte inferior da página. Se a função do Lambda tiver as permissões necessárias, a política será semelhante ao exemplo a seguir.
-
Essa política concede a permissão
InvokeFunctionde sua função à entidade principal do AWS IoT Core. Se você não a vir, será necessário adicioná-la usando a API AddPermission. O exemplo a seguir mostra como fazer isso utilizando a AWS CLI.aws lambda add-permission --function-nameFunctionName--principal iot.amazonaws.com --source-arnAuthorizerARn--statement-id Id-123 --action "lambda:InvokeFunction"
-
-
Se você vir invocações, verifique se não há erros. Um erro pode indicar que a função do Lambda não está lidando adequadamente com o evento de conexão que o AWS IoT Core envia para ela.
Para ver informações sobre como lidar com o evento na função do Lambda, consulte Definição de sua função do Lambda. Você pode usar o atributo de teste no console do AWS Lambda (https://console.aws.amazon.com/lambda/
) para realizar a codificação rígida dos valores de teste na função a fim de garantir que ela esteja lidando com os eventos corretamente. -
Se você vir invocações sem erros, mas os dispositivos não conseguirem se conectar (ou publicar, assinar e receber mensagens), talvez a política retornada pela função do Lambda não conceda permissões para as ações que os dispositivos estão tentando realizar. Execute as etapas a seguir para determinar se há algo errado com a política retornada pela função.
-
Use uma consulta do Amazon CloudWatch Logs Insights para verificar logs ao longo de um curto período a fim de verificar se há falhas. A consulta de exemplo a seguir classifica os eventos por data e hora e procura falhas.
display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure" -
Atualize a função do Lambda para registrar os dados para os quais ela está retornando ao AWS IoT Core e o evento que aciona a função. Você pode usar esses registros para inspecionar a política criada pela função.
-
-
Se você vir invocações sem erros, mas os dispositivos não conseguirem se conectar (ou publicar, assinar e receber mensagens), outra possível causa é que a função do Lambda excede o limite de tempo. O limite de tempo da função do Lambda para o autorizador personalizado é de 5 segundos. Você pode verificar a duração da função nos logs ou métricas do CloudWatch.
Investigar problemas do dispositivo
Se você não encontrar problemas ao invocar a função do Lambda ou com a política que a função retorna, procure problemas com as tentativas de conexão dos dispositivos. Solicitações de conexão malformadas podem fazer com que o AWS IoT Core não acione o autorizador. Problemas de conexão podem ocorrer tanto na camada TLS quanto na camada do aplicativo.
Possíveis problemas na camada TLS:
-
Os clientes devem transmitir um cabeçalho de nome de host (HTTP, MQTT por WebSockets) ou a extensão TLS Server Name Indication (HTTP, MQTT por WebSockets, MQTT) em todas as solicitações de autenticação personalizada. Em ambos os casos, o valor transmitido deve corresponder a um dos endpoints de dados do AWS IoT Core de sua conta. Esses são os endpoints que são retornados ao executar os seguintes comandos da CLI.
-
aws iot describe-endpoint --endpoint-type iot:Data-ATS -
aws iot describe-endpoint --endpoint-type iot:Data(para endpoints legados do VeriSign)
-
-
Os dispositivos que usam autenticação personalizada para conexões MQTT também devem transmitir a extensão TLS Application Layer Protocol Negotiation (ALPN) com um valor de
mqtt. -
No momento, a autenticação personalizada está disponível somente na porta 443.
Possíveis problemas na camada de aplicativo:
-
Se a assinatura estiver ativada (o campo
signingDisabledé falso em seu autorizador), procure os seguintes problemas de assinatura.-
Certifique-se de transmitir a assinatura do token no cabeçalho
x-amz-customauthorizer-signatureou em um parâmetro de string de consulta. -
Certifique-se de que o serviço não esteja assinando um valor diferente do token.
-
Certifique-se de transmitir o token no cabeçalho ou no parâmetro de consulta que você especificou no campo
token-key-namedo autorizador.
-
-
Verifique se o nome do autorizador transmitido no cabeçalho
x-amz-customauthorizer-nameou no parâmetro do string de consulta é válido ou se você tem um autorizador padrão definido para sua conta.