Tutorial: Creación de un autorizador personalizado para AWS IoT Core - 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.

Tutorial: Creación de un autorizador personalizado para AWS IoT Core

En este tutorial se muestran los pasos para crear, validar y utilizar la autenticación personalizada mediante la AWS CLI. Si lo desea, con este tutorial, puede utilizar Postman para enviar datos a AWS IoT Core mediante la API de publicación HTTP.

En este tutorial se muestra cómo crear una función de Lambda de ejemplo que implemente la lógica de autorización y autenticación y un autorizador personalizado mediante la llamada a create-authorizer con la firma de token habilitada. A continuación, se valida el autorizador mediante la API de publicación HTTP ytest-invoke-authorizer, por último, se pueden enviar datos a él AWS IoT Core mediante la API de publicación HTTP a un tema de prueba de MQTT. La solicitud de ejemplo especificará el autorizador que se va a invocar mediante el x-amz-customauthorizer-name encabezado y pasará los encabezados de la solicitud y pasará los encabezados de la token-key-name solicitud. x-amz-customauthorizer-signature

Lo que aprenderá en este tutorial:
  • Cómo crear una función de Lambda para que sea un controlador de autorizador personalizado.

  • ¿Cómo crear un autorizador personalizado con la firma de token habilitada AWS CLI

  • Cómo probar su autorizador personalizado con el comando test-invoke-authorizer.

  • Cómo publicar un tema de MQTT con Postman y validar la solicitud con su autorizador personalizado.

Para completar este tutorial se necesitan aproximadamente 60 minutos.

Antes de empezar este tutorial, asegúrese de que tiene:
  • Configure su Cuenta de AWS

    Necesitarás tu AWS IoT consola Cuenta de AWS y tu consola para completar este tutorial.

    La cuenta que utiliza para este tutorial funciona mejor cuando incluye al menos estas políticas administradas de AWS :

    importante

    Las políticas de IAM utilizadas en este tutorial son más permisivas de lo que deberían en una implementación de producción. En un entorno de producción, asegúrese de que sus políticas de cuentas y recursos concedan solo los permisos necesarios.

    Cuando cree políticas de IAM para la producción, determine qué acceso necesitan los usuarios y los roles y, a continuación, diseñe las políticas que les permitan realizar solo esas tareas.

    Para obtener más información, consulte Prácticas recomendadas de seguridad en IAM.

  • Instaló la AWS CLI

    Para obtener información acerca de cómo instalar el AWS CLI, consulte Instalación de la AWS CLI. Este tutorial requiere una AWS CLI versión aws-cli/2.1.3 Python/3.7.4 Darwin/18.7.0 exe/x86_64 o posterior.

  • Herramientas de OpenSSL

    Los ejemplos de este tutorial utilizan LibreSSL 2.6.5. También puede usar las herramientas de OpenSSL v1.1.1i para este tutorial.

  • Ha revisado la descripción general de AWS Lambda

    Si no lo ha utilizado AWS Lambda antes, consulte AWS LambdaIntroducción a Lambda para conocer sus términos y conceptos.

  • Ha revisado cómo crear solicitudes en Postman

    Para obtener más información, consulte Creación de solicitudes.

  • Ha eliminado los autorizadores personalizados del tutorial anterior

    Solo Cuenta de AWS puede configurar un número limitado de autorizadores personalizados a la vez. Para obtener información sobre la eliminación de un autorizador personalizado, consulte Paso 8: Eliminación.

Paso 1: Crear una función de Lambda para su autorizador personalizado

La autenticación personalizada AWS IoT Core utiliza los recursos de autorización que usted crea para autenticar y autorizar a los clientes. La función que creará en esta sección autentica y autoriza a los clientes a medida que se conectan a los recursos y acceden a AWS IoT Core ellos. AWS IoT

La función de Lambda hace lo siguiente:

  • Si una solicitud procede de test-invoke-authorizer, devuelve una política de IAM con una acción Deny.

  • Si Postman envía una solicitud mediante HTTP y el actionToken parámetro tiene un valor deallow, devolverá una política de IAM con una acción. Allow En caso contrario, devuelve una política de IAM con una acción Deny.

