Solução de problemas dos autorizadores - AWS IoT Core

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/). Para obter mais informações sobre como habilitar e configurar logs do AWS IoT Core, consulte Configurar registro em log da AWS 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.

  1. 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.

  2. Verifique as métricas de invocação da função do Lambda. Para fazer isso, execute as seguintes etapas.

    1. Abra o console do AWS Lambda (https://console.aws.amazon.com/lambda/) e selecione a função associada ao seu autorizador.

    2. Escolha a guia Monitorar e visualize as métricas do período relevante para o seu problema.

  3. 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.

    1. Escolha a guia Permissões para sua função no console do AWS Lambda.

    2. 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.

      JSON
      { "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. Essa política concede a permissão InvokeFunction de 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-name FunctionName --principal iot.amazonaws.com --source-arn AuthorizerARn --statement-id Id-123 --action "lambda:InvokeFunction"
  4. 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.

  5. 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.

    1. 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"
    2. 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.

  6. 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-signature ou 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-name do autorizador.

  • Verifique se o nome do autorizador transmitido no cabeçalho x-amz-customauthorizer-name ou no parâmetro do string de consulta é válido ou se você tem um autorizador padrão definido para sua conta.