Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Definición de la función de Lambda

Modo de enfoque
Definición de la función de Lambda - 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.

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.

Cuando AWS IoT Core invoca al autorizador, activa la Lambda asociada al autorizador con un evento que contiene el siguiente objeto JSON. El objeto JSON de ejemplo contiene todos los campos posibles. No se incluye ningún campo que no sea relevante para la solicitud de conexión.

{     "token" :"aToken",     "signatureVerified": Boolean, // Indicates whether the device gateway has validated the signature.     "protocols": ["tls", "http", "mqtt"], // Indicates which protocols to expect for the request.     "protocolData": {         "tls" : {             "serverName": "serverName" // The server name indication (SNI) host_name string.         },         "http": {             "headers": {                 "#{name}": "#{value}"             },             "queryString": "?#{name}=#{value}"         },         "mqtt": {             "username": "myUserName",             "password": "myPassword", // A base64-encoded string.             "clientId": "myClientId" // Included in the event only when the device sends the value.         }     },     "connectionMetadata": {         "id": UUID // The connection ID. You can use this for logging.     }, }

La función de Lambda debe usar esta información para autenticar la conexión entrante y decidir qué acciones se permiten en la conexión. La función debe enviar una respuesta que contenga los siguientes valores.

  • isAuthenticated: un valor booleano que indica si la solicitud se ha autenticado.

  • principalId: una cadena alfanumérica que actúa como identificador del token enviado por la solicitud de autorización personalizada. El valor debe ser una cadena alfanumérica entre 1 y 128 caracteres, y debe coincidir con este patrón de expresión regular (regex): ([a-zA-Z0-9]){1,128}. No se permite el uso de caracteres especiales que no sean alfanuméricos con el in. principalId AWS IoT Core Consulte la documentación de otros AWS servicios si se permiten caracteres especiales no alfanuméricos para el. principalId

  • policyDocuments: Una lista de documentos de políticas con formato JSON Para obtener más información sobre la creación de AWS IoT Core políticas, consulte. AWS IoT Core AWS IoT Core políticas El número máximo de documentos de políticas es de 10. Cada documento de política puede contener un máximo de 2048 caracteres.

  • disconnectAfterInSeconds: un entero que especifica la duración máxima (en segundos) de la conexión a la puerta de enlace de AWS IoT Core . El valor mínimo es de 300 segundos y el máximo es de 86 400 segundos. El valor predeterminado es 86 400.

    nota

    El valor de disconnectAfterInSeconds (devuelto por la función de Lambda) se determina cuando se establece la conexión. Este valor no se puede modificar durante las siguientes invocaciones de Lambda de actualización de políticas.

  • refreshAfterInSeconds: un entero que especifica el intervalo entre las actualizaciones de la política. Cuando pasa este intervalo, AWS IoT Core invoca la función de Lambda para permitir la actualización de las políticas. El valor mínimo es de 300 segundos y el máximo es de 86 400 segundos.

 El siguiente objeto JSON contiene un ejemplo de una respuesta que la función de Lambda puede enviar.

{ "isAuthenticated":true//A Boolean that determines whether client can connect. "principalId": "xxxxxxxx"//A string that identifies the connection in logs. "disconnectAfterInSeconds": 86400"refreshAfterInSeconds": 300,   "policyDocuments": [       {         "Version": "2012-10-17",         "Statement": [            {               "Action": "iot:Publish",               "Effect": "Allow",               "Resource": "arn:aws:iot:us-east-1:<your_aws_account_id>:topic/customauthtesting"             }          ]        }     ] }

El policyDocument valor debe contener un documento de política válido AWS IoT Core . Para obtener más información sobre AWS IoT Core las políticas, consulteAWS IoT Core políticas. En MQTT sobre TLS y MQTT sobre WebSockets conexiones, almacena en AWS IoT Core caché esta política durante el intervalo especificado en el valor del campo. refreshAfterInSeconds En el caso de las conexiones HTTP, se invoca la función de Lambda para cada solicitud de autorización, a menos que su dispositivo utilice conexiones HTTP persistentes (también denominadas HTTP keep-alive o reutilización de conexiones HTTP). Puede optar por habilitar el almacenamiento en caché al configurar el autorizador. Durante este intervalo, AWS IoT Core autoriza las acciones en una conexión establecida en contra de esta política en caché sin volver a activar la función Lambda. Si se producen errores durante la autenticación personalizada, AWS IoT Core finaliza la conexión. AWS IoT Core también termina la conexión si ha estado abierta durante más tiempo que el valor especificado en el disconnectAfterInSeconds parámetro.

A continuación, se JavaScript incluye un ejemplo de función Lambda de Node.js que busca una contraseña en el mensaje de MQTT Connect con un valor test de y devuelve una política que concede permiso AWS IoT Core para conectarse con un cliente myClientName denominado y publicar en un tema que contenga el mismo nombre de cliente. Si no encuentra la contraseña esperada, devuelve una política que deniega esas dos acciones.

// A simple Lambda function for an authorizer. It demonstrates // how to parse an MQTT password and generate a response. exports.handler = function(event, context, callback) {     var uname = event.protocolData.mqtt.username;     var pwd = event.protocolData.mqtt.password;     var buff = new Buffer(pwd, 'base64');     var passwd = buff.toString('ascii');     switch (passwd) {         case 'test':             callback(null, generateAuthResponse(passwd, 'Allow')); break;         default:             callback(null, generateAuthResponse(passwd, 'Deny'));       } }; // Helper function to generate the authorization response. var generateAuthResponse = function(token, effect) { var authResponse = {}; authResponse.isAuthenticated = true; authResponse.principalId = 'TEST123'; var policyDocument = {}; policyDocument.Version = '2012-10-17'; policyDocument.Statement = []; var publishStatement = {}; var connectStatement = {}; connectStatement.Action = ["iot:Connect"]; connectStatement.Effect = effect; connectStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:client/myClientName"]; publishStatement.Action = ["iot:Publish"]; publishStatement.Effect = effect; publishStatement.Resource = ["arn:aws:iot:us-east-1:123456789012:topic/telemetry/myClientName"]; policyDocument.Statement[0] = connectStatement; policyDocument.Statement[1] = publishStatement; authResponse.policyDocuments = [policyDocument]; authResponse.disconnectAfterInSeconds = 3600; authResponse.refreshAfterInSeconds = 300; return authResponse; }

La función de Lambda anterior devuelve el siguiente JSON cuando recibe la contraseña esperada de test en el mensaje MQTT Connect. Los valores de las propiedades password y principalId serán los valores del mensaje MQTT Connect.

{ "password": "password", "isAuthenticated": true, "principalId": "principalId", "policyDocuments": [ { "Version": "2012-10-17", "Statement": [ { "Action": "iot:Connect", "Effect": "Allow", "Resource": "*" }, { "Action": "iot:Publish", "Effect": "Allow", "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}" }, { "Action": "iot:Subscribe", "Effect": "Allow", "Resource": "arn:aws:iot:region:accountId:topicfilter/telemetry/${iot:ClientId}" }, { "Action": "iot:Receive", "Effect": "Allow", "Resource": "arn:aws:iot:region:accountId:topic/telemetry/${iot:ClientId}" } ] } ], "disconnectAfterInSeconds": 3600, "refreshAfterInSeconds": 300 }
PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.