Acceso a recursos de machine learning desde funciones - AWS IoT Greengrass

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.

Acceso a recursos de machine learning desde funciones

Las funciones de Lambda definidas por el usuario pueden acceder a los recursos de machine learning para ejecutar inferencia local en el núcleo de AWS IoT Greengrass.. Un recurso de aprendizaje automático consiste en el modelo entrenado y otros artefactos que se descargan en el dispositivo principal.

Para permitir que una función de Lambda tenga acceso a un recurso de machine learning en el núcleo, debe adjuntar el recurso a la función de Lambda y definir los permisos de acceso. El modo de creación de contenedores de la función de Lambda asociada (o adjunta) determina cómo hacerlo.

Permisos de acceso para recursos de aprendizaje automático

A partir de AWS IoT Greengrass Core v1.10.0, puede definir un propietario de recurso para un recurso de aprendizaje automático. El propietario del recurso representa el grupo del sistema operativo y los permisos que AWS IoT Greengrass utiliza para descargar los artefactos de recursos. Si no se define el propietario de un recurso, los artefactos de recursos descargados sólo son accesibles para raíz.

  • Si las funciones de Lambda que no están en un contenedor acceden a un recurso de machine learning, debe definir un propietario de recurso porque no hay control de permisos desde el contenedor. Las funciones de Lambda que no están en un contenedor pueden heredar permisos de propietario de recursos y utilizarlos para acceder al recurso.

     

  • Si solo las funciones de Lambda en contenedor acceden al recurso, se recomienda utilizar permisos de nivel de función en lugar de definir un propietario de recurso.

     

Propiedades del propietario del recurso

Un propietario de recurso especifica un propietario de grupo y permisos de propietario de grupo.

Propietario del grupo. El ID del grupo (GID) de un grupo de SO Linux existente en el dispositivo principal. Los permisos del grupo se agregan al proceso de Lambda. Específicamente, el GID se agrega a los identificadores de grupo suplementarios de la función de Lambda.

Si una función de Lambda del grupo Greengrass está configurada para ejecutarse como el mismo grupo de SO que el propietario del recurso para un recurso de machine learning, el recurso debe estar asociado a la función de Lambda. De lo contrario, la implementación falla porque esta configuración proporciona permisos implícitos que la función de Lambda puede utilizar para acceder al recurso sin autorización AWS IoT Greengrass. La comprobación de validación de implementación se omite si la función de Lambda se ejecuta como raíz (UID=0).

Le recomendamos que utilice un grupo de SO que no sea utilizado por otros recursos, funciones de Lambda o archivos en el núcleo de Greengrass. El uso de un grupo de SO compartido proporciona a las funciones de Lambda asociadas más permisos de acceso de los que necesitan. Si utiliza un grupo de SO compartido, también debe adjuntarse una función de Lambda a todos los recursos de machine learning que utilizan el grupo de SO compartido. De lo contrario, se produce un error en la implementación.

Permisos de propietario del grupo. El permiso de sólo lectura o lectura y escritura que se agregará al proceso de Lambda.

Las funciones de Lambda que no están en un contenedor deben heredar estos permisos de acceso al recurso. Las funciones de Lambda en contenedor pueden heredar estos permisos de nivel de recursos o definir permisos de nivel de función. Si definen permisos de nivel de función, los permisos deben ser igual o más restrictivos que los permisos de nivel de recursos.

En la tabla siguiente se muestran las configuraciones de permisos de acceso admitidas.

GGC v1.10 or later
Propiedad Si solo las funciones de Lambda en contenedor acceden al recurso Si alguna función de Lambda que no está en un contenedor accede al recurso
Propiedades de nivel de función

Permisos (lectura/escritura)

Necesario a menos que el recurso defina un propietario de recurso. Si se define un propietario de recurso, los permisos de nivel de función deben ser igual o más restrictivos que los permisos de propietario de recurso.

Si solo las funciones de Lambda en contenedor acceden al recurso, se recomienda que no defina un propietario de recurso.

Funciones de Lambda que no están en un contenedor:

No admitido. Las funciones de Lambda que no están en un contenedor deben heredar permisos de nivel de recursos.

Funciones de Lambda en contenedores:

Opcional, pero debe ser igual o más restrictivo que los permisos de nivel de recursos.

Propiedades de nivel de recursos

Propietario del recurso

Opcional (no recomendado).

Obligatorio.

Permisos (lectura/escritura)

Opcional (no recomendado).

Obligatorio.

GGC v1.9 or earlier
Propiedad Si solo las funciones de Lambda en contenedor acceden al recurso Si alguna función de Lambda que no está en un contenedor accede al recurso
Propiedades de nivel de función

