Dépannage de vos mécanismes d'autorisation - AWS IoT Core

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Dépannage de vos mécanismes d'autorisation

Cette rubrique passe en revue les problèmes courants des flux de travail d'authentification personnalisés et les étapes pour les résoudre. Pour résoudre les problèmes le plus efficacement possible, activez les CloudWatch journaux pour DEBUG AWS IoT Core et définissez le niveau de journalisation sur DEBUG. Vous pouvez activer CloudWatch les journaux dans la AWS IoT Core console (https://console.aws.amazon.com/iot/). Pour plus d'informations sur l'activation et la configuration des journaux pour AWS IoT Core, consultez Configuration de la AWS IoT journalisation.

Note

Si vous laissez le niveau de journalisation au niveau DEBUG pendant de longues périodes, vous CloudWatch risquez de stocker de grandes quantités de données de journalisation. Cela peut augmenter vos CloudWatch frais. Envisagez d'utiliser la journalisation basée sur les ressources pour augmenter la verbosité uniquement pour les appareils d'un groupe d'objets particulier. Pour plus d'informations sur la journalisation basée sur les ressources, consultez Configuration de la AWS IoT journalisation. De plus, une fois le dépannage terminé, réduisez le niveau du journal à un niveau moins détaillé.

Avant de commencer le dépannage, consultez Comprendre le flux de travail d'authentification personnalisé pour un aperçu général du processus d'authentification personnalisé. Cela vous aide à comprendre où chercher la source d’un problème.

Cette rubrique aborde les deux domaines suivants que vous devez étudier.

  • Problèmes liés à la fonction Lambda de votre mécanisme d'autorisation.

  • Problèmes liés à votre appareil.

Recherchez les problèmes dans la fonction Lambda de votre mécanisme d'autorisation

Effectuez les étapes suivantes pour vous assurer que les tentatives de connexion de vos appareils invoquent votre fonction Lambda.

  1. Vérifiez quelle fonction Lambda est associée à votre mécanisme d'autorisation.

    Vous pouvez le faire en appelant l'DescribeAuthorizerAPI ou en cliquant sur l'autorisateur souhaité dans la section Secure de la AWS IoT Core console.

  2. Vérifiez les métriques d’invocation pour la fonction Lambda. Effectuez les étapes suivantes pour ce faire.

    1. Ouvrez la AWS Lambda console (https://console.aws.amazon.com/lambda/) et sélectionnez la fonction associée à votre autorisateur.

    2. Choisissez l’onglet Surveiller et affichez les métriques pour la période pertinente à votre problème.

  3. Si vous ne voyez aucun appel, vérifiez qu'il AWS IoT Core est autorisé à appeler votre fonction Lambda. Si vous voyez des invocations, passez à l’étape suivante. Effectuez les étapes suivantes pour vérifier que votre fonction Lambda dispose des autorisations requises.

    1. Choisissez l'onglet Autorisations correspondant à votre fonction dans la AWS Lambda console.

    2. Recherchez la section Stratégie basée sur les ressources au bas de la page. Si votre fonction Lambda dispose des autorisations requises, la stratégie ressemble à l'exemple suivant.

      { "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. Cette politique accorde l'InvokeFunctionautorisation d'accéder à votre fonction au AWS IoT Core directeur. Si vous ne le voyez pas, vous devrez l'ajouter à l'aide de l'AddPermissionAPI. L'exemple suivant vous montre comment procéder en utilisant le 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 vous voyez des invocations, vérifiez qu’il n’y a pas d’erreurs. Une erreur peut indiquer que la fonction Lambda ne gère pas correctement l'événement de connexion qui AWS IoT Core lui est envoyé.

    Pour plus d'informations sur la gestion de l'événement dans votre fonction Lambda, consultez Définir votre fonction Lambda. Vous pouvez utiliser la fonction de test de la AWS Lambda console (https://console.aws.amazon.com/lambda/) pour coder en dur les valeurs de test de la fonction afin de vous assurer que celle-ci gère correctement les événements.

  5. Si vous voyez des invocations sans erreur, mais que vos appareils ne parviennent pas à se connecter (ou à publier, s'abonner et recevoir des messages), le problème peut être que la stratégie renvoyée par votre fonction Lambda n'accorde pas d'autorisations pour les actions que vos appareils effectuent. Effectuez les étapes suivantes pour déterminer si quelque chose ne va pas avec la stratégie renvoyée par la fonction.

    1. Utilisez une requête Amazon CloudWatch Logs Insights pour analyser les journaux sur une courte période afin de détecter les défaillances. L'exemple de requête suivant trie les événements par horodatage et recherche les échecs.

      display clientId, eventType, status, @timestamp | sort @timestamp desc | filter status = "Failure"
    2. Mettez à jour votre fonction Lambda pour enregistrer les données auxquelles elle renvoie AWS IoT Core et l'événement qui déclenche la fonction. Vous pouvez utiliser ces journaux pour inspecter la stratégie créée par la fonction.

  6. Si vous voyez des invocations sans erreur, mais que vos appareils ne parviennent pas à se connecter (ou à publier, s'abonner et recevoir des messages), une autre raison peut être que votre fonction Lambda a dépassé le délai d'attente. Le délai d'expiration de la fonction Lambda pour le mécanisme d'autorisation personnalisé est de 5 secondes. Vous pouvez vérifier la durée de la fonction dans CloudWatch les journaux ou les métriques.

Enquête sur les problèmes liés aux appareils

Si vous ne rencontrez aucun problème lors de l’invocation de votre fonction Lambda ou avec la stratégie renvoyée par la fonction, recherchez les problèmes liés aux tentatives de connexion de vos appareils. Les demandes de connexion mal formées peuvent empêcher AWS IoT Core le déclenchement de votre autorisateur. Des problèmes de connexion peuvent survenir à la fois au niveau des couches TLS et application.

Problèmes possibles avec la couche TLS :

  • Les clients doivent transmettre soit un en-tête de nom d'hôte (HTTP, MQTT par-dessus WebSockets), soit l'extension TLS avec indication du nom du serveur (HTTP, MQTT over WebSockets, MQTT) dans toutes les demandes d'authentification personnalisées. Dans les deux cas, la valeur transmise doit correspondre à l'un des points de terminaison de AWS IoT Core données de votre compte. Il s'agit des points de terminaison renvoyés lorsque vous exécutez les commandes CLI suivantes.

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

    • aws iot describe-endpoint --endpoint-type iot:Data(pour les VeriSign terminaux existants)

  • Les appareils qui utilisent l’authentification personnalisée pour les connexions MQTT doivent également transmettre l’extension TLS Application Layer Protocol Négociation (ALPN) avec une valeur de mqtt.

  • L'authentification personnalisée est actuellement disponible uniquement sur le port 443.

Problèmes possibles au niveau de la couche application :

  • Si la signature est activée (le champ signingDisabled est faux dans votre mécanisme d'autorisation), recherchez les problèmes de signature suivants.

    • Assurez-vous de transmettre la signature du jeton dans l'en-tête x-amz-customauthorizer-signature ou dans un paramètre de chaîne de requête.

    • Assurez-vous que le service ne signe pas une valeur autre que le jeton.

    • Assurez-vous de transmettre le jeton dans le paramètre d'en-tête ou de requête que vous avez spécifié dans le champ token-key-name de votre mécanisme d'autorisation.

  • Assurez-vous que le nom du mécanisme d'autorisation que vous transmettez dans le paramètre d'en-tête x-amz-customauthorizer-name ou de chaîne de requête est valide ou qu'un mécanisme d'autorisation par défaut est défini pour votre compte.