Didacticiel : Création d'un mécanisme d'autorisation personnalisé pour AWS IoT Core - 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.

Didacticiel : Création d'un mécanisme d'autorisation personnalisé pour AWS IoT Core

Ce didacticiel explique les étapes de création, de validation et d'utilisation de l'authentification personnalisée à l'aide du AWS CLI. En option, à l'aide de ce didacticiel, vous pouvez utiliser Postman pour envoyer des données à l'aide de AWS IoT Core de l'API HTTP Publish.

Ce didacticiel explique comment créer un exemple de fonction Lambda qui implémente la logique d'autorisation et d'authentification et un mécanisme d'autorisation à l'aide de l'appel create-authorizer avec signature par jeton activée. L'autorisateur est ensuite validé à l'aide dutest-invoke-authorizer, et vous pouvez enfin envoyer des données à AWS IoT Core un sujet MQTT de test à l'aide de l'API HTTP Publish. Un exemple de demande indiquera l'autorisateur à invoquer en utilisant l'x-amz-customauthorizer-nameen-tête et en transmettant les en-têtes de demande token-key-name et x-amz-customauthorizer-signature in.

Ce que vous allez apprendre dans ce didacticiel:
  • Comment créer une fonction Lambda en tant que gestionnaire de mécanisme d'autorisation personnalisé

  • Comment créer un autorisateur personnalisé à l'aide du bouton AWS CLI avec signature par jeton activée

  • Comment tester votre mécanisme d'autorisation personnalisé à l'aide de la commande test-invoke-authorizer

  • Comment publier une rubrique MQTT à l'aide de Postman et valider la demande avec votre mécanisme d'autorisation personnalisé

Ce didacticiel vous prendra environ 60 minutes.

Avant de commencer ce didacticiel, assurez-vous de disposer des éléments suivants :
  • Configurez votre Compte AWS

    Vous aurez besoin de votre AWS IoT console Compte AWS et de votre console pour terminer ce didacticiel.

    Le compte que vous utilisez pour ce didacticiel fonctionne mieux lorsqu'il inclut au moins les politiques AWS gérées suivantes :

    Important

    Les politiques IAM utilisées dans ce didacticiel sont plus permissives que celles que vous devriez suivre dans le cadre d'une implémentation de production. Dans un environnement de production, assurez-vous que vos politiques de compte et de ressources n'accordent que les autorisations nécessaires.

    Lorsque vous venez de créer l'Amazon Resource Name (ARN), vous ne pouvez pas supprimer la liste des politiques que les utilisateurs (et les rôles) doivent effectuer et élaborez des politiques leur permettant de réaliser ces tâches.

    Pour de plus amples informations, veuillez consulter Bonnes pratiques de sécurité dans IAM.

  • A installé le AWS CLI

    Pour plus d'informations sur l'installation de la CLI AWS CLI, reportez-vous à la section Installation de la AWS CLI. Ce didacticiel nécessite une AWS CLI version aws-cli/2.1.3 Python/3.7.4 Darwin/18.7.0 exe/x86_64 ou une version ultérieure.

  • Boîte à outils OpenSSL

    Les exemples de ce didacticiel utilisent LibreSSL 2.6.5. Vous pouvez également utiliser les outils OpenSSL v1.1.1i pour ce didacticiel.

  • J'ai revu l'aperçu AWS Lambda

    Si vous ne l'avez jamais utilisé AWS Lambda auparavant, consultez le AWS Lambdaguide Getting started with Lambda pour en apprendre les termes et les concepts.

  • J'ai examiné comment créer des demandes dans Postman

    Pour plus d'informations, consultez Demandes de construction.

  • Autorisateurs personnalisés supprimés du didacticiel précédent

    Vous ne Compte AWS pouvez configurer qu'un nombre limité d'autorisateurs personnalisés à la fois. Pour plus d'informations sur la suppression d'un mécanisme d'autorisation personnalisé, consultez Étape 8 : Nettoyer.

Étape 1 : Créez une fonction Lambda pour votre mécanisme d'autorisation personnalisé

L'authentification personnalisée AWS IoT Core utilise les ressources d'autorisation que vous créez pour authentifier et autoriser les clients. La fonction que vous allez créer dans cette section authentifie et autorise les clients lorsqu'ils se connectent aux ressources AWS IoT Core et y accèdent AWS IoT .