Para crear la función de Lambda para su autorizador personalizado
  1. En la consola de Lambda, abra Funciones.

  2. Elija Crear función.

  3. Confirme que se ha seleccionado Crear desde cero.

  4. En Basic information:

    1. Bajo Function name (Nombre de función), escriba custom-auth-function.

    2. En Tiempo de ejecución, confirme Node.js 18.x.

  5. Elija Create function (Crear función).

    Lambda crea una función Node.js y un rol de ejecución que otorga a la función permiso para cargar los registros. La función Lambda asume la función de ejecución cuando se invoca la función y la utiliza para crear credenciales para el AWS SDK y leer los datos de las fuentes de eventos.

  6. Para ver el código y la configuración de la función en el AWS Cloud9editor, elija custom-auth-functionen la ventana del diseñador y, a continuación, elija index.js en el panel de navegación del editor.

    Para lenguajes de scripting como Node.js, Lambda incluye una función básica que devuelve una respuesta de éxito. Puede utilizar el editor de AWS Cloud9 para editar su función siempre que su código fuente no supere los 3 MB.

  7. Reemplace el código index.js en el editor por el siguiente código:

    // 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. Elija Implementar.

  9. Después de que los cambios implementados aparezcan encima del editor:

    1. Desplácese hasta la sección Información general de la función situada encima del editor.

    2. Copie el ARN de la función y guárdelo para utilizarlo más adelante en este tutorial.

  10. Comprobación de la función de .

    1. Elija la pestaña Prueba.

    2. Utilizando la configuración predeterminada de la prueba, seleccione Invocar.

    3. Si la prueba se ha realizado correctamente, abra la vista Detalles en Resultados de la ejecución. Debería ver el documento de política que devolvió la función.

      Si la prueba falló o no ve ningún documento de política, revise el código para encontrar y corregir los errores.

Paso 2: Crear un par de claves pública y privada para su autorizador personalizado

Su autorizador personalizado requiere una clave pública y privada para autenticarlo. Los comandos de esta sección utilizan herramientas OpenSSL para crear este par de claves.

Para crear un par de claves pública y privada para su autorizador personalizado
  1. Cree el archivo de clave privada.

    openssl genrsa -out private-key.pem 4096
  2. Verifique el archivo de clave privada que acaba de crear.

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

    Si el comando no muestra ningún error, el archivo de clave privada es válido.

  3. Cree el archivo de clave pública.

    openssl rsa -in private-key.pem -pubout -out public-key.pem
  4. Verifique el archivo de clave pública.

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

    Si el comando no muestra ningún error, el archivo de clave pública es válido.

Paso 3: Cree un recurso autorizador personalizado y su autorización

El autorizador AWS IoT personalizado es el recurso que une todos los elementos creados en los pasos anteriores. En esta sección, creará un recurso de autorizador personalizado y le dará permiso para ejecutar la función de Lambda que creó anteriormente. Puede crear un recurso de autorización personalizado mediante la AWS IoT consola AWS CLI, la o la AWS API.

Para este tutorial, solo necesita crear un autorizador personalizado. En esta sección se describe cómo crear mediante la AWS IoT consola y el AWS CLI, de modo que pueda utilizar el método que le resulte más conveniente. No hay diferencia entre los recursos del autorizador personalizado creados por uno u otro método.

Cree un recurso autorizador personalizado

Para crear un autorizador personalizado (consola)
  1. Abra la página del autorizador personalizado de la AWS IoT consola y elija Crear autorizador.

  2. En Crear un autorizador:

    1. En Nombre del autorizador, introduzca my-new-authorizer.

    2. En Estado del autorizador, marque Activo.

    3. En Función del autorizador, elija la función de Lambda que creó anteriormente.

    4. En Validación del token - opcional:

      1. Active Validación del token.

      2. En Nombre de la clave del token, introduzca tokenKeyName.

      3. Elija Agregar clave.

      4. En Nombre de la clave, introduzca FirstKey.

      5. En Clave pública, introduzca el contenido del archivo public-key.pem. Asegúrese de incluir las líneas del archivo con -----BEGIN PUBLIC KEY----- y -----END PUBLIC KEY-----, y no agregue ni elimine ningún salto de línea, retorno de carro u otros caracteres del contenido del archivo. La cadena que introduzca debe parecerse a la de este ejemplo.

        -----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. Elija Crear autorizador.

  4. Si se creó el recurso de autorizador personalizado, verá la lista de autorizadores personalizados y su nuevo autorizador personalizado debería aparecer en la lista y podrá continuar con la siguiente sección para probarlo.

    Si ve un error, revíselo e intente crear de nuevo su autorizador personalizado y vuelva a comprobar las entradas. Tenga en cuenta que cada recurso de autorizador personalizado debe tener un nombre único.