Permisos (lectura/escritura)

Obligatorio.

No admitido.

Propiedades de nivel de recursos

Propietario del recurso

No admitido.

No admitido.

Permisos (lectura/escritura)

No admitido.

No admitido.

nota

Cuando se utiliza la API AWS IoT Greengrass para configurar funciones y recursos de Lambda, también se requiere la propiedad ResourceId de nivel de función. La propiedad ResourceId adjunta el recurso de machine learning a la función de Lambda.

Definición de permisos de acceso para funciones de Lambda (consola)

En la consola de AWS IoT, se definen los permisos de acceso al configurar un recurso de machine learning o adjuntar uno a una función de Lambda.

Funciones de Lambda en contenedores

Si solo se adjuntan funciones de Lambda en contenedor al recurso de machine learning.

  • Elija Ningún grupo de sistemas como propietario del recurso para el recurso de machine learning. Esta es la configuración recomendada cuando solo las funciones de Lambda en contenedor acceden al recurso de machine learning De lo contrario, podría conceder a las funciones Lambda adjuntas más permisos de acceso de los que necesitan.

     

 

Funciones de Lambda
no organizadas en contenedores
(requiere GGC v 1.10 o posterior)

Si se adjunta alguna función de Lambda que no está en un contenedor al recurso de machine learning:

  • Especifique el ID de grupo del sistema (GID) que se va a utilizar como propietario del recurso para el recurso de machine learning. Elija Especificar grupo de sistemas y permisos e introduzca el GID. Puede utilizar el comando getent group en el dispositivo principal para buscar el ID de un grupo de sistemas..

     

  • Elija Acceso de sólo lectura o Acceso de lectura y escritura para los permisos del grupo de sistemas.

Definición de permisos de acceso para funciones de Lambda (API)

En la API AWS IoT Greengrass, se definen permisos para los recursos de machine learning en la propiedad ResourceAccessPolicy de la función de Lambda o la propiedad OwnerSetting del recurso.

Funciones de Lambda en contenedores

Si solo se adjuntan funciones de Lambda en contenedor al recurso de machine learning.

  • Para las funciones de Lambda en contenedores, defina los permisos de acceso en la propiedad Permission de la propiedad ResourceAccessPolicies. Por ejemplo:

    "Functions": [ { "Id": "my-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id", "Permission": "ro-or-rw" } ] }, "MemorySize": 512, "Pinned": true, "Timeout": 5 } } ]
  • Para los recursos de aprendizaje automático, omita la propiedad OwnerSetting. Por ejemplo:

    "Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/local-destination-path", "S3Uri": "s3://uri-to-resource-package" } } } ]

    Esta es la configuración recomendada cuando solo las funciones de Lambda en contenedores acceden al recurso de machine learning. De lo contrario, podría conceder a las funciones Lambda adjuntas más permisos de acceso de los que necesitan.

 

Funciones de Lambda
no organizadas en contenedores
(requiere GGC v 1.10 o posterior)