La fonction Lambda effectue les opérations suivantes :

  • Si une demande provient de test-invoke-authorizer, elle renvoie une politique IAM avec une action Deny.

  • Si une demande provient de Postman via HTTP et que le actionToken paramètre a une valeur deallow, il renvoie une politique IAM avec une Allow action. Dans le cas contraire, il renvoie une politique IAM avec une action Deny.

Pour créer une fonction Lambda pour votre mécanisme d'autorisation personnalisé
  1. Dans la console Lambda, ouvrez Fonctions.

  2. Choisissez Créer une fonction.

  3. Confirmez que l'auteur à partir de zéro (Author from scratch) est sélectionné.

  4. Sous Basic information :

    1. Sous Nom de la fonction, entrez custom-auth-function.

    2. sSous Runtime, confirmez Node.js 18.x

  5. Choisissez Créer une fonction.

    Lambda crée une fonction Node.js et un rôle d'exécution qui accorde à la fonction l'autorisation de charger des journaux. La fonction Lambda assume le rôle d'exécution lorsque vous appelez votre fonction et utilise le rôle d'exécution pour créer des informations d'identification pour le AWS SDK et pour lire des données provenant de sources d'événements.

  6. Pour voir le code et la configuration de la fonction dans l'AWS Cloud9éditeur, choisissez custom-auth-functiondans la fenêtre du concepteur, puis choisissez index.js dans le volet de navigation de l'éditeur.

    Pour créer une fonction Lambda, sélectionnez l'Amazon Resource Name (ARN) de la fonction Lambda. Node.js Vous pouvez utiliser l'éditeur AWS Cloud9 pour éditer votre fonction tant que votre code source ne dépasse pas 3 Mo.

  7. Remplacez le code index.js dans l'éditeur par le code suivant :

    // A simple Lambda function for an authorizer. It demonstrates // How to parse a CLI and Http password to generate a response. export const handler = async (event, context, callback) => { //Http parameter to initiate allow/deny request const HTTP_PARAM_NAME='actionToken'; const ALLOW_ACTION = 'Allow'; const DENY_ACTION = 'Deny'; //Event data passed to Lambda function var event_str = JSON.stringify(event); console.log('Complete event :'+ event_str); //Read protocolData from the event json passed to Lambda function var protocolData = event.protocolData; console.log('protocolData value---> ' + protocolData); //Get the dynamic account ID from function's ARN to be used // as full resource for IAM policy var ACCOUNT_ID = context.invokedFunctionArn.split(":")[4]; console.log("ACCOUNT_ID---"+ACCOUNT_ID); //Get the dynamic region from function's ARN to be used // as full resource for IAM policy var REGION = context.invokedFunctionArn.split(":")[3]; console.log("REGION---"+REGION); //protocolData data will be undefined if testing is done via CLI. // This will help to test the set up. if (protocolData === undefined) { //If CLI testing, pass deny action as this is for testing purpose only. console.log('Using the test-invoke-authorizer cli for testing only'); callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION)); } else{ //Http Testing from Postman //Get the query string from the request var queryString = event.protocolData.http.queryString; console.log('queryString values -- ' + queryString); /* global URLSearchParams */ const params = new URLSearchParams(queryString); var action = params.get(HTTP_PARAM_NAME); if(action!=null && action.toLowerCase() === 'allow'){ callback(null, generateAuthResponse(ALLOW_ACTION,ACCOUNT_ID,REGION)); }else{ callback(null, generateAuthResponse(DENY_ACTION,ACCOUNT_ID,REGION)); } } }; // Helper function to generate the authorization IAM response. var generateAuthResponse = function(effect,ACCOUNT_ID,REGION) { var full_resource = "arn:aws:iot:"+ REGION + ":" + ACCOUNT_ID + ":*"; console.log("full_resource---"+full_resource); var authResponse = {}; authResponse.isAuthenticated = true; authResponse.principalId = 'principalId'; var policyDocument = {}; policyDocument.Version = '2012-10-17'; policyDocument.Statement = []; var statement = {}; statement.Action = 'iot:*'; statement.Effect = effect; statement.Resource = full_resource; policyDocument.Statement[0] = statement; authResponse.policyDocuments = [policyDocument]; authResponse.disconnectAfterInSeconds = 3600; authResponse.refreshAfterInSeconds = 600; console.log('custom auth policy function called from http'); console.log('authResponse --> ' + JSON.stringify(authResponse)); console.log(authResponse.policyDocuments[0]); return authResponse; }
  8. Choisissez Deploy (Déployer).

  9. Après le déploiement des modifications (Changes deployed) apparaît au-dessus de l'éditeur :

    1. Accédez à la section Vue d'ensemble des fonctions au-dessus de l'éditeur.

    2. Copiez l'ARN de la fonction et enregistrez-le pour l'utiliser ultérieurement dans ce didacticiel.

  10. Testez votre fonction .

    1. Choisissez l’onglet Test.

    2. À l'aide des paramètres de test par défaut, choisissez Invoquer.

    3. Si le test a réussi, dans les résultats de l'exécution, ouvrez l'aperçu Détails. Vous devriez voir le document de politique renvoyé par la fonction.

      Si le test a échoué ou si aucun document de politique ne s'affiche, examinez le code pour rechercher et corriger les erreurs.

