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, el autorizador se valida mediante test-invoke-authorizer y, por último, puede enviar datos a AWS IoT Core mediante la API de publicación HTTP para probar un tema de MQTT. 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 mediante la 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.
En este tutorial, recorrerá los siguientes pasos:
- Paso 1: crear una función de Lambda para su autorizador personalizado
- Paso 2: crear un par de claves pública y privada para su autorizador personalizado
- Paso 3: crear un recurso autorizador personalizado y su autorización
- Paso 4: Probar el autorizador llamando a test-invoke-authorizer
- Paso 5: Probar la publicación del mensaje MQTT utilizando Postman
- Paso 6: Visualizar los mensajes en el cliente de prueba MQTT
- Paso 7: Revisar los resultados y los siguientes pasos
- Paso 8: Eliminación
Antes de empezar este tutorial, asegúrese de que tiene:
-
Configuración de Cuenta de AWS
Necesitará su Cuenta de AWS y la consola de AWS IoT 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.
-
Ha instalado la AWS CLI
Para obtener información sobre cómo instalar la AWS CLI, consulte Instalación de la CLI de AWS. Este tutorial requiere la versión de la AWS CLI
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 Lambda e 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
Su Cuenta de AWS solo puede tener un número limitado de autorizadores personalizados configurados 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 en AWS IoT Core utiliza recursos de autorizador 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 AWS IoT Core y acceden a los recursos de 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 deallow
, devuelve una política de IAM con una acciónAllow
. En caso contrario, devuelve una política de IAM con una acciónDeny
.
Para crear la función de Lambda para su autorizador personalizado
-
Elija Crear función.
-
Confirme que se ha seleccionado Crear desde cero.
-
En Basic information:
-
Bajo Function name (Nombre de función), escriba
custom-auth-function
. -
En Tiempo de ejecución, confirme Node.js 18.x.
-
-
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 de Lambda asume el rol de ejecución cuando se invoca la función y utiliza el rol de ejecución para crear credenciales para el SDK de AWS y leer datos de orígenes de eventos.
-
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.
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.
-
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; }
-
Elija Implementar.
-
Después de que los cambios implementados aparezcan encima del editor:
-
Desplácese hasta la sección Información general de la función situada encima del editor.
-
Copie el ARN de la función y guárdelo para utilizarlo más adelante en este tutorial.
-
-
Comprobación de la función de .
-
Elija la pestaña Prueba.
-
Utilizando la configuración predeterminada de la prueba, seleccione Invocar.
-
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
-
Cree el archivo de clave privada.
openssl genrsa -out private-key.pem 4096
-
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.
-
Cree el archivo de clave pública.
openssl rsa -in private-key.pem -pubout -out public-key.pem
-
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 personalizado de AWS IoT 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 autorizador personalizado utilizando la consola de AWS IoT, la AWS CLI o la API de AWS.
Para este tutorial, solo necesita crear un autorizador personalizado. Esta sección describe cómo crearlo utilizando la consola de AWS IoT y la AWS CLI, para que pueda utilizar el método que más le convenga. No hay diferencia entre los recursos del autorizador personalizado creados por uno u otro método.
Creación de un recurso de autorizador personalizado
Elija una de estas opciones para crear su recurso de autorizador personalizado
Para crear un autorizador personalizado (consola)
-
Abra la página Autorizador personalizado de la consola de AWS IoT
y seleccione Crear autorizador. -
En Crear un autorizador:
-
En Nombre del autorizador, introduzca
my-new-authorizer
. -
En Estado del autorizador, marque Activo.
-
En Función del autorizador, elija la función de Lambda que creó anteriormente.
-
En Validación del token - opcional:
-
Active Validación del token.
-
En Nombre de la clave del token, introduzca
tokenKeyName
. -
Elija Agregar clave.
-
En Nombre de la clave, introduzca
FirstKey
. -
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-----
-
-
-
Elija Crear autorizador.
-
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)
-
Sustituya sus valores por
authorizer-function-arn
ytoken-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:
" \ --token-signing-public-keys FirstKey="Region
:57EXAMPLE833:function:custom-auth-function-----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 archivopublic-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á.
-
-
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 desde la AWS CLI.
-
Después de insertar sus valores, introduzca el siguiente comando. Tenga en cuenta que el valor
statement-id
debe ser único. Reemplace
por otro valor si ha ejecutado este tutorial antes o si obtiene un errorId-1234
ResourceConflictException
.aws lambda add-permission \ --function-name "custom-auth-function" \ --principal "iot.amazonaws.com" \ --action "lambda:InvokeFunction" \ --statement-id "
Id-1234
" \ --source-arnauthorizerArn
-
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 de Lambda desde la AWS CLI
-
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.
-
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
-
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. -
Abra una nueva ventana de Postman y cree una nueva petición HTTP POST.
-
Desde su ordenador, abra la aplicación Postman.
-
En Postman, en el menú File, seleccione New....
-
En el cuadro de diálogo New, seleccione Request.
-
En Save Request,
-
En Request Name, introduzca
Custom authorizer test request
. -
En Select a collection or folder to save to: elija o cree una colección en la que guardar esta solicitud.
-
Seleccione Save to
nombre_de_la_colección
.
-
-
-
Cree la solicitud POST para probar su autorizador personalizado.
-
En el selector de método de solicitud situado junto al campo URL, elija POST.
-
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-endpointde un paso anterior. https://
device_data_endpoint_address
:443/topics/test/cust-auth/topic?qos=0&actionToken=allowTenga 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. -
En la pestaña Auth, en el campo Type, elija No Auth.
-
En la pestaña Headers:
-
Si hay alguna clave de host que esté marcada, desmárquela.
-
Al final de la lista de encabezados, agregue estos nuevos y confirme que están marcados. Reemplace el valor
Host
por su direccióndevice_data_endpoint_address
y el valorx-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+JmSGdwoGr8dyC2qB/IyLefJJr+rbCvmu9Jl4KHAA9DG+V+MMWu09YSA86+64Y3Gt4tOykpZqn9mnVB1wyxp+0bDZh8hmqUAUH3fwi3fPjBvCa4cwNuLQNqBZzbCvsluv7i2IMjEg+CPY0zrWt1jr9BikgGPDxWkjaeehbQHHTo357TegKs9pP30Uf4TrxypNmFswA5k7QIc01n4bIyRTm90OyZ94R4bdJsHNig1JePgnuOBvMGCEFE09jGjjszEHfgAUAQIWXiVGQj16BU1xKpTGSiTAwheLKUjITOEXAMPLECK3aHKYKY+d1vTvdthKtYHBq8MjhzJ0kggbt29VQJCb8RilN/P5+vcVniSXWPplyB5jkYs9UvG08REoy64AtizfUhvSul/r/F3VV8ITtQp3aXiUtcspACi6ca+tsDuXf3LzCwQQF/YSUy02u5XkWn+sto6KCkpNlkD0wU8gl3+kOzxrthnQ8gEajd5Iylx230iqcXo3osjPha7JDyWM5o+KEWckTe91I1mokDr5sJ4JXixvnJTVSx1li49IalW4en1DAkc1a0s2U2UNm236EXAMPLELotyh7h+flFeloZlAWQFHxRlXsPqiVKS1ZIUClaZWprh/orDJplpiWfBgBIOgokJIDGP9gwhXIIk7zWrGmWpMK9o=
-
-
En la pestaña Body:
-
En el cuadro de opciones de formato de datos, elija Raw.
-
En la lista de tipos de datos, seleccione JavaScript.
-
En el campo de texto, introduzca esta carga de mensaje JSON para su mensaje de prueba:
{ "data_mode": "test", "vibration": 200, "temperature": 40 }
-
-
-
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 a AWS IoT y que el mensaje de prueba fue entregado al agente en 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, envió mensajes simulados de dispositivo a AWS IoT mediante 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 de MQTT en la consola de AWS IoT para ver el contenido del mensaje como podrían hacerlo otros dispositivos y servicios.
Para ver los mensajes de prueba autorizados por su autorizador personalizado
-
En la consola de AWS IoT, abra el cliente de prueba MQTT
. -
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. -
Elija Suscribirse.
Mantenga esta ventana visible para el siguiente paso.
-
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.
-
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 agente de mensajes.
-
Asegúrese de que la Cuenta de AWS y la Región de AWS utilizadas para abrir la consola de AWS IoT son las mismas que está utilizando 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 puede suscribirse al tema
#
, que se suscribe a todos los mensajes MQTT que pasan por el agente de mensajes, la Cuenta de AWS y la Región de AWS que se utilizan para abrir la consola de 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 saber más sobre cómo encontrar los errores que pueden producirse mientras implementa y utiliza las reglas de AWS IoT, consulte Supervisión de AWS IoT.
Paso 8: Eliminación
Si desea repetir este tutorial, puede que tenga que eliminar algunos de sus autorizadores personalizados. Su Cuenta de AWS solo puede tener un número limitado de autorizadores personalizados configurados a la vez y puede recibir una excepción LimitExceededException
cuando intente agregar uno nuevo sin eliminar un autorizador personalizado existente.
Para eliminar un autorizador personalizado (consola)
-
Abra la página Autorizador personalizado de la consola de AWS IoT
y, en la lista de autorizadores personalizados, busque el autorizador personalizado que quiera eliminar. -
Abra la página de detalles del autorizador personalizado y, en el menú Acciones, seleccione Editar.
-
Desmarque la casilla Activar autorizador y, a continuación, seleccione Actualizar.
No puede eliminar un autorizador personalizado mientras esté activo.
-
En la página de detalles del autorizador personalizado, abra el menú Acciones y seleccione Eliminar.
Para eliminar un autorizador personalizado (AWS CLI)
-
Enumere los autorizadores personalizados que tiene instalados y busque el nombre del autorizador personalizado que desea eliminar.
aws iot list-authorizers
-
Establezca el autorizador personalizado como
inactive
ejecutando este comando después de sustituir
por elCustom_Auth_Name
authorizerName
del autorizador personalizado para eliminar.aws iot update-authorizer --status INACTIVE --authorizer-name
Custom_Auth_Name
-
Elimine el autorizador personalizado ejecutando este comando después de sustituir
por elCustom_Auth_Name
authorizerName
del autorizador personalizado para eliminar.aws iot delete-authorizer --authorizer-name
Custom_Auth_Name