Resolución de problemas de sus autorizadores - AWS IoT Core

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Resolución de problemas de sus autorizadores

En este tema se explican los problemas más comunes que pueden causar problemas en los flujos de trabajo de autenticación personalizada y los pasos para resolverlos. Para solucionar los problemas de forma más eficaz, habilite CloudWatch los registros AWS IoT Core y establezca el nivel de registro en DEBUG. Puede habilitar CloudWatch los registros en la AWS IoT Core consola (https://console.aws.amazon.com/iot/). Para obtener más información acerca de cómo habilitar y configurar registros de AWS IoT Core, consulte Configure el AWS IoT registro.

nota

Si deja el nivel de registro en DEBUG durante períodos prolongados, es CloudWatch posible que se almacenen grandes cantidades de datos de registro. Esto puede aumentar sus CloudWatch cargos. Considere la posibilidad de utilizar el registro basado en recursos para aumentar la verbosidad solo para los dispositivos de un grupo de objetos concreto. Para obtener más información sobre el registro basado en recursos, consulte Configure el AWS IoT registro. Además, cuando haya terminado de solucionar problemas, reduzca el nivel de registro a un nivel menos detallado.

Antes de empezar a solucionar problemas, consulte Comprender el flujo de trabajo de autenticación personalizada para obtener una visión general del proceso de autenticación personalizada. Esto le ayudará a entender dónde buscar el origen del problema.

En este tema se analizan las dos áreas siguientes para que las investigue.

  • Cuestiones relacionadas con la función de Lambda de su autorizador.

  • Problemas relacionados con el dispositivo.

Comprobar si hay problemas con la función de Lambda de su autorizador

Lleve a cabo los siguientes pasos para asegurarse de que los intentos de conexión de sus dispositivos estén invocando la función de Lambda.

  1. Compruebe qué función de Lambda está asociada a su autorizador.

    Puede hacerlo llamando a la DescribeAuthorizerAPI o haciendo clic en el autorizador deseado en la sección Segura de la AWS IoT Core consola.

  2. Compruebe las métricas de invocación de la función de Lambda. Para ello, siga estos pasos.

    1. Abre la AWS Lambda consola (https://console.aws.amazon.com/lambda/) y selecciona la función asociada a tu autorizador.

    2. Seleccione la pestaña Monitorizar y consulte las métricas correspondientes al período de tiempo correspondiente a su problema.

  3. Si no ve ninguna invocación, compruebe que AWS IoT Core tiene permiso para invocar la función Lambda. Si ve invocaciones, vaya directamente al siguiente paso. Lleve a cabo los siguientes pasos para comprobar que la función de Lambda tiene los permisos necesarios.

    1. Seleccione la pestaña Permisos para su función en la consola. AWS Lambda

    2. Busque la sección Política basada en recursos en la parte inferior de la página. Si la función de Lambda tiene los permisos necesarios, la política tiene el aspecto que se muestra en el siguiente ejemplo.

      { "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 al AWS IoT Core director el InvokeFunction permiso para desempeñar sus funciones. Si no lo ves, tendrás que añadirlo mediante la AddPermissionAPI. El siguiente ejemplo le muestra cómo hacerlo utilizando la AWS CLI.

      aws lambda add-permission --function-name FunctionName --principal iot.amazonaws.com --source-arn AuthorizerARn --statement-id Id-123 --action "lambda:InvokeFunction"
  4. Si ve invocaciones, compruebe que no haya errores. Un error podría indicar que la función Lambda no gestiona correctamente el evento de conexión que se AWS IoT Core le envía.

    Para obtener información sobre cómo gestionar el evento en la función de Lambda, consulte Definición de la función de Lambda. Puede usar la función de prueba de la AWS Lambda consola (https://console.aws.amazon.com/lambda/) para codificar los valores de prueba de la función y asegurarse de que la función gestiona los eventos correctamente.

  5. Si ve invocaciones sin errores, pero sus dispositivos no pueden conectarse (ni publicar, suscribirse ni recibir mensajes), el problema podría deberse a que la política que devuelve la función de Lambda no concede permisos para las acciones que los dispositivos están intentando realizar. Lleve a cabo los siguientes pasos para determinar si hay algún problema con la política que devuelve la función.

    1. Utilice una consulta de Amazon CloudWatch Logs Insights para escanear los registros durante un período breve y comprobar si hay errores. El siguiente ejemplo de consulta ordena los eventos por marca de tiempo y busca errores.

      display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"
    2. Actualice la función Lambda para registrar los datos a los que regresa AWS IoT Core y el evento que activa la función. Puede usar estos registros para inspeccionar la política que crea la función.

  6. Si ve invocaciones sin errores, pero sus dispositivos no pueden conectarse (ni publicar, suscribirse ni recibir mensajes), otro motivo puede ser que la función de Lambda supere el límite de tiempo de espera. El límite de tiempo de espera de la función de Lambda para el autorizador personalizado es de 5 segundos. Puede comprobar la duración de la función en CloudWatch registros o métricas.

Investigar problemas con los dispositivos

Si no encuentra problemas al invocar la función de Lambda o con la política que devuelve la función, busque problemas con los intentos de conexión de sus dispositivos. Las solicitudes de conexión mal formadas pueden provocar que AWS IoT Core no se active el autorizador. Se pueden producir problemas de conexión tanto en la capa TLS como en la de aplicación.

Posibles problemas con la capa TLS:

  • Los clientes deben incluir un encabezado de nombre de host (HTTP, MQTT over WebSockets) o la extensión TLS con indicación del nombre del servidor (HTTP, MQTT over WebSockets, MQTT) en todas las solicitudes de autenticación personalizadas. En ambos casos, el valor transferido debe coincidir con uno de los extremos de datos de su cuenta. AWS IoT Core Estos son los puntos de conexión que se devuelven al ejecutar los siguientes comandos de la CLI.

    • aws iot describe-endpoint --endpoint-type iot:Data-ATS

    • aws iot describe-endpoint --endpoint-type iot:Data(para puntos VeriSign finales antiguos)

  • Los dispositivos que utilizan una autenticación personalizada para las conexiones MQTT también deben pasar la extensión TLS de negociación de protocolo de capa de aplicación (ALPN) con un valor de mqtt.

  • La autenticación personalizada actualmente solo está disponible en el puerto 443.

Posibles problemas en la capa de aplicación:

  • Si la firma está habilitada (el campo signingDisabled es falso en su autorizador), busque los siguientes problemas de firma.

    • Asegúrese de pasar la firma simbólica en el encabezado x-amz-customauthorizer-signature o en un parámetro de cadena de consulta.

    • Asegúrese de que el servicio no firme un valor distinto del token.

    • Asegúrese de pasar el token al encabezado o parámetro de consulta que especificó en el campo token-key-name de su autorizador.

  • Asegúrese de que el nombre del autorizador que pasa en el encabezado x-amz-customauthorizer-name o la cadena de consulta es válido o de que ha definido un autorizador predeterminado para su cuenta.