View a markdown version of this page

Tutorial: Crear 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: Crear 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, el autorizador se valida mediante la API HTTP Publish ytest-invoke-authorizer, AWS IoT Core por último, puedes enviar datos a un tema de MQTT de prueba a través de la API HTTP Publish. La solicitud de ejemplo especificará el autorizador que se va a invocar mediante el encabezado x-amz-customauthorizer-name y pasará el token-clave-nombre y x-amz-customauthorizer-signature en los encabezados de la solicitud.

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 utilizando la opción AWS CLI con la firma de token habilitada

  • 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:
  • Configuración Cuenta de AWS

    Necesitarás tu AWS IoT consola Cuenta de AWS y la tuya 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ó el AWS CLI

    Para obtener información sobre 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.

  • Revisó el AWS Lambda Descripción general de

    Si no lo ha usado AWS Lambda antes, consulte AWS Lambda la sección Introducció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 creas para autenticar y autorizar a los clientes. La función que crearás 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 una solicitud procede de Postman mediante HTTP y el parámetro actionToken tiene un valor de allow, devuelve 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. Seleccione Creación de 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 Runtime, confirme 18.x Node.js

  5. Seleccione Creación de función.

    Lambda crea una Node.js función y un rol de ejecución que otorgan a la función permiso para cargar registros. La función Lambda asume la función de ejecución cuando se invoca la función y la usa 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 editor de AWS Cloud9, elija custom-auth-function en la ventana del diseñador y, a continuación, seleccione index.js en el panel de navegación del editor.

    En el caso de lenguajes de programación como Lambda Node.js, incluye una función básica que devuelve una respuesta correcta. 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: crear 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. Puedes crear un recurso de autorización personalizado mediante la AWS IoT consola, la API o la AWS CLI 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 la AWS CLI, para que puedas utilizar el método que te resulte más cómodo. No hay diferencia entre los recursos del autorizador personalizado creados por uno u otro método.

Creación de un recurso de autorizador personalizado

Para crear un autorizador personalizado (consola)
  1. Abre la página del autorizador personalizado de la AWS IoT consola y selecciona Crear un 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 de 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: Probar el autorizador llamando a test-invoke-authorizer

Con todos los recursos definidos, en esta sección, llamará a test-invoke-authorizer desde la línea de comandos para probar el pase de 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 tiene éxito, devuelve la información generada por su 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 usarla 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. Selecciona Guardar en collection_name.

  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 de su solicitud utilizando la siguiente URL con el comando device_data_endpoint_address from the describe-endpoint del 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. Sustituya el Host valor por el device_data_endpoint_address suyo y el x-amz-customauthorizer-signature valor por la cadena de firma que utilizó con el test-invoke-authorize comando de 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+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mnVB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeehbQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjjszEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29VQJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuXf3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+KEWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFHxRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=
    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" }

    La respuesta correcta indica que su autorizador personalizado permitió la conexión AWS IoT y que el mensaje de prueba se entregó al intermediario AWS IoT Core.

    Si devuelve un error, revisa el mensaje de errordevice_data_endpoint_address, la cadena de firma y los demás valores del 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ás el cliente de prueba MQTT de la AWS IoT consola para ver el contenido de ese mensaje igual 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, abre el cliente de prueba 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 envía al intermediario de mensajes.

    • Asegúrate de que los Región de AWS campos Cuenta de AWS y utilizados para abrir la AWS IoT consola son los mismos que utilizas en la URL de Postman.

    • Asegúrese de usar el punto de conexión adecuado para el autorizador personalizado. Es posible que el punto de conexión predeterminado de IoT no admita el uso de autorizadores personalizados con funciones de Lambda. En su lugar, puede usar las configuraciones de dominio para definir un nuevo punto de conexión y, a continuación, especificarlo para el autorizador personalizado.

    • 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 suscribe todos los mensajes de MQTT que pasen por el intermediario de mensajes Cuenta de AWS y Región de AWS se usen 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 encontrar los errores que puedan producirse mientras se desarrollan y utilizan AWS IoT las reglas, consulte. Supervisió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 puedes configurar un número limitado de autorizadores personalizados a la vez y puedes obtener uno LimitExceededException cuando intentes agregar uno nuevo sin eliminar un autorizador personalizado 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 que quieras 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