Si se adjunta alguna función de Lambda que no está en un contenedor al recurso de machine learning:

  • Para funciones de función de Lambda que no están en un contenedor, omita la propiedad Permission en ResourceAccessPolicies. Esta configuración es necesaria y permite que la función herede el permiso de nivel de recursos. Por ejemplo:

    "Functions": [ { "Id": "my-non-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "Execution": { "IsolationMode": "NoContainer", }, "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id" } ] }, "Pinned": true, "Timeout": 5 } } ]
  • Para las funciones de Lambda en contenedores que también tienen acceso al recurso de machine learning, omita la propiedad Permission en ResourceAccessPolicies o defina un permiso que sea igual o más restrictivo que el permiso de nivel de recursos. Por ejemplo:

    "Functions": [ { "Id": "my-containerized-function", "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", "FunctionConfiguration": { "Environment": { "ResourceAccessPolicies": [ { "ResourceId": "my-resource-id", "Permission": "ro-or-rw" // Optional, but cannot exceed the GroupPermission defined for the resource. } ] }, "MemorySize": 512, "Pinned": true, "Timeout": 5 } } ]
  • Para los recursos de aprendizaje automático, defina la propiedad OwnerSetting, incluidas las propiedades secundarias GroupOwner y GroupPermission. Por ejemplo:

    "Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/local-destination-path", "S3Uri": "s3://uri-to-resource-package", "OwnerSetting": { "GroupOwner": "os-group-id", "GroupPermission": "ro-or-rw" } } } } ]

Acceso a recursos de machine learning desde el código de la función de Lambda

Las funciones de Lambda definidas por el usuario utilizan interfaces de SO específicas de la plataforma para acceder a recursos de machine learning en un dispositivo principal.

GGC v1.10 or later

Para las funciones de Lambda en contenedor, el recurso se monta dentro del contenedor Greengrass y está disponible en la ruta de destino local definida para el recurso. Para las funciones de Lambda que no están en un contenedor, el recurso se vincula a un directorio de trabajo específico de Lambda y se pasa a la variable de entorno AWS_GG_RESOURCE_PREFIX en el proceso de Lambda.

Para obtener la ruta de acceso a los artefactos descargados de un recurso de machine learning, las funciones de Lambda anexan la variable de entorno AWS_GG_RESOURCE_PREFIX a la ruta de destino local definida para el recurso. Para las funciones de Lambda en contenedor, el valor devuelto es una sola barra diagonal (/).

resourcePath = os.getenv("AWS_GG_RESOURCE_PREFIX") + "/destination-path" with open(resourcePath, 'r') as f: # load_model(f)
GGC v1.9 or earlier

Los artefactos descargados de un recurso de aprendizaje automático se encuentran en la ruta de destino local definida para el recurso. Solo las funciones Lambda en contenedores pueden acceder a los recursos de machine learning en AWS IoT Greengrass Core versión 1.9 y versiones anteriores.

resourcePath = "/local-destination-path" with open(resourcePath, 'r') as f: # load_model(f)

Su implementación de carga del modelo depende de su biblioteca ML.

Solución de problemas

Utilice la siguiente información para solucionar problemas relacionados con el acceso a recursos de aprendizaje automático.

invalidMLModelOwner : GroupOwnerSetting se proporciona en el recurso del modelo ML, pero GroupOwner o no GroupPermission está presente

Solución: recibe este error si un recurso de aprendizaje automático contiene el ResourceDownloadOwnerSettingobjeto pero la GroupPermission propiedad requerida GroupOwner o no está definida. Para resolver este problema, defina la propiedad que falta.

 

NoContainer la función no puede configurar el permiso al adjuntar recursos de Machine Learning. <function-arn>hace referencia a un recurso de aprendizaje automático <resource-id>con permiso <ro/rw> en la política de acceso a los recursos.

Solución: recibirá este error si una función de Lambda que no está en un contenedor especifica permisos de nivel de característica para un recurso de machine learning. Las funciones que no están en un contenedor deben heredar permisos de los permisos de propietario de recursos definidos en el recurso de machine learning. Para resolver este problema, elija heredar permisos de propietario de recursos (consola) o quitar los permisos de la política de acceso a recursos (API) de la función de Lambda.

 

<function-arn>La función se refiere a un recurso de Machine Learning al que <resource-id>le falta permiso tanto en uno como ResourceAccessPolicy en el recurso OwnerSetting.

Solución: recibirá este error si los permisos para el recurso de machine learning no están configurados para la función de Lambda adjunta o el recurso. Para resolver este problema, configure los permisos en la ResourceAccessPolicypropiedad de la función Lambda o en la OwnerSettingpropiedad del recurso.

 

<function-arn>La función hace referencia al recurso Machine Learning <resource-id>con el permiso\ "rw\», mientras que la configuración del propietario del recurso GroupPermission solo permite\ "ro\».

Solución: recibirá este error si los permisos de acceso definidos para la función de Lambda adjunta superan los permisos de propietario de recursos definidos para el recurso de machine learning. Para resolver este problema, establezca permisos más restrictivos para la función de Lambda o permisos menos restrictivos para el propietario del recurso.

 

NoContainer La función <function-arn>hace referencia a los recursos de la ruta de destino anidada.

Solución: recibirá este error si varios recursos de machine learning conectados a una función de Lambda no contenedora utilizan la misma ruta de destino o una ruta de destino anidada. Para resolver este problema, especifique rutas de destino separadas para los recursos.

 

Lambda <function-arn> obtiene acceso al recurso <resource-id> al compartir el mismo ID de propietario del grupo

Solución: recibirá este error runtime.log si se especifica el mismo grupo de sistemas operativos como la identidad Ejecutar como de la función de Lambda y el propietario del recurso de machine learning, pero el recurso no está adjunto a la función de Lambda. Esta configuración da a la función de Lambda permisos implícitos que puede utilizar para acceder al recurso sin autorización de AWS IoT Greengrass.

Para resolver este problema, utilice un grupo de SO diferente para una de las propiedades o adjunte el recurso de machine learning a la función de Lambda.

Véase también