Étape 2 : Créez une paire de clés publique et privée pour votre mécanisme d’autorisation personnalisé

Votre mécanisme d'autorisation personnalisé nécessite une clé publique et privée pour l'authentifier. Les commandes de cette section utilisent les outils OpenSSL pour créer cette paire de clés.

Pour créer une paire de clés publique et privée pour votre mécanisme d’autorisation personnalisé
  1. Créez le fichier de clé privée.

    openssl genrsa -out private-key.pem 4096
  2. Vérifiez le fichier de clé privée que vous venez de créer.

    openssl rsa -check -in private-key.pem -noout

    Si la commande n'affiche aucune erreur, le fichier de clé privée est valide.

  3. Créez le fichier de clé publique.

    openssl rsa -in private-key.pem -pubout -out public-key.pem
  4. Vérifiez le fichier de clé publique.

    openssl pkey -inform PEM -pubin -in public-key.pem -noout

    Si la commande n'affiche aucune erreur, le fichier de clé publique est valide.

Étape 3 : créer une ressource d'autorisation personnalisée et son autorisation

L'autorisateur AWS IoT personnalisé est la ressource qui réunit tous les éléments créés au cours des étapes précédentes. Dans cette section, vous allez créer une ressource de mécanisme d’autorisation personnalisée et lui donner l'autorisation d'exécuter la fonction Lambda que vous avez créée précédemment. Vous pouvez créer une ressource d'autorisation personnalisée à l'aide de la AWS IoT console AWS CLI, de ou de l' AWS API.

Pour ce didacticiel, il vous suffit de créer un seul mécanisme d'autorisation personnalisé. Cette section décrit comment créer à l'aide de la AWS IoT console et du AWS CLI, afin que vous puissiez utiliser la méthode qui vous convient le mieux. Il n'y a aucune différence entre les ressources de mécanisme d'autorisation personnalisées créées par l'une ou l'autre méthode.

Création d'une ressource d'autorisation personnalisée

