AWS IoT Greengrass Version 1 trat am 30. Juni 2023 in die erweiterte Lebensphase ein. Weitere Informationen finden Sie in der AWS IoT Greengrass V1 Wartungsrichtlinie. Nach diesem Datum AWS IoT Greengrass V1 werden keine Updates mehr veröffentlicht, die Funktionen, Verbesserungen, Bugfixes oder Sicherheitspatches bieten. Geräte, die auf laufen, werden AWS IoT Greengrass V1 nicht gestört und funktionieren weiterhin und stellen eine Verbindung zur Cloud her. Wir empfehlen Ihnen dringend, zu migrieren AWS IoT Greengrass Version 2, da dies wichtige neue Funktionen und Unterstützung für zusätzliche Plattformen bietet.
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Zugriff auf Machine-Learning-Ressourcen über Lambda-Funktionen
Benutzerdefinierte Lambda-Funktionen können auf Machine-Learning-Ressourcen zugreifen, um lokale Inferenzen auf dem AWS IoT Greengrass Core auszuführen. Eine Machine Learning-Ressource besteht aus dem trainierten Modell und anderen Artefakten, die auf das Core-Gerät heruntergeladen werden.
Damit eine Lambda-Funktion auf eine Machine-Learning-Ressource im -Kern zugreifen kann, müssen Sie die Ressource an die Lambda-Funktion anhängen und Zugriffsberechtigungen definieren. Der Containerisierungsmodus der zugehörigen (oder angefügten ) Lambda-Funktion bestimmt, wie Sie dies tun.
Zugriffsberechtigungen für Machine Learning-Ressourcen
Ab AWS IoT Greengrass Core v1.10.0 können Sie einen Ressourcenbesitzer für eine Machine Learning-Ressource definieren. Der Ressourcenbesitzer stellt die Betriebssystemgruppe und die Berechtigungen dar, die AWS IoT Greengrass zum Herunterladen der Ressourcenartefakte verwendet. Wenn ein Ressourcenbesitzer nicht definiert ist, sind die heruntergeladenen Ressourcenartefakte nur für Root zugänglich.
Wenn nicht containerisierte Lambda-Funktionen auf eine Machine-Learning-Ressource zugreifen, müssen Sie einen Ressourcenbesitzer definieren, da es keine Berechtigungskontrolle vom Container gibt. Nicht containerisierte Lambda-Funktionen können Berechtigungen von Ressourcenbesitzern erben und sie für den Zugriff auf die Ressource verwenden.
Wenn nur containerisierte Lambda-Funktionen auf die Ressource zugreifen, empfehlen wir Ihnen, Berechtigungen auf Funktionsebene zu verwenden, anstatt einen Ressourcenbesitzer zu definieren.
Eigenschaften der Ressourcenbesitzer
Ein Ressourcenbesitzer gibt einen Gruppenbesitzer und Gruppenbesitzer-Berechtigungen an.
-
Gruppenbesitzer. Die ID der Gruppe (GID) einer vorhandenen Linux-Betriebssystemgruppe auf dem Core-Gerät. Die Berechtigungen der Gruppe werden dem Lambda-Prozess hinzugefügt. Insbesondere wird die GID den zusätzlichen Gruppen-IDs der Lambda-Funktion hinzugefügt.
Wenn eine Lambda-Funktion in der Greengrass-Gruppe so konfiguriert ist, dass sie als dieselbe Betriebssystemgruppe wie der Ressourcenbesitzer für eine Machine-Learning-Ressource ausgeführt wird, muss die Ressource an die Lambda-Funktion angehängt werden. Andernfalls schlägt die Bereitstellung fehl, da diese Konfiguration implizite Berechtigungen erteilt, die die Lambda-Funktion verwenden kann, um ohne AWS IoT Greengrass Autorisierung auf die Ressource zuzugreifen. Die Bereitstellungsvalidierungsprüfung wird übersprungen, wenn die Lambda-Funktion als Stamm ausgeführt wird (UID=0).
Wir empfehlen, eine Betriebssystemgruppe zu verwenden, die nicht von anderen Ressourcen, Lambda-Funktionen oder Dateien auf dem Greengrass-Kern verwendet wird. Die Verwendung einer freigegebenen Betriebssystemgruppe erteilt angefügten Lambda-Funktionen mehr Zugriffsberechtigungen, als sie benötigen. Wenn Sie eine freigegebene Betriebssystemgruppe verwenden, muss allen Machine-Learning-Ressourcen, die die freigegebene Betriebssystemgruppe verwenden, auch eine angefügte Lambda-Funktion zugeordnet werden. Andernfalls schlägt die Bereitstellung fehl.
-
Gruppenbesitzer-Berechtigungen. Die Lese- oder Lese- und Schreibberechtigung zum Hinzufügen zum Lambda-Prozess.
Nicht containerisierte Lambda-Funktionen müssen diese Zugriffsberechtigungen für die Ressource erben. Containerisierte Lambda-Funktionen können diese Berechtigungen auf Ressourcenebene erben oder Berechtigungen auf Funktionsebene definieren. Wenn sie Berechtigungen auf Funktionsebene definieren, müssen die Berechtigungen dieselben oder restriktiver sein als die Berechtigungen auf Ressourcenebene.
Die folgende Tabelle zeigt unterstützte Zugriffsberechtigungskonfigurationen.
Anmerkung
Wenn Sie die AWS IoT Greengrass-API zum Konfigurieren von Lambda-Funktionen und -Ressourcen verwenden, ist auch die ResourceId
Eigenschaft auf Funktionsebene erforderlich. Die -ResourceId
Eigenschaft fügt die Machine-Learning-Ressource an die Lambda-Funktion an.
Definieren von Zugriffsberechtigungen für Lambda-Funktionen (Konsole)
In der AWS IoT Konsole definieren Sie Zugriffsberechtigungen, wenn Sie eine Machine-Learning-Ressource konfigurieren oder einer Lambda-Funktion anfügen.
- Containerisierte Lambda-Funktionen
-
Wenn nur containerisierte Lambda-Funktionen an die Machine-Learning-Ressource angefügt sind:
-
Wählen Sie Keine Systemgruppe als Ressourcenbesitzer für die Machine-Learning-Ressource aus. Dies ist die empfohlene Einstellung, wenn nur containerisierte Lambda-Funktionen auf die Machine-Learning-Ressource zugreifen. Andernfalls erteilen Sie angefügten Lambda-Funktionen möglicherweise mehr Zugriffsberechtigungen, als sie benötigen.
-
- Nicht containerisierte Lambda-Funktionen (erfordert CCPC v1.10 oder höher)
-
Wenn der Machine-Learning-Ressource nicht containerisierte Lambda-Funktionen zugeordnet sind:
-
Geben Sie die Systemgruppen-ID (GID) an, die als Ressourcenbesitzer für die Machine-Learning-Ressource verwendet werden soll. Wählen Sie Systemgruppe und Berechtigungen angeben und geben Sie die GID ein. Sie können den
getent group
Befehl auf Ihrem Core-Gerät verwenden, um die ID einer Systemgruppe nachzuschlagen. -
Wählen Sie Schreibgeschützter Zugriff oder Lese- und Schreibzugriff für die Systemgruppenberechtigungen aus.
-
Definieren von Zugriffsberechtigungen für Lambda-Funktionen (API)
In der AWS IoT Greengrass API definieren Sie Berechtigungen für Machine-Learning-Ressourcen in der -ResourceAccessPolicy
Eigenschaft für die Lambda-Funktion oder der -OwnerSetting
Eigenschaft für die Ressource.
- Containerisierte Lambda-Funktionen
-
Wenn nur containerisierte Lambda-Funktionen an die Machine-Learning-Ressource angefügt sind:
-
Definieren Sie für containerisierte Lambda-Funktionen Zugriffsberechtigungen in der -
Permission
Eigenschaft der -ResourceAccessPolicies
Eigenschaft. Beispielsweise:"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 } } ] -
Bei Machine Learning-Ressourcen lassen Sie die
OwnerSetting
-Eigenschaft weg. Beispielsweise:"Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/
local-destination-path
", "S3Uri": "s3://uri-to-resource-package
" } } } ]Dies ist die empfohlene Konfiguration, wenn nur containerisierte Lambda-Funktionen auf die Machine-Learning-Ressource zugreifen. Andernfalls erteilen Sie angefügten Lambda-Funktionen möglicherweise mehr Zugriffsberechtigungen, als sie benötigen.
-
- Nicht containerisierte Lambda-Funktionen (erfordert CCPC v1.10 oder höher)
-
Wenn der Machine-Learning-Ressource nicht containerisierte Lambda-Funktionen zugeordnet sind:
-
Lassen Sie für nicht containerisierte Lambda-Funktionen die Eigenschaft
Permission
in wegResourceAccessPolicies
. Diese Konfiguration ist erforderlich und ermöglicht es der Funktion, die Berechtigung auf Ressourcenebene zu erben. Beispielsweise:"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 } } ] -
Für containerisierte Lambda-Funktionen, die auch auf die Machine-Learning-Ressource zugreifen, lassen Sie die -
Permission
Eigenschaft in wegResourceAccessPolicies
oder definieren Sie eine Berechtigung, die dieselbe oder restriktiver ist wie die -Berechtigung auf Ressourcenebene. Beispielsweise:"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 } } ] -
Definieren Sie für Machine Learning-Ressourcen die
OwnerSetting
-Eigenschaft, einschließlich der untergeordnetenGroupOwner
- undGroupPermission
-Eigenschaften. Beispielsweise:"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
" } } } } ]
-
Zugreifen auf Machine-Learning-Ressourcen über Lambda-Funktionscode
Benutzerdefinierte Lambda-Funktionen verwenden plattformspezifische Betriebssystemschnittstellen, um auf Machine-Learning-Ressourcen auf einem Core-Gerät zuzugreifen.
Ihre Modellladeimplementierung hängt von Ihrer ML-Bibliothek ab.
Fehlerbehebung
Verwenden Sie die folgenden Informationen, um Probleme beim Zugriff auf Machine Learning-Ressourcen zu beheben.
Themen
InvalidMLModelOwner GroupOwnerSetting –wird in der ML-Modellressource bereitgestellt, aber GroupOwner oder GroupPermission ist nicht vorhanden
Lösung: Sie erhalten diesen Fehler, wenn eine Machine-Learning-Ressource das -ResourceDownloadOwnerSettingObjekt enthält, aber die erforderliche - GroupOwner
oder -GroupPermission
Eigenschaft nicht definiert ist. Um dieses Problem zu beheben, definieren Sie die fehlende Eigenschaft.
NoContainer Die -Funktion kann die Berechtigung beim Anfügen von Machine Learning-Ressourcen nicht konfigurieren. <function-arn> bezieht sich auf Machine-Learning-Ressource <resource-id> mit Berechtigung <ro/rw> in der Ressourcenzugriffsrichtlinie.
Lösung: Sie erhalten diesen Fehler, wenn eine nicht containerisierte Lambda-Funktion Berechtigungen auf Funktionsebene für eine Machine-Learning-Ressource angibt. Nicht containerisierte Funktionen müssen Berechtigungen von den Ressourcenbesitzer-Berechtigungen erben, die für die Machine Learning-Ressource definiert sind. Um dieses Problem zu beheben, erben Sie die Berechtigungen des Ressourcenbesitzers (Konsole) oder entfernen Sie die Berechtigungen aus der Ressourcenzugriffsrichtlinie (API) der Lambda-Funktion.
Funktion <function-arn> bezieht sich auf die Machine Learning-Ressource <resource-id> mit fehlender Berechtigung sowohl in ResourceAccessPolicy als auch in der Ressource OwnerSetting.
Lösung: Sie erhalten diesen Fehler, wenn Berechtigungen für die Machine-Learning-Ressource nicht für die angehängte Lambda-Funktion oder die Ressource konfiguriert sind. Um dieses Problem zu beheben, konfigurieren Sie Berechtigungen in der -ResourceAccessPolicyEigenschaft für die Lambda-Funktion oder der -OwnerSettingEigenschaft für die -Ressource.
Funktion <function-arn> bezieht sich auf die Machine Learning-Ressource <resource-id> mit der Berechtigung \"rw\", während die Einstellung GroupPermission des Ressourcenbesitzers nur \"ro\" zulässt.
Lösung: Sie erhalten diesen Fehler, wenn die für die angefügte Lambda-Funktion definierten Zugriffsberechtigungen die für die Machine-Learning-Ressource definierten Berechtigungen des Ressourcenbesitzers überschreiten. Um dieses Problem zu beheben, legen Sie restriktivere Berechtigungen für die Lambda-Funktion oder weniger restriktive Berechtigungen für den Ressourcenbesitzer fest.
NoContainer Funktion <function-arn> bezieht sich auf Ressourcen des verschachtelten Zielpfads.
Lösung: Sie erhalten diesen Fehler, wenn mehrere Machine-Learning-Ressourcen, die einer nicht containerisierten Lambda-Funktion zugeordnet sind, denselben Zielpfad oder einen verschachtelten Zielpfad verwenden. Um dieses Problem zu beheben, geben Sie separate Zielpfade für die Ressourcen an.
Lambda <function-arn> erhält Zugriff auf die Ressource <resource-id>, indem dieselbe Gruppenbesitzer-ID freigegeben wird
Lösung: Sie erhalten diesen Fehler in , runtime.log
wenn dieselbe Betriebssystemgruppe als „Als Identität ausführen“ der Lambda-Funktion und als Ressourcenbesitzer für eine Machine-Learning-Ressource angegeben ist, die Ressource jedoch nicht an die Lambda-Funktion angehängt ist. Diese Konfiguration erteilt der Lambda-Funktion implizite Berechtigungen, mit denen sie ohne AWS IoT Greengrass Autorisierung auf die Ressource zugreifen kann.
Um dieses Problem zu beheben, verwenden Sie eine andere Betriebssystemgruppe für eine der Eigenschaften oder fügen Sie die Machine-Learning-Ressource an die Lambda-Funktion an.