AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Accédez aux ressources d'apprentissage automatique à partir des fonctions Lambda
Les fonctions Lambda définies par l'utilisateur peuvent accéder aux ressources d'apprentissage automatique pour exécuter une inférence locale sur le cœur. AWS IoT Greengrass Une ressource de Machine Learning se compose du modèle formé et d'autres artefacts qui sont téléchargés sur l'appareil principal (noyau).
Pour permettre à une fonction Lambda d'accéder à une ressource d'apprentissage automatique sur le cœur, vous devez associer la ressource à la fonction Lambda et définir des autorisations d'accès. Le mode de conteneurisation de la fonction Lambda affiliée (ou attachée) détermine la manière dont vous procédez.
Autorisations d'accès pour les ressources de machine learning
À compter de la version 1.10.0 d'AWS IoT Greengrass Core, vous pouvez définir un propriétaire de ressource pour une ressource de Machine Learning. Le propriétaire de la ressource représente le groupe de système d'exploitation et les autorisations utilisés par AWS IoT Greengrass pour télécharger les artefacts de ressource. Si aucun propriétaire de ressource n'est défini, les artefacts de ressource téléchargés ne sont accessibles que pour l’utilisateur racine (root).
Si des fonctions Lambda non conteneurisées accèdent à une ressource d'apprentissage automatique, vous devez définir un propriétaire de ressource car le conteneur ne permet aucun contrôle d'autorisation. Les fonctions Lambda non conteneurisées peuvent hériter des autorisations du propriétaire de la ressource et les utiliser pour accéder à la ressource.
Si seules les fonctions Lambda conteneurisées accèdent à la ressource, nous vous recommandons d'utiliser des autorisations au niveau des fonctions au lieu de définir un propriétaire de ressource.
Propriétés du propriétaire de la ressource
Un propriétaire de ressource spécifie un propriétaire de groupe et des autorisations de propriétaire de groupe.
-
Propriétaire du groupe. ID (GID) d'un groupe d'OS Linux existant sur l'appareil principal (noyau). Les autorisations du groupe sont ajoutées au processus Lambda. Plus précisément, le GID est ajouté aux identifiants de groupe supplémentaires de la fonction Lambda.
Si une fonction Lambda du groupe Greengrass est configurée pour s'exécuter dans le même groupe de système d'exploitation que le propriétaire de la ressource d'une ressource d'apprentissage automatique, la ressource doit être attachée à la fonction Lambda. Dans le cas contraire, le déploiement échoue car cette configuration donne des autorisations implicites que la fonction Lambda peut utiliser pour accéder à la ressource sans AWS IoT Greengrass autorisation. La vérification de validation du déploiement est ignorée si la fonction Lambda s'exécute en tant que root (UID=0).
Nous vous recommandons d'utiliser un groupe de systèmes d'exploitation qui n'est pas utilisé par d'autres ressources, fonctions Lambda ou fichiers du noyau de Greengrass. L'utilisation d'un groupe de systèmes d'exploitation partagé donne aux fonctions Lambda associées des autorisations d'accès supérieures à celles dont elles ont besoin. Si vous utilisez un groupe de systèmes d'exploitation partagé, une fonction Lambda associée doit également être attachée à toutes les ressources d'apprentissage automatique qui utilisent le groupe de systèmes d'exploitation partagé. Sinon, le déploiement échoue.
-
Autorisations du propriétaire du groupe. L'autorisation de lecture seule ou de lecture et d'écriture à ajouter au processus Lambda.
Les fonctions Lambda non conteneurisées doivent hériter de ces autorisations d'accès à la ressource. Les fonctions Lambda conteneurisées peuvent hériter de ces autorisations au niveau des ressources ou définir des autorisations au niveau des fonctions. Si elles définissent des autorisations de niveau fonction, ces autorisations doivent être identiques ou plus restrictives que les autorisations de niveau ressource.
Le tableau suivant présente les configurations d'autorisation d'accès prises en charge.
Note
Lorsque vous utilisez l'AWS IoT GreengrassAPI pour configurer des fonctions et des ressources Lambda, la ResourceId
propriété au niveau de la fonction est également requise. La ResourceId
propriété associe la ressource d'apprentissage automatique à la fonction Lambda.
Définition des autorisations d'accès pour les fonctions Lambda (console)
Dans la AWS IoT console, vous définissez les autorisations d'accès lorsque vous configurez une ressource de machine learning ou que vous en associez une à une fonction Lambda.
- Fonctions Lambda conteneurisées
-
Si seules des fonctions Lambda conteneurisées sont associées à la ressource d'apprentissage automatique :
-
Choisissez Aucun groupe système comme propriétaire de la ressource d'apprentissage automatique. Il s'agit du paramètre recommandé lorsque seules les fonctions Lambda conteneurisées accèdent à la ressource d'apprentissage automatique. Dans le cas contraire, vous pourriez accorder aux fonctions Lambda associées des autorisations d'accès supérieures à celles dont elles ont besoin.
-
- Fonctions Lambda non conteneurisées (nécessite GGC v1.10 ou version ultérieure)
-
Si des fonctions Lambda non conteneurisées sont associées à la ressource d'apprentissage automatique :
-
Spécifiez l'ID de groupe système (GID) à utiliser en tant que propriétaire de la ressource d'apprentissage automatique. Choisissez Spécifier le groupe système et les autorisations, puis entrez le GID. Vous pouvez utiliser la
getent group
commande sur votre appareil principal pour rechercher l'ID d'un groupe de systèmes. -
Choisissez Accès en lecture seule ou Accès en lecture et écriture pour les autorisations du groupe système.
-
Définition des autorisations d'accès pour les fonctions Lambda (API)
Dans l'AWS IoT GreengrassAPI, vous définissez les autorisations d'accès aux ressources de machine learning dans la ResourceAccessPolicy
propriété de la fonction Lambda ou dans la OwnerSetting
propriété de la ressource.
- Fonctions Lambda conteneurisées
-
Si seules des fonctions Lambda conteneurisées sont associées à la ressource d'apprentissage automatique :
-
Pour les fonctions Lambda conteneurisées, définissez les autorisations d'accès dans la
Permission
propriété de la propriété.ResourceAccessPolicies
Par exemple :"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 } } ] -
Pour les ressources de Machine Learning, omettez la propriété
OwnerSetting
. Par exemple :"Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/
local-destination-path
", "S3Uri": "s3://uri-to-resource-package
" } } } ]Il s'agit de la configuration recommandée lorsque seules les fonctions Lambda conteneurisées accèdent à la ressource d'apprentissage automatique. Dans le cas contraire, vous pourriez accorder aux fonctions Lambda associées des autorisations d'accès supérieures à celles dont elles ont besoin.
-
- Fonctions Lambda non conteneurisées (nécessite GGC v1.10 ou version ultérieure)
-
Si des fonctions Lambda non conteneurisées sont associées à la ressource d'apprentissage automatique :
-
Pour les fonctions Lambda non conteneurisées, omettez la propriété dans.
Permission
ResourceAccessPolicies
Cette configuration est requise et permet à la fonction d'hériter de l'autorisation de niveau ressource. Par exemple :"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 } } ] -
Pour les fonctions Lambda conteneurisées qui accèdent également à la ressource d'apprentissage automatique, omettez la
Permission
propriétéResourceAccessPolicies
ou définissez une autorisation identique ou plus restrictive que l'autorisation au niveau de la ressource. Par exemple :"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 } } ] -
Pour les ressources de Machine Learning, définissez la propriété
OwnerSetting
, ainsi que les propriétés enfantsGroupOwner
etGroupPermission
. Par exemple :"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
" } } } } ]
-
Accès aux ressources d'apprentissage automatique à partir du code de fonction Lambda
Les fonctions Lambda définies par l'utilisateur utilisent des interfaces de système d'exploitation spécifiques à la plate-forme pour accéder aux ressources d'apprentissage automatique sur un périphérique principal.
Votre implémentation du chargement du modèle dépend de votre bibliothèque de Machine Learning.
Résolution des problèmes
Utilisez les informations suivantes pour résoudre les problèmes liés à l'accès aux ressources de Machine Learning.
Rubriques
- InvalidML ModelOwner - GroupOwnerSetting est fourni dans la ressource du modèle ML, mais n' GroupOwner GroupPermission est pas présent
- NoContainer La fonction ne peut pas configurer les autorisations lors de l'attachement de ressources Machine Learning. <function-arn>fait référence à une ressource d'apprentissage automatique <resource-id>avec autorisation <ro/rw> dans la politique d'accès aux ressources.
- <function-arn>La fonction fait référence à une ressource Machine Learning dont l'<resource-id>autorisation est manquante à la fois dans la ressource ResourceAccessPolicy et dans la ressource OwnerSetting.
- <function-arn>La fonction fait référence à la ressource Machine Learning <resource-id>avec l'autorisation \ "rw \ », tandis que le paramètre du propriétaire de la ressource autorise GroupPermission uniquement \ "ro \ ».
- NoContainer La fonction <function-arn>fait référence aux ressources du chemin de destination imbriqué.
- La fonction Lambda <function-arn> accède à la ressource <resource-id> en partageant le même identifiant de propriétaire de groupe
InvalidML ModelOwner - GroupOwnerSetting est fourni dans la ressource du modèle ML, mais n' GroupOwner GroupPermission est pas présent
Solution : vous recevez cette erreur si une ressource d'apprentissage automatique contient l'ResourceDownloadOwnerSettingobjet mais que la GroupPermission
propriété GroupOwner
ou la propriété requise n'est pas définie. Pour résoudre ce problème, définissez la propriété manquante.
NoContainer La fonction ne peut pas configurer les autorisations lors de l'attachement de ressources Machine Learning. <function-arn>fait référence à une ressource d'apprentissage automatique <resource-id>avec autorisation <ro/rw> dans la politique d'accès aux ressources.
Solution : vous recevez cette erreur si une fonction Lambda non conteneurisée spécifie des autorisations au niveau de la fonction pour une ressource de machine learning. Les fonctions non conteneurisées doivent hériter des autorisations du propriétaire de la ressource définies sur la ressource de Machine Learning. Pour résoudre ce problème, choisissez d'hériter des autorisations du propriétaire des ressources (console) ou de supprimer les autorisations de la politique d'accès aux ressources (API) de la fonction Lambda.
<function-arn>La fonction fait référence à une ressource Machine Learning dont l'<resource-id>autorisation est manquante à la fois dans la ressource ResourceAccessPolicy et dans la ressource OwnerSetting.
Solution : vous recevez cette erreur si les autorisations d'accès à la ressource d'apprentissage automatique ne sont pas configurées pour la fonction Lambda attachée ou pour la ressource. Pour résoudre ce problème, configurez les autorisations dans la ResourceAccessPolicypropriété de la fonction Lambda ou dans la OwnerSettingpropriété de la ressource.
<function-arn>La fonction fait référence à la ressource Machine Learning <resource-id>avec l'autorisation \ "rw \ », tandis que le paramètre du propriétaire de la ressource autorise GroupPermission uniquement \ "ro \ ».
Solution : vous recevez cette erreur si les autorisations d'accès définies pour la fonction Lambda associée dépassent les autorisations du propriétaire de la ressource définies pour la ressource d'apprentissage automatique. Pour résoudre ce problème, définissez des autorisations plus restrictives pour la fonction Lambda ou des autorisations moins restrictives pour le propriétaire de la ressource.
NoContainer La fonction <function-arn>fait référence aux ressources du chemin de destination imbriqué.
Solution : vous recevez cette erreur si plusieurs ressources de machine learning associées à une fonction Lambda non conteneurisée utilisent le même chemin de destination ou un chemin de destination imbriqué. Pour résoudre ce problème, spécifiez des chemins de destination distincts pour les ressources.
La fonction Lambda <function-arn> accède à la ressource <resource-id> en partageant le même identifiant de propriétaire de groupe
Solution : vous recevez cette erreur runtime.log
si le même groupe de système d'exploitation est spécifié comme identité Run as de la fonction Lambda et propriétaire de la ressource pour une ressource d'apprentissage automatique, mais que la ressource n'est pas attachée à la fonction Lambda. Cette configuration donne à la fonction Lambda des autorisations implicites qu'elle peut utiliser pour accéder à la ressource sans AWS IoT Greengrass autorisation.
Pour résoudre ce problème, utilisez un autre groupe de systèmes d'exploitation pour l'une des propriétés ou associez la ressource d'apprentissage automatique à la fonction Lambda.