Choisissez l'une de ces options pour créer votre ressource de mécanisme d'autorisation personnalisée
Pour créer un mécanisme d'autorisation personnalisé (console)
  1. Ouvrez la page d'autorisation personnalisée de la AWS IoT console, puis choisissez Create Authorizer.

  2. Dans Créer un mécanisme d'autorisation

    1. Dans Nom de mécanisme d'autorisation, entrez my-new-authorizer.

    2. Dans État du mécanisme d'autorisation, cochez Actif.

    3. Dans Fonction mécanisme d'autorisation, choisissez la fonction Lambda que vous avez créée précédemment.

    4. Dans Validation du jeton, facultatif :

      1. Activez la validation des jetons.

      2. Dans Nom de la clé du jeton, entreztokenKeyName.

      3. Sélectionnez Ajouter une clé.

      4. Dans Key name (Nom de la clé), saisissez FirstKey.

      5. Dans Clé publique, entrez le contenu du fichier public-key.pem. Veillez à inclure les lignes du fichier dans le contenu du fichier -----BEGIN PUBLIC KEY----- et -----END PUBLIC KEY----- à ne pas ajouter ou supprimer des fils de ligne, des retours en chariot ou d'autres caractères. La chaîne que vous entrez devrait ressembler à cet exemple.

        -----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvEBzOk4vhN+3LgslvEWt sLCqNmt5Damas3bmiTRvq2gjRJ6KXGTGQChqArAJwL1a9dkS9+maaXC3vc6xzx9z QPu/vQOe5tyzz1MsKdmtFGxMqQ3qjEXAMPLEOmqyUKPP5mff58k6ePSfXAnzBH0q lg2HioefrpU5OSAnpuRAjYKofKjbc2Vrn6N2G7hV+IfTBvCElf0csalS/Rk4phD5 oa4Y0GHISRnevypg5C8n9Rrz91PWGqP6M/q5DNJJXjMyleG92hQgu1N696bn5Dw8 FhedszFa6b2x6xrItZFzewNQkPMLMFhNrQIIyvshtT/F1LVCS5+v8AQ8UGGDfZmv QeqAMAF7WgagDMXcfgKSVU8yid2sIm56qsCLMvD2Sq8Lgzpey9N5ON1o1Cvldwvc KrJJtgwW6hVqRGuShnownLpgG86M6neZ5sRMbVNZO8OzcobLngJ0Ibw9KkcUdklW gvZ6HEJqBY2XE70iEXAMPLETPHzhqvK6Ei1HGxpHsXx6BNft582J1VpgYjXha8oa /NN7l7Zbj/euAb41IVtmX8JrD9z613d1iM5L8HluJlUzn62Q+VeNV2tdA7MfPfMC 8btGYladFAnitThaz6+F0VSBJPu7pZQoLnqyEp5zLMtF+kFl2yOBmGAP0RBivRd9 JWBUCG0bqcLQPeQyjbXSOfUCAwEAAQ== -----END PUBLIC KEY-----
  3. Choisissez Créer un mécanisme d'autorisation.

  4. Si la ressource du mécanisme d'autorisation personnalisée a été créée, vous verrez la liste des mécanismes d'autorisation personnalisés et votre nouvel mécanisme d'autorisation personnalisé devrait apparaître dans la liste. Vous pouvez passer à la section suivante pour le tester.

    Si une erreur s'affiche, examinez-la, réessayez de créer votre mécanisme d'autorisation personnalisé et vérifiez les entrées. Notez que chaque ressource de mécanisme d'autorisation personnalisée doit avoir un nom unique.