Para crear un autorizador personalizado (AWS CLI)
  1. Sustituya sus valores por authorizer-function-arn y token-signing-public-keys, y ejecute el siguiente comando:

    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-----"
    Donde:
    • El valor authorizer-function-arn es el nombre de recurso de Amazon (ARN) de la función de Lambda que creó para su autorizador personalizado.

    • El valor token-signing-public-keys incluye el nombre de la clave, FirstKey, y el contenido del archivo public-key.pem. Asegúrese de incluir las líneas del archivo con -----BEGIN PUBLIC KEY----- y -----END PUBLIC KEY-----, y no agregue ni elimine ningún salto de línea, retorno de carro u otros caracteres del contenido del archivo.

      Nota: Tenga cuidado al introducir la clave pública, ya que cualquier alteración de su valor la inutilizará.

  2. Si se crea el autorizador personalizado, el comando devuelve el nombre y el ARN del nuevo recurso, como se muestra a continuación.

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

    Guarde el valor authorizerArn para utilizarlo en el siguiente paso.

    Recuerde que cada recurso de autorizador personalizado debe tener un nombre único.

Autorización del recurso autorizador personalizado

En esta sección, concederá permiso al recurso de autorizador personalizado que acaba de crear para ejecutar la función de Lambda. Para conceder el permiso, puede utilizar el comando de la CLI add-permission.

