AWS IoT Greengrass Version 1 entró en la fase de vida útil prolongada el 30 de junio de 2023. Para obtener más información, consulte la política de mantenimiento de AWS IoT Greengrass V1 Después de esta fecha, AWS IoT Greengrass V1 no se publicarán actualizaciones que proporcionen funciones, mejoras, correcciones de errores o parches de seguridad. Los dispositivos que se ejecuten AWS IoT Greengrass V1 no se verán afectados y seguirán funcionando y conectándose a la nube. Le recomendamos encarecidamente que migre a AWS IoT Greengrass Version 2, ya que añade importantes funciones nuevas y es compatible con plataformas adicionales.
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.
Cómo crear un recurso de secreto (consola)
Esta característica está disponible en la versión 1.7 y posteriores de AWS IoT Greengrass Core.
Este tutorial muestra cómo utilizar la AWS Management Console para añadir un recurso de secreto a un grupo de Greengrass. Un recurso de secreto es una referencia a un secreto de AWS Secrets Manager. Para obtener más información, consulte Implementación de secretos en el núcleo de AWS IoT Greengrass.
En el dispositivo principal de AWS IoT Greengrass, los conectores y las funciones de Lambda pueden usar el recurso de secretos para autenticarse con servicios y aplicaciones, sin necesidad de codificación rígida de contraseñas, tokens u otras credenciales.
En este tutorial, comience con la creación de un secreto en la consola de AWS Secrets Manager. A continuación, en la consola de AWS IoT Greengrass, añada un recurso secreto a un grupo de Greengrass de la página Recursos. Este recurso secreto hace referencia al secreto de Secrets Manager. Posteriormente, asocie un recurso secreto a una función de Lambda, que permite a la función obtener el valor del secreto local.
nota
Como alternativa, la consola le permite crear un secreto y un recurso secreto al configurar un conector o una función de Lambda. Puede hacerlo desde la página Configurar parámetros del conector o desde la página Recursos de la función de Lambda.
Solo los conectores que contienen los parámetros de secretos pueden acceder a los secretos. Para obtener un tutorial que muestra la forma en que el conector de notificaciones Twilio utiliza un token de autenticación almacenado localmente, consulte Introducción a los conectores de Greengrass (consola).
El tutorial contiene los siguientes pasos generales:
Completar el tutorial debería tomarle aproximadamente 20 minutos.
Requisitos previos
Para completar este tutorial, se necesita lo siguiente:
-
Un grupo de Greengrass y un núcleo de Greengrass (versión 1.7 o posterior). Para obtener información acerca de cómo crear un núcleo y un grupo de Greengrass, consulte Introducción a AWS IoT Greengrass. El tutorial de introducción también incluye pasos para instalar el software AWS IoT Greengrass Core.
-
AWS IoT Greengrass debe estar configurado para admitir secretos locales. Para obtener más información, consulte Requisitos de secretos.
nota
Este requisito incluye permitir el acceso a sus secretos de Secret Manager. Si utiliza el rol de servicio predeterminado de Greengrass, Greengrass tiene permiso para obtener los valores de los secretos cuyos nombres empiecen por greengrass-.
-
Para obtener los valores de los secretos locales, las funciones de Lambda definidas por el usuario deben usar la versión 1.3.0 o posterior del SDK de AWS IoT Greengrass Core.
Paso 1: Creación de un secreto de Secrets Manager
En este paso, utilice la consola de AWS Secrets Manager para crear un secreto.
-
Inicie sesión en la consola de AWS Secrets Manager
. nota
Para obtener más información sobre este proceso, consulte Paso 1: Crear y almacenar el secreto en AWS Secrets Manager en la Guía del usuario de AWS Secrets Manager.
-
Elija Almacenar un secreto nuevo.
-
En Seleccionar tipo de secreto, elija Otro tipo de secreto.
-
En Specify the key-value pairs to be stored for this secret (Especificar los pares clave-valor que se almacenarán para este secreto):
-
En Clave, escriba
test
. -
En Valor, introduzca
abcdefghi
.
-
-
Mantenga aws/secretsmanager seleccionado para la clave de cifrado y, a continuación, seleccione Siguiente.
nota
AWS KMS no le cobrará si utiliza la clave administrada de AWS predeterminada que Secrets Manager crea en su cuenta.
-
En Secret name (Nombre del secreto), escriba
greengrass-TestSecret
y, a continuación, seleccione Next (Siguiente).nota
De forma predeterminada, el rol de servicio Greengrass permite a AWS IoT Greengrass obtener el valor de los secretos con nombres que comienzan por greengrass-. Para obtener más información, consulte requisitos de secretos.
-
Este tutorial no requiere rotación, así que elija desactivar la rotación automática y, a continuación, seleccione Siguiente.
-
En la página Review (Revisar), revise los ajustes y, a continuación, seleccione Store (Almacenar).
A continuación, se crea un recurso de secreto en su grupo de Greengrass que hace referencia al secreto.
Paso 2: Agregar un recurso de secreto a un grupo de Greengrass
En este paso, debe configurar un recurso de grupo que hace referencia al secreto de Secrets Manager.
En el panel de navegación de la consola de AWS IoT, en Administrar, expanda los Dispositivos de Greengrass y, a continuación, elija Grupos (V1).
-
Elija el grupo al que desee añadir el recurso de secreto.
-
En la página de configuración del grupo, elija la pestaña Recursos y, a continuación, desplácese hacia abajo hasta la sección Secretos. La sección Secretos muestra los recursos secretos que pertenecen al grupo. Puede añadir, editar y quitar los recursos de secreto de esta sección.
nota
Como alternativa, la consola le permite crear un secreto y un recurso secreto al configurar un conector o una función de Lambda. Puede hacerlo desde la página Configurar parámetros del conector o desde la página Recursos de la función de Lambda.
-
Seleccione Añadir en la sección Secretos.
-
En la página Añadir un recurso secreto, introduzca
MyTestSecret
el Nombre del recurso. -
En Secreto, seleccione Greengrass-TestSecret.
-
En la sección Seleccionar etiquetas (opcional), la etiqueta provisional AWSCURRENT representa la versión más reciente del secreto. Esta etiqueta siempre está incluida en un recurso de secreto.
nota
Este tutorial solo requiere la etiqueta AWSCURRENT. De forma opcional, puede incluir etiquetas que requieran su función de Lambda o un conector.
-
Seleccione Add resource (Añadir recurso).
Paso 3: Creación de un paquete de implementación de la función de Lambda
Para crear una función de Lambda, primero debe crear un paquete de implementación de funciones de Lambda que contenga el código de la función y las dependencias. Las funciones de Lambda de Greengrass requieren el SDK de AWS IoT Greengrass Core para tareas como la comunicación con los mensajes de MQTT en el entorno principal y el acceso a los secretos locales. En este tutorial se crea una característica de Python para que utilice la versión Python del SDK en el paquete de implementación.
nota
Para obtener los valores de los secretos locales, las funciones de Lambda definidas por el usuario deben usar la versión 1.3.0 o posterior del SDK de AWS IoT Greengrass Core.
-
Desde la página de descargas del SDK de AWS IoT Greengrass Core, descargue el SDK de AWS IoT Greengrass básico para Python en su ordenador.
-
Descomprima el paquete descargado para obtener el SDK. El SDK es la carpeta
greengrasssdk
. -
Guarde la siguiente función de código de Python en un archivo local llamado "
secret_test.py
".import greengrasssdk secrets_client = greengrasssdk.client("secretsmanager") iot_client = greengrasssdk.client("iot-data") secret_name = "greengrass-TestSecret" send_topic = "secrets/output" def function_handler(event, context): """ Gets a secret and publishes a message to indicate whether the secret was successfully retrieved. """ response = secrets_client.get_secret_value(SecretId=secret_name) secret_value = response.get("SecretString") message = ( f"Failed to retrieve secret {secret_name}." if secret_value is None else f"Successfully retrieved secret {secret_name}." ) iot_client.publish(topic=send_topic, payload=message) print("Published: " + message)
La función
get_secret_value
admite el nombre o ARN del secreto del Secrets Manager para el valorSecretId
. En este ejemplo se utiliza el nombre del secreto. En este secreto de ejemplo, AWS IoT Greengrass devuelve el par clave-valor:{"test":"abcdefghi"}
.importante
Asegúrese de que las funciones de Lambda definidas por el usuario gestionen los secretos de forma segura y no registren ningún dato confidencial almacenado en el secreto. Para obtener más información, consulte Mitigar los riesgos de registrar y depurar la función de Lambda en la Guía del usuario de AWS Secrets Manager. Si bien esta documentación se refiere específicamente a las funciones de rotación, la recomendación también se aplica a las funciones de Lambda de Greengrass.
-
Comprima en un archivo ZIP los siguientes elementos en un archivo denominado "
secret_test_python.zip
". Al crear el archivo ZIP, incluya únicamente el código y sus dependencias, no la carpeta donde se encuentran.-
secret_test.py. Lógica de la aplicación.
-
greengrasssdk. Biblioteca necesaria para todas las funciones de Lambda de Greengrass de Python.
Este es el paquete de implementación de la función de Lambda.
-
Paso 4: Crear una función de Lambda
En este paso, va a utilizar la consola de AWS Lambda para crear una función de Lambda y va a configurarla para utilizar su paquete de implementación. A continuación, publicará una versión de la característica y creará un alias.
-
Primero, cree la función de Lambda.
-
En la AWS Management Console, elija Servicios y abra la consola de AWS Lambda.
-
Elija Crear función, y, a continuación, elija Autor desde cero.
-
En la sección Basic information (Información básica), utilice los siguientes valores:
-
En Function name (Nombre de la característica), introduzca
SecretTest
. -
En Runtime (Tiempo de ejecución), elija Python 3.7.
-
En Permisos, mantenga la configuración predeterminada. Esto crea un rol de ejecución que otorga permisos Lambda básicos. AWS IoT Greengrass no utiliza este rol.
-
-
En la parte inferior de la página, elija Create function.
-
-
A continuación, registre el controlador y cargue el paquete de implementación de la función de Lambda.
-
En la pestaña Código, en Código fuente, seleccione Cargar desde. En el menú desplegable, seleccione un archivo .zip.
-
Seleccione Cargar y, a continuación, elija su paquete de implementación de
secret_test_python.zip
. A continuación, elija Guardar. -
En la pestaña Código de la función, en Configuración de tiempo de ejecución, elija Editar y, a continuación, introduzca los siguientes valores.
-
En Runtime (Tiempo de ejecución), elija Python 3.7.
-
En Handler (Controlador), escriba
secret_test.function_handler
.
-
-
Seleccione Guardar.
nota
El botón de Prueba de la consola de AWS Lambda no funciona con esta función. El SDK AWS IoT Greengrass Core no contiene los módulos necesarios para ejecutar las funciones de Lambda de Greengrass de forma independiente en la consola AWS Lambda. Estos módulos (por ejemplo,
greengrass_common
) se suministran a las funciones una vez desplegados en el núcleo de Greengrass.
-
-
Ahora, publique la primera versión de su función de Lambda y cree un alias para la versión.
nota
Los grupos de Greengrass pueden hacer referencia a una función de Lambda por versión o alias (recomendado). El uso de un alias facilita la gestión de las actualizaciones del código porque no tiene que cambiar la tabla de suscripción o la definición del grupo cuando se actualiza el código de la función. En su lugar, basta con apuntar el alias a la nueva versión de la función.
-
En la página de configuración de SecretTest: 1, en el menú Actions (Acciones), elija Create alias (Crear alias).
-
En la página Create a new alias, utilice los valores siguientes:
-
En Nombre, escriba
GG_SecretTest
. -
En Version (Versión), elija 1.
nota
AWS IoT Greengrass no admite alias de Lambda para versiones de $LATEST.
-
-
Seleccione Crear.
-
Ahora está preparado para añadir la función de Lambda al grupo de Greengrass y asociar el recurso secreto.
Paso 5: Adición de la función de Lambda al grupo de Greengrass
En este paso, va a añadir la función de Lambda al grupo de Greengrass en la consola de AWS IoT.
-
En la página de configuración del grupo, elija la pestaña Funciones de Lambda.
-
En la sección Mis funciones de Lambda, seleccione Añadir.
-
Para la función de Lambda, elija SecretTest.
-
Para la versión de la función de Lambda, elija el alias de la versión que publicó.
A continuación, configure el ciclo de vida de la función de Lambda.
-
En la sección de Configuración de la función de Lambda, realice las siguientes actualizaciones.
nota
Le recomendamos que ejecute la función de Lambda sin creación de contenedores, a menos que su modelo de negocio lo requiera. Esto permite el acceso a la GPU y la cámara del dispositivo sin necesidad de configurar los recursos del dispositivo. Si ejecuta sin creación de contenedores, también debe conceder acceso raíz a las funciones de Lambda de AWS IoT Greengrass.
-
Para ejecutar sin creación de contenedores:
-
En Usuario y grupo del sistema, elija
Another user ID/group ID
. En ID de usuario del sistema, introduzca0
. Para el ID de grupo del sistema, introduzca0
.Esto permite que la función de Lambda se ejecute como raíz. Para obtener más información sobre cómo ejecutar como raíz, consulte Configuración de la identidad de acceso predeterminada para las funciones de Lambda de un grupo.
sugerencia
También debe actualizar el archivo
config.json
para conceder acceso raíz a la función de Lambda. Para el procedimiento, consulte Ejecución de una función de Lambda como raíz. -
Para la Creación de contenedores de la función de Lambda, elija Sin contenedor.
Para obtener más información sobre la ejecución sin creación de contenedores, consulte Consideraciones a la hora de elegir la creación de contenedores de la función de Lambda..
-
En Tiempo de espera, escriba
10 seconds
. -
En Ancladas, elija Verdadero
Para obtener más información, consulte Configuración del ciclo de vida de las funciones de Lambda de Greengrass.
-
En Parámetro adicional, para Acceso de lectura al directorio /sys, elija Activado.
-
-
Para ejecutarlo en modo contenerizado, en su lugar:
nota
No recomendamos ejecutarlo en modo contenerizado a menos que su modelo de negocio lo requiera.
-
En Usuario y grupo del sistema, seleccione Usar grupo predeterminado.
-
Para la Creación de contenedores de funciones de Lambda, elija Usar grupo por defecto.
-
En Límite de memoria, escriba
1024 MB
. -
En Tiempo de espera, escriba
10 seconds
. -
En Ancladas, elija Verdadero
Para obtener más información, consulte Configuración del ciclo de vida de las funciones de Lambda de Greengrass.
-
En Parámetros adicionales, para Acceso de lectura al directorio /sys, elija Activado.
-
-
-
Elija Añadir función de Lambda.
A continuación, asocie el recurso de secreto con la función.
Paso 6: Asociar el recurso de secreto a la función de Lambda
En este paso, asocie el recurso secreto a la función de Lambda en su grupo de Greengrass. Esto asocia el recurso con la función, que permite a la función obtener el valor del secreto local.
-
En la página de configuración del grupo, elija la pestaña Funciones de Lambda.
-
Seleccione la función SecretTest.
-
En la página de detalles de la función, seleccione Recursos.
-
Vaya a la sección Secretos y seleccione Asociar.
-
Elija MyTestSecret y, a continuación, seleccione Asociar.
Paso 7: Agregar suscripciones al grupo de Greengrass
En este paso, añada las suscripciones que permitan a AWS IoT y la función de Lambda intercambiar mensajes. Una suscripción permite a AWS IoT invocar la función y un permite a la función para enviar datos de salida a AWS IoT.
-
Cree crear una suscripción que permita a AWS IoT publicar mensajes en la función.
En la página de configuración del grupo, elija la pestaña Suscripciones y, a continuación, elija Añadir suscripción.
-
En la página Crear una suscripción, configure el origen y el destino de la siguiente manera:
-
En Tipo de origen, elija Función de Lambda y, a continuación, elija Nube IoT.
-
En Tipo de destino, elija Servicio y, a continuación, SecretTest.
-
En Filtro por temas, introduzca
secrets/input
y, a continuación, seleccione Crear suscripción.
-
-
Añadir una segunda suscripción. Seleccione la pestaña Suscripciones, elija Agregar suscripción y configure el origen y el destino de la siguiente manera:
-
En Tipo de fuente, elija Servicios y, a continuación, SecretTest.
-
En Tipo de destino, elija función de Lambda y, a continuación, elija Nube IoT.
-
En Filtro por temas, introduzca
secrets/output
y, a continuación, seleccione Crear suscripción.
-
Paso 8: Implementar el grupo de Greengrass
Implemente el grupo en el dispositivo del núcleo. Durante la implementación, AWS IoT Greengrass recupera el valor del secreto de Secrets Manager y crea una copia cifrada y local en el núcleo.
Probar la función de Lambda
-
En la página de inicio de la consola de AWS IoT, elija Pruebas.
-
Para Suscribirse al tema, utilice los siguientes valores y, a continuación, seleccione Suscribirse.
Propiedad
Valor
Subscription topic
secrets/output
Visualización de la carga de MQTT
Display payloads as strings
-
Para Publicar en tema, utilice los siguientes valores y, a continuación, seleccione Publicar para invocar la función.
Propiedad
Valor
Tema
secrets/input
Mensaje
Conserve el mensaje predeterminado. La publicación de un mensaje invoca la función de Lambda, pero la función de este tutorial no procesa el cuerpo del mensaje.
Si se ejecuta correctamente, la función publica un mensaje de "Success (Correcto)".