Pour créer un mécanisme d'autorisation personnalisé (AWS CLI)
  1. Remplacez vos valeurs par authorizer-function-arn et token-signing-public-keys, puis exécutez la commande suivante :

    aws iot create-authorizer \ --authorizer-name "my-new-authorizer" \ --token-key-name "tokenKeyName" \ --status ACTIVE \ --no-signing-disabled \ --authorizer-function-arn "arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function" \ --token-signing-public-keys FirstKey="-----BEGIN PUBLIC KEY----- MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvEBzOk4vhN+3LgslvEWt sLCqNmt5Damas3bmiTRvq2gjRJ6KXGTGQChqArAJwL1a9dkS9+maaXC3vc6xzx9z QPu/vQOe5tyzz1MsKdmtFGxMqQ3qjEXAMPLEOmqyUKPP5mff58k6ePSfXAnzBH0q lg2HioefrpU5OSAnpuRAjYKofKjbc2Vrn6N2G7hV+IfTBvCElf0csalS/Rk4phD5 oa4Y0GHISRnevypg5C8n9Rrz91PWGqP6M/q5DNJJXjMyleG92hQgu1N696bn5Dw8 FhedszFa6b2x6xrItZFzewNQkPMLMFhNrQIIyvshtT/F1LVCS5+v8AQ8UGGDfZmv QeqAMAF7WgagDMXcfgKSVU8yid2sIm56qsCLMvD2Sq8Lgzpey9N5ON1o1Cvldwvc KrJJtgwW6hVqRGuShnownLpgG86M6neZ5sRMbVNZO8OzcobLngJ0Ibw9KkcUdklW gvZ6HEJqBY2XE70iEXAMPLETPHzhqvK6Ei1HGxpHsXx6BNft582J1VpgYjXha8oa /NN7l7Zbj/euAb41IVtmX8JrD9z613d1iM5L8HluJlUzn62Q+VeNV2tdA7MfPfMC 8btGYladFAnitThaz6+F0VSBJPu7pZQoLnqyEp5zLMtF+kFl2yOBmGAP0RBivRd9 JWBUCG0bqcLQPeQyjbXSOfUCAwEAAQ== -----END PUBLIC KEY-----"
    Où :
    • La valeur authorizer-function-arn est l'Amazon Resource Name (ARN) de la fonction Lambda que vous avez créée pour votre mécanisme d'autorisation personnalisé.

    • La valeur token-signing-public-keys inclut le nom de la clé FirstKey et le contenu du fichier public-key.pem. Veillez à inclure les lignes du fichier dans le contenu du fichier -----BEGIN PUBLIC KEY----- et -----END PUBLIC KEY----- à ne pas ajouter ou supprimer des fils de ligne, des retours en chariot ou d'autres caractères.

      Remarque : soyez prudent en saisissant la clé publique car toute modification de la valeur de la clé publique la rend inutilisable.

  2. Si le mécanisme d'autorisation personnalisé est créé, la commande renvoie le nom et l'ARN de la nouvelle ressource, tels que.

    { "authorizerName": "my-new-authorizer", "authorizerArn": "arn:aws:iot:Region:57EXAMPLE833:authorizer/my-new-authorizer" }

    Notez la sortie authorizerArn pour l'utiliser lors de l'étape suivante.

    N'oubliez pas que chaque ressource de mécanisme d'autorisation personnalisée doit avoir un nom unique.

Autoriser la ressource de mécanisme d'autorisation personnalisée

Dans cette section, vous accorderez à la ressource d'autorisation personnalisée que vous venez de créer l'autorisation d'exécuter la fonction Lambda. Pour accorder l'autorisation, vous pouvez utiliser la commande CLI add-permission.

Accordez l'autorisation à votre fonction Lambda à l'aide du AWS CLI
  1. Après avoir inséré vos valeurs, entrez la commande suivante. Notez que la valeur statement-id doit être unique. Remplacez Id-1234 par une autre valeur si vous avez déjà exécuté ce didacticiel ou si une erreur ResourceConflictException s'affiche.

    aws lambda add-permission \ --function-name "custom-auth-function" \ --principal "iot.amazonaws.com" \ --action "lambda:InvokeFunction" \ --statement-id "Id-1234" \ --source-arn authorizerArn
  2. Si la commande aboutit, elle renvoie une instruction d'autorisation, comme dans cet exemple. Vous pouvez passer à la section suivante pour tester le mécanisme d’autorisation personnalisée.

    { "Statement": "{\"Sid\":\"Id-1234\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function\"}}}" }

    Si la commande échoue, elle renvoie une erreur, comme dans cet exemple. Vous devez vérifier et corriger l'erreur avant de continuer.

    An error occurred (AccessDeniedException) when calling the AddPermission operation: User: arn:aws:iam::57EXAMPLE833:user/EXAMPLE-1 is not authorized to perform: lambda:AddPer mission on resource: arn:aws:lambda:Region:57EXAMPLE833:function:custom-auth-function

Étape 4 : Testez l'autorisateur en appelant test-invoke-authorizer

Une fois toutes les ressources définies, dans cette section, vous appellerez test-invoke-authorizer depuis la ligne de commande pour tester la passe d'autorisation.

Notez que lorsque vous invoquez le mécanisme d’autorisation depuis la ligne de commande, protocolData n'est pas défini, de sorte que le mécanisme d’autorisation renvoie toujours un document DENY. Ce test confirme toutefois que votre mécanisme d’autorisation personnalisé et votre fonction Lambda sont correctement configurés, même s'ils ne testent pas complètement la fonction Lambda.

