

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
<a name="custom-auth-troubleshooting"></a>

 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/](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](configure-logging.md). 

**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](configure-logging.md). 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](custom-authorizer.md) 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
<a name="custom-auth-troubleshooting-lambda"></a>

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 [DescribeAuthorizer](https://docs.aws.amazon.com/iot/latest/apireference/API_DescribeAuthorizer.html)API ou clicando no autorizador desejado na seção **Seguro** do AWS IoT Core console.

1. 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/](https://console.aws.amazon.com/lambda/)) e selecione a função associada ao seu autorizador.

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

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

   1. 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"
              }
            }
          }
        ]
      }
      ```

   1. 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 [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)API. 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"
      ```

1. 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](custom-auth-lambda.md). Você pode usar o recurso de teste no AWS Lambda console ([https://console.aws.amazon.com/lambda/](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.

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

   1. Atualize sua função Lambda para registrar os dados aos 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.

1. 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
<a name="custom-auth-troubleshooting-investigate"></a>

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.