

Aviso de fin de soporte: el 7 de octubre de 2026, AWS suspenderemos el soporte para AWS IoT Greengrass Version 1. Después del 7 de octubre de 2026, ya no podrá acceder a los AWS IoT Greengrass V1 recursos. Para obtener más información, visita [Migrar desde AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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 de Lamba
<a name="access-ml-resources"></a>

Las funciones Lambda definidas por el usuario pueden acceder a los recursos de aprendizaje automático para ejecutar inferencias locales en el núcleo. 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](lambda-group-config.md#lambda-function-containerization) de la función de Lambda asociada (o *adjunta*) determina cómo hacerlo.

## Permisos de acceso para recursos de aprendizaje automático
<a name="ml-resource-permissions"></a>

A partir de la AWS IoT Greengrass versión 1.10.0 de Core, puede definir el propietario de un recurso para un recurso de aprendizaje automático. El propietario del recurso representa el grupo de sistemas operativos y los permisos que se AWS IoT Greengrass utilizan 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
<a name="ml-resource-owner"></a>

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. En concreto, el GID se añade al grupo suplementario de IDs la función Lambda.  
Si una función de Lambda del grupo Greengrass está configurada para [ejecutarse como](lambda-group-config.md#lambda-access-identity) 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 fallará porque esta configuración otorga permisos implícitos que la función Lambda puede usar para acceder al recurso AWS IoT Greengrass sin autorización. 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 AWS IoT Greengrass API para configurar funciones y recursos de Lambda, también se requiere la `ResourceId` propiedad 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)
<a name="ml-resource-permissions-console"></a>

En la AWS IoT consola, los permisos de acceso se definen al configurar un recurso de aprendizaje automático o al 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 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:  
+ 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 solo 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)
<a name="ml-resource-permissions-api"></a>

En la AWS IoT Greengrass API, se definen los permisos para los recursos de aprendizaje automático en la `ResourceAccessPolicy` propiedad de la función Lambda o en la `OwnerSetting` propiedad 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 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
<a name="access-resource-function-code"></a>

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 de 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 de `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.

## Resolución de problemas
<a name="access-ml-resources-troubleshooting"></a>

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

**Topics**
+ [MLModelPropietario no válido: GroupOwnerSetting se proporciona en el recurso del modelo ML, pero GroupOwner o no GroupPermission está presente](#nocontainer-lambda-invalid-ml-model-owner)
+ [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.](#nocontainer-lambda-invalid-resource-access-policy)
+ [<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.](#nocontainer-lambda-missing-access-permission)
+ [<function-arn>La función hace referencia al recurso Machine Learning <resource-id>con el permiso\$1 "rw\$1», mientras que la configuración del propietario del recurso GroupPermission solo permite\$1 "ro\$1».](#container-lambda-invalid-rw-permissions)
+ [NoContainer La función <function-arn>hace referencia a los recursos de la ruta de destino anidada.](#nocontainer-lambda-nested-destination-path)
+ [Lambda <function-arn> obtiene acceso al recurso <resource-id> al compartir el mismo ID de propietario del grupo](#lambda-runas-and-resource-owner)

### MLModelPropietario no válido: GroupOwnerSetting se proporciona en el recurso del modelo ML, pero GroupOwner o no GroupPermission está presente
<a name="nocontainer-lambda-invalid-ml-model-owner"></a>

**Solución:** recibe este error si un recurso de aprendizaje automático contiene el [ResourceDownloadOwnerSetting](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-resourcedownloadownersetting.html)objeto 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.
<a name="nocontainer-lambda-invalid-resource-access-policy"></a>

**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](#non-container-config-console) (consola) o [quitar los permisos de la política de acceso a recursos (API) de la función de Lambda](#non-container-config-api).

 

### <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.
<a name="nocontainer-lambda-missing-access-permission"></a>

**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 [ResourceAccessPolicy](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-resourceaccesspolicy.html)propiedad de la función Lambda o en la [OwnerSetting](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-ownersetting.html)propiedad del recurso.

 

### <function-arn>La función hace referencia al recurso Machine Learning <resource-id>con el permiso\$1 "rw\$1», mientras que la configuración del propietario del recurso GroupPermission solo permite\$1 "ro\$1».
<a name="container-lambda-invalid-rw-permissions"></a>

**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.
<a name="nocontainer-lambda-nested-destination-path"></a>

**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
<a name="lambda-runas-and-resource-owner"></a>

**Solución:** recibirá este error `runtime.log` si se especifica el mismo grupo de sistemas operativos como la identidad [Ejecutar como](lambda-group-config.md#lambda-access-identity) de la función de Lambda y el [propietario del recurso](#ml-resource-owner) de machine learning, pero el recurso no está adjunto a la función de Lambda. Esta configuración otorga a la función Lambda permisos implícitos que puede usar para acceder al recurso sin autorización. 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
<a name="access-ml-resources-see-also"></a>
+ [Cómo realizar la inferencia de machine learning](ml-inference.md)
+ [Cómo configurar la inferencia de aprendizaje automático mediante el Consola de administración de AWS](ml-console.md)
+ [Cómo configurar la inferencia de aprendizaje automático optimizada mediante Consola de administración de AWS](ml-dlc-console.md)
+ [AWS IoT Greengrass Version 1 Referencia de la API](https://docs.aws.amazon.com/greengrass/v1/apireference/api-doc.html)