Pour tester votre autorisateur personnalisé et sa fonction Lambda à l'aide du AWS CLI
  1. Dans le répertoire où vous avez créé le fichier private-key.pem, entrez la commande suivante.

    echo -n "tokenKeyValue" | openssl dgst -sha256 -sign private-key.pem | openssl base64 -A

    Cette commande crée une chaîne de signature à utiliser à l'étape suivante. La chaîne de signature ressemble à ceci :

    dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mn VB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeeh bQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjj szEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29V QJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuX f3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+K EWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFH xRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=

    Copiez cette chaîne de signature pour l'utiliser à l'étape suivante. Veillez à ne pas inclure de caractères supplémentaires ou à ne pas en omettre.

  2. Dans cette commande, remplacez la valeur token-signature par la chaîne de signature de l'étape précédente et exécutez cette commande pour tester votre mécanisme d’autorisation.

    aws iot test-invoke-authorizer \ --authorizer-name my-new-authorizer \ --token tokenKeyValue \ --token-signature dBwykzlb+fo+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mnVB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeehbQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjjszEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29VQJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuXf3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+KEWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFHxRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=

    Si la commande aboutit, elle renvoie les informations générées par votre fonction d'autorisation personnalisée, comme dans cet exemple.

    { "isAuthenticated": true, "principalId": "principalId", "policyDocuments": [ "{\"Version\":\"2012-10-17\",\"Statement\":[{\"Action\":\"iot:*\",\"Effect\":\"Deny\",\"Resource\":\"arn:aws:iot:Region:57EXAMPLE833:*\"}]}" ], "refreshAfterInSeconds": 600, "disconnectAfterInSeconds": 3600 }

    Si la commande renvoie une erreur, vérifiez l'erreur et revérifiez les commandes que vous avez utilisées dans cette section.

Étape 5 : Testez la publication du message MQTT à l'aide de Postman

  1. Pour obtenir le point de terminaison des données de votre appareil depuis la ligne de commande, appelez describe-endpoint comme indiqué ici

    aws iot describe-endpoint --output text --endpoint-type iot:Data-ATS

    Enregistrez cette adresse pour l'utiliser en tant que device_data_endpoint_address lors d'une étape ultérieure.

  2. Ouvrez une nouvelle fenêtre Postman et créez une nouvelle requête HTTP POST.

    1. Sur votre ordinateur, ouvrez l'application Postman.

    2. Dans Postman, dans le menu File (Fichier), choisissez New… (Nouveau).

    3. Dans la boîte de dialogue Nouveau, choisissez Requête.

    4. Dans Enregistrer la requête,

      1. Dans Nom de la requête, entrez Custom authorizer test request.

      2. Dans Sélectionner une collection ou un dossier dans lequel enregistrer : choisissez ou créez une collection dans laquelle enregistrer cette demande.

      3. Choisissez Enregistrer dans collection_name.

  3. Créez la requête POST pour tester votre mécanisme d’autorisation personnalisé.

    1. Dans le sélecteur de méthode de demande situé à côté du champ URL, choisissez POST.

    2. Dans le champ URL, créez l'URL de votre demande en utilisant l'URL suivante avec l'adresse device_data_endpoint_address issue de la commande describe-endpoint lors d'une étape précédente.

      https://device_data_endpoint_address:443/topics/test/cust-auth/topic?qos=0&actionToken=allow

      Notez que cette URL inclut le paramètre de requête actionToken=allow qui indiquera à votre fonction Lambda de renvoyer un document de politique autorisant l'accès à AWS IoT. Après avoir saisi l'URL, les paramètres de requête apparaissent également dans l'onglet Paramètres Postman.

    3. Dans l'onglet Auth, dans le champ Type, sélectionnez No Auth.

    4. Dans la section suivante, passez à l'étape suivante.

      1. Si une clé d'hôte est cochée, décochez-la.

      2. Au bas de la liste des en-têtes, ajoutez ces nouveaux en-têtes et confirmez qu'ils sont cochés. Remplacez la valeur Host par votre adresse device_data_endpoint_address et la valeur x-amz-customauthorizer-signature par la chaîne de signature que vous avez utilisée avec la commande test-invoke-authorize de la section précédente.

        Clé Valeur
        x-amz-customauthorizer-name my-new-authorizer
        Host device_data_endpoint_address
        tokenKeyName tokenKeyValue
        x-amz-customauthorizer-signature DBWYKZLB+Fo+JMS GdwoGr 8DYC2QB/ IyLef JJR+RBCVMU9JL4KHAA9DG+V+MMWU09YSA86+64Y3GT4 9MNVB1WyXP+0BDzh8HMQuAuH3FWi3 Ca4CwNuLQNQB 7I2i +Cpy0ZRWT1JR9BiKGGP QHHTO357 9PP30UF4 A5K7QIC01N4BIYRTM90OYZ94R4BDJSHNIG1 OBVMGCEFE09JGJszeHFGAUAQIWXIVGQJ16BU1XKPTGSITAWHELKUJITOEXAMPLECK3AHKYKY+D1 tOykpZqn YHBQ8MJHZJ0KGGBT29VQJCB8RILN/P5+CVNISXWPPyB5JKys9UVG08ReoY64/R/F3VV8I 3 ACi6Ca+ 3 QQF/YSUY02U5 +sTO6K fPjBv ZzbCvsluv MjEg DxWkjaeehb TegKs TrxypNmFsw JePgnu vTvdthKt AtizfUhvSul TtQp aXiUtcsp tsDuXf LzCw XkWn CkpNlkD0WU8GL3+KoZXRTHNQ8GEAJD5IYLX230iQCXO3OSJPHA7JDYWM5O+KE 91i1MoKDR5SJ4JXIXVNJTVSX1LI49IALW4EN1DAKC1A0S2U2UNM236 Exemple de lotyh7H+ AWQF VKS1ZiUCLAZWW /Mot clé BiogoKjidGP9gWhXIiK7 WckTe WPMk9o= flFeloZl HxRlXsPqi JplpiWfBg zWrGm
    5. Dans l'onglet Body :

      1. Dans la zone d'option du format des données, choisissez Raw.

      2. Dans la liste des types de données, sélectionnez JavaScript.

      3. Dans le champ de texte, entrez la charge utile du message JSON pour votre message de test :

        { "data_mode": "test", "vibration": 200, "temperature": 40 }
  4. Choisissez Send pour envoyer la requête.

    Si la requête aboutit, elle renvoie :

    { "message": "OK", "traceId": "ff35c33f-409a-ea90-b06f-fbEXAMPLE25c" }

    La réponse positive indique que votre autorisateur personnalisé a autorisé la connexion à AWS IoT et que le message de test a été remis au broker in AWS IoT Core.

    S'il renvoie une erreur, consultez le message d'erreur, le device_data_endpoint_address, la chaîne de signature et autres valeurs d'en-tête.