Conceda permiso a su función Lambda mediante el AWS CLI
  1. Después de insertar sus valores, introduzca el siguiente comando. Tenga en cuenta que el valor statement-id debe ser único. Reemplace Id-1234 por otro valor si ha ejecutado este tutorial antes o si obtiene un error ResourceConflictException.

    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 el comando tiene éxito, devuelve una declaración de permiso, como la de este ejemplo. Puede continuar con la siguiente sección para probar el autorizador personalizado.

    { "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 el comando no tiene éxito, devuelve un error, como en este ejemplo. Tendrá que revisar y corregir el error antes de continuar.

    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

Paso 4: Pruebe el autorizador llamando test-invoke-authorizer

Con todos los recursos definidos, en esta sección llamarás test-invoke-authorizer desde la línea de comandos para probar la aprobación de la autorización.

Tenga en cuenta que al invocar el autorizador desde la línea de comandos, protocolData no está definido, por lo que el autorizador siempre devolverá un documento DENY. Sin embargo, esta prueba confirma que su autorizador personalizado y la función de Lambda están configurados correctamente, aunque no pruebe por completo la función de Lambda.

Para probar su autorizador personalizado y su función Lambda mediante el AWS CLI
  1. En el directorio que tiene el archivo private-key.pem que creó en un paso anterior, ejecute el siguiente comando.

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

    Este comando crea una cadena de firma que se utilizará en el siguiente paso. La cadena de firma tiene este aspecto:

    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=

    Copie esta cadena de firma para utilizarla en el siguiente paso. Tenga cuidado de no incluir ningún carácter de más ni omitir ninguno.

  2. En este comando, reemplace el valor token-signature por la cadena de firma del paso anterior y ejecute este comando para probar su autorizador.

    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 el comando se ejecuta correctamente, devuelve la información generada por la función de autorización personalizada, como en este ejemplo.

    { "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 el comando devuelve un error, revise el error y vuelva a comprobar los comandos que ha utilizado en esta sección.

Paso 5: Probar la publicación del mensaje MQTT utilizando Postman

  1. Para obtener el punto de conexión de datos de su dispositivo desde la línea de comandos, llame a describe-endpoint, tal y como se muestra aquí.

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

    Guarde esta dirección para utilizarla como device_data_endpoint_address en un paso posterior.

  2. Abra una nueva ventana de Postman y cree una nueva petición HTTP POST.

    1. Desde su ordenador, abra la aplicación Postman.

    2. En Postman, en el menú File, seleccione New....

    3. En el cuadro de diálogo New, seleccione Request.

    4. En Save Request,

      1. En Request Name, introduzca Custom authorizer test request.

      2. En Select a collection or folder to save to: elija o cree una colección en la que guardar esta solicitud.

      3. Seleccione Save to nombre_de_la_colección.

  3. Cree la solicitud POST para probar su autorizador personalizado.

    1. En el selector de método de solicitud situado junto al campo URL, elija POST.

    2. En el campo URL, cree la URL para su solicitud utilizando la siguiente URL con la dirección device_data_endpoint_address del comando describe-endpoint de un paso anterior.

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

      Tenga en cuenta que esta URL incluye el parámetro de consulta actionToken=allow que indicará a su función de Lambda que devuelva un documento normativo que permita el acceso a AWS IoT. Después de introducir la URL, los parámetros de consulta también aparecen en la pestaña Params de Postman.

    3. En la pestaña Auth, en el campo Type, elija No Auth.

    4. En la pestaña Headers:

      1. Si hay alguna clave de host que esté marcada, desmárquela.

      2. Al final de la lista de encabezados, agregue estos nuevos y confirme que están marcados. Reemplace el valor Host por su dirección device_data_endpoint_address y el valor x-amz-customauthorizer-signature por la cadena de firma que utilizó con el comando test-invoke-authorize en la sección anterior.

        Clave Valor
        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+CPY0zRWT1Jr9BikGgQ B 7i2i +CPY0zRWT1Jr9BikGgQ B p qhhto357 9pp30uF4 a5k7qic01n4biyrtm90oyz94r4bdjshnig1 obvmgcefe09jgjszehfgauaqiwxivgqj16bu1xkptgsitawhelkujiToExample Ck3ahkyky+d1 yHbQ8mJHZJ0kggbt29vqcbj8RILN/P5+VCVniSxWPPLYB5JKYS9UVG08REOY64 /r/F3VV8i 3 ACi6Ca+ 3 tOykpZqn QQF/YSUY02U5+STo6K fPjBv ZzbCvsluv MjEg DxWkjaeehb TegKs TrxypNmFsw JePgnu vTvdthKt AtizfUhvSul TtQp aXiUtcsp tsDuXf LzCw XkWn CkpNlkd0wu8gl3+kozxrthnq8geajd5iylx230iqcxo3osjpha7jdywm5o+ke 91i1mokdr5sj4jxixvnjtvsx1li49ialw4en1dakc1a0s2u2unm236 Ejemplo lotyh7h+ AWQF vks1ziuclazwprh/ord BioGokJidGp9gWHxiiK7 wPMk9o= WckTe flFeloZl HxRlXsPqi JplpiWfBg zWrGm
    5. En la pestaña Body:

      1. En el cuadro de opciones de formato de datos, elija Raw.

      2. En la lista de tipos de datos, elija JavaScript.

      3. En el campo de texto, introduzca esta carga de mensaje JSON para su mensaje de prueba:

        { "data_mode": "test", "vibration": 200, "temperature": 40 }
  4. Elija Send para enviar la solicitud.

    Si la solicitud se ha realizado correctamente, devuelve:

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

    Si la respuesta es correcta, indica que su autorizador personalizado permitió la conexión AWS IoT y que el mensaje de prueba se entregó a Broker In AWS IoT Core.

    Si devuelve un error, revise el mensaje de error, la dirección device_data_endpoint_address, la cadena de firma y los demás valores de encabezado.

Guarde esta solicitud en Postman para utilizarla en la siguiente sección.

Paso 6: Visualizar los mensajes en el cliente de prueba MQTT

En el paso anterior, enviaste mensajes de dispositivo AWS IoT simulados a través de Postman. La respuesta correcta indicó que su autorizador personalizado permitió la conexión a AWS IoT y que el mensaje de prueba fue entregado al agente en AWS IoT Core. En esta sección, utilizará el cliente de prueba MQTT de la AWS IoT consola para ver el contenido del mensaje de la misma forma que lo harían otros dispositivos y servicios.

Para ver los mensajes de prueba autorizados por su autorizador personalizado
  1. En la AWS IoT consola, abra el cliente de prueba de MQTT.

  2. En la pestaña Suscribirse al tema, en Filtro de temas, introduzca test/cust-auth/topic, que es el tema de mensaje utilizado en el ejemplo de Postman de la sección anterior.

  3. Elija Suscribirse.

    Mantenga esta ventana visible para el siguiente paso.

  4. En Postman, en la solicitud que creó para la sección anterior, elija Send.

    Revise la respuesta para asegurarse de que se ha realizado correctamente. Si no es así, solucione el error, tal y como se describe en la sección anterior.

  5. En el cliente de prueba de MQTT debería ver una nueva entrada que muestra el tema del mensaje y, si está expandido, la carga del mensaje de la solicitud que envió desde Postman.

    Si no ve sus mensajes en el cliente de prueba MQTT, he aquí algunas cosas que debe comprobar:

    • Asegúrese de que su solicitud de Postman ha sido devuelta correctamente. Si AWS IoT rechaza la conexión y devuelve un error, el mensaje de la solicitud no se pasa al intermediario de mensajes.

    • Asegúrese de que la Cuenta de AWS URL Región de AWS utilizada para abrir la AWS IoT consola sea la misma que la que utiliza en la URL de Postman.

    • Asegúrese de que ha introducido correctamente el tema en el cliente de prueba MQTT. El filtro del tema distingue entre mayúsculas y minúsculas. En caso de duda, también puedes suscribirte al # tema, que contiene todos los mensajes de MQTT que pasan por el intermediario de mensajes Cuenta de AWS y que Región de AWS se utilizan para abrir la consola. AWS IoT

Paso 7: Revisar los resultados y los siguientes pasos

En este tutorial:
  • Ha creado una función de Lambda para que sea un controlador de autorizador personalizado.

  • ha creado un autorizador personalizado con la firma de token habilitada.

  • Ha probado su autorizador personalizado con el comando test-invoke-authorizer.

  • Ha publicado un tema de MQTT con Postman y validar la solicitud con su autorizador personalizado.

  • Ha utilizado el cliente de prueba de MQTT para ver los mensajes enviados desde su prueba de Postman.

Siguientes pasos

Después de enviar algunos mensajes desde Postman para verificar que el autorizador personalizado funciona, pruebe a experimentar para ver cómo afecta a los resultados cambiar diferentes aspectos de este tutorial. He aquí algunos ejemplos para empezar.

  • Cambie la cadena de firma para que deje de ser válida y vea cómo se gestionan los intentos de conexión no autorizados. Debería obtener una respuesta de error, como esta, y el mensaje no debería aparecer en el cliente de prueba MQTT.

    { "message": "Forbidden", "traceId": "15969756-a4a4-917c-b47a-5433e25b1356" }
  • Para obtener más información sobre cómo detectar los errores que pueden producirse al desarrollar y utilizar AWS IoT reglas, consulte. Monitorización AWS IoT

Paso 8: Eliminación

Si desea repetir este tutorial, puede que tenga que eliminar algunos de sus autorizadores personalizados. Solo Cuenta de AWS puede configurar un número limitado de autorizadores personalizados a la vez y puede obtener uno LimitExceededException si intenta añadir uno nuevo sin eliminar uno existente.

Para eliminar un autorizador personalizado (consola)
  1. Abre la página de autorizadores personalizados de la AWS IoT consola y, en la lista de autorizadores personalizados, busca el autorizador personalizado que deseas eliminar.

  2. Abra la página de detalles del autorizador personalizado y, en el menú Acciones, seleccione Editar.

  3. Desmarque la casilla Activar autorizador y, a continuación, seleccione Actualizar.

    No puede eliminar un autorizador personalizado mientras esté activo.

  4. En la página de detalles del autorizador personalizado, abra el menú Acciones y seleccione Eliminar.

Para eliminar un autorizador personalizado (AWS CLI)
  1. Enumere los autorizadores personalizados que tiene instalados y busque el nombre del autorizador personalizado que desea eliminar.

    aws iot list-authorizers
  2. Establezca el autorizador personalizado como inactive ejecutando este comando después de sustituir Custom_Auth_Name por el authorizerName del autorizador personalizado para eliminar.

    aws iot update-authorizer --status INACTIVE --authorizer-name Custom_Auth_Name
  3. Elimine el autorizador personalizado ejecutando este comando después de sustituir Custom_Auth_Name por el authorizerName del autorizador personalizado para eliminar.

    aws iot delete-authorizer --authorizer-name Custom_Auth_Name