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

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

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 CloudWatch os registros AWS IoT Core e defina o nível do registro como DEBUG. Você pode ativar CloudWatch os registros no AWS IoT Core console (https://console.aws.amazon.com/iot/). Para obter mais informações sobre como habilitar e configurar logs do AWS IoT Core, consulte Configurar o AWS IoT registro.

nota

Se você deixar o nível de registro em DEBUG por longos períodos de tempo, CloudWatch poderá armazenar grandes quantidades de dados de registro. Isso pode aumentar suas CloudWatch cobranças. 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 o AWS IoT registro. 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 DescribeAuthorizerAPI ou clicando no autorizador desejado na seção Seguro do AWS IoT Core console.

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

    1. Abra o AWS Lambda console (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 ver nenhuma invocação, verifique se AWS IoT Core tem permissão para invocar sua função 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 AWS Lambda console.

    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.

      { "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. Esta política concede a InvokeFunction permissão de sua função ao AWS IoT Core diretor. Se você não a vê, precisará adicioná-la usando a AddPermissionAPI. 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 Lambda não está manipulando adequadamente o evento de conexão que é AWS IoT Core enviado 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 recurso de teste no AWS Lambda console (https://console.aws.amazon.com/lambda/) para codificar os valores de teste na função para garantir que a função esteja manipulando 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 escanear registros por um curto período de tempo para 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 sua função Lambda para registrar os dados para os quais ela está retornando 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 em CloudWatch registros ou métricas.

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 seu autorizador AWS IoT Core não seja acionado. Problemas de conexão podem ocorrer tanto na camada TLS quanto na camada do aplicativo.

Possíveis problemas na camada TLS:

  • Os clientes devem passar um cabeçalho de nome de host (HTTP, MQTT over WebSockets) ou a extensão TLS de indicação de nome de servidor (HTTP, MQTT over WebSockets, MQTT) em todas as solicitações de autenticação personalizadas. Em ambos os casos, o valor passado deve corresponder a um dos endpoints de AWS IoT Core dados da 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 VeriSign endpoints antigos)

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