Conservez cette demande dans Postman pour l'utiliser dans la section suivante.

Étape 6 : Afficher les messages dans le client de test MQTT

À l'étape précédente, vous avez envoyé des messages simulés à un appareil à l'aide AWS IoT de Postman. La réponse positive indique que votre mécanisme d’autorisation personnalisé a autorisé la connexion à AWS IoT et que le message de test a été livré au courtier en AWS IoT Core. Dans cette section, vous allez utiliser le client de test MQTT de la AWS IoT console pour voir le contenu du message, comme le feraient d'autres appareils et services.

Pour voir les messages de test autorisés par votre mécanisme d’autorisation personnalisé
  1. Dans la AWS IoT console, ouvrez le client de test MQTT.

  2. Dans l'onglet S'abonner à la rubrique, dans le filtre de rubriquetest/cust-auth/topic, entrez la rubrique du message utilisé dans l'exemple Postman de la section précédente.

  3. Choisissez Souscrire.

    Gardez cette fenêtre visible pour l'étape suivante.

  4. Dans Postman, dans la demande que vous avez créée pour la section précédente, choisissez Envoyer.

    Passez en revue la réponse pour vous assurer qu'elle a bien été prise en compte. Si ce n'est pas le cas, corrigez l'erreur comme décrit dans la section précédente.

  5. Dans le client de test MQTT, vous devriez voir une nouvelle entrée indiquant la rubrique du message et, s'il est développé, la charge utile du message provenant de la demande que vous avez envoyée depuis Postman.

    Si vous ne voyez pas vos messages dans le client de test MQTT, voici quelques points à vérifier :

    • Assurez-vous que votre demande Postman a été renvoyée avec succès. Si AWS IoT la connexion est rejetée et renvoie une erreur, le message contenu dans la demande n'est pas transmis au courtier de messages.

    • Assurez-vous que le Compte AWS et Région AWS utilisé pour ouvrir la AWS IoT console sont les mêmes que ceux que vous utilisez dans l'URL du Postman.

    • Assurez-vous d'avoir correctement saisi la rubrique dans le client de test MQTT. Le filtre de sujet est sensible à la casse. En cas de doute, vous pouvez également vous abonner à la # rubrique, qui s'abonne à tous les messages MQTT qui passent par le courtier de messages Compte AWS et Région AWS utilisés pour ouvrir la AWS IoT console.

Étape 7 : examen des résultats et des étapes suivantes

Dans ce tutoriel :
  • Vous avez créé une fonction Lambda pour être un gestionnaire de mécanisme d'autorisation personnalisé

  • Vous avez créé un mécanisme d'autorisation personnalisé avec la signature par jeton activée

  • Vous avez testé votre mécanisme d'autorisation personnalisé à l'aide de la commande test-invoke-authorizer

  • Vous avez publié une rubrique MQTT à l'aide de Postman et valider la demande avec votre mécanisme d'autorisation personnalisé

  • Vous avez utilisé le client de test MQTT pour visualiser les messages envoyés depuis votre test Postman

Étapes suivantes

Après avoir envoyé des messages de Postman pour vérifier que le mécanisme d’autorisation personnalisé fonctionne, essayez d'expérimenter pour voir comment la modification des différents aspects de ce didacticiel affecte les résultats. Voici quelques exemples pour vous aider à démarrer.

  • Modifiez la chaîne de signature afin qu'elle ne soit plus valide pour voir comment les tentatives de connexion non autorisées sont traitées. Vous devriez obtenir une réponse d'erreur, comme celle-ci, et le message ne devrait pas apparaître dans le client de test MQTT.

    { "message": "Forbidden", "traceId": "15969756-a4a4-917c-b47a-5433e25b1356" }
  • Pour en savoir plus sur la détection des erreurs susceptibles de se produire lors du développement et de l'utilisation de AWS IoT règles, consultezSurveillance AWS IoT.

Étape 8 : Nettoyer

Si vous souhaitez répéter ce didacticiel, vous devrez peut-être supprimer certains de vos mécanismes d’autorisation personnalisés. Vous ne Compte AWS pouvez configurer qu'un nombre limité d'autorisateurs personnalisés à la fois et vous pouvez en obtenir un LimitExceededException lorsque vous essayez d'en ajouter un nouveau sans supprimer un autorisateur personnalisé existant.

Pour supprimer un mécanisme d'autorisation personnalisé (console)
  1. Ouvrez la page d'autorisation personnalisée de la AWS IoT console et, dans la liste des autorisateurs personnalisés, recherchez l'autorisateur personnalisé à supprimer.

  2. Ouvrez la page de détails de mécanisme d’autorisation personnalisé et, dans le menu Actions, choisissez Modifier.

  3. Décochez la case Activer l'autorisateur, puis choisissez Mettre à jour.

    Vous ne pouvez pas supprimer un mécanisme d'autorisation personnalisé lorsqu'il est actif.

  4. Sur la page Détails du mécanisme d’autorisation personnalisé, ouvrez le menu Actions et choisissez Supprimer.

Pour supprimer un mécanisme d'autorisation personnalisé (AWS CLI)
  1. Répertoriez les mécanismes d’autorisation personnalisées que vous avez installées et recherchez ceux que vous souhaitez supprimer.

    aws iot list-authorizers
  2. Définissez le mécanisme d'autorisation personnalisé sur inactive en exécutant cette commande après avoir remplacé Custom_Auth_Name par authorizerName du mécanisme d'autorisation personnalisé à supprimer.

    aws iot update-authorizer --status INACTIVE --authorizer-name Custom_Auth_Name
  3. Supprimez le mécanisme d'autorisation personnalisé Custom_Auth_Name en exécutant cette commande après avoir remplacé authorizerName par du mécanisme d'autorisation personnalisé à supprimer.

    aws iot delete-authorizer --authorizer-name Custom_Auth_Name