O AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, o AWS IoT Greengrass V1 não lançará atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam com o AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adicionará novos recursos significativos e suporte para plataformas adicionais.
Acesse os recursos de machine learning das funções do Lambda
As funções do Lambda definidas pelo usuário podem acessar recursos de machine learning para executar inferência local no núcleo AWS IoT Greengrass. Um recurso de machine learning consiste no modelo treinado e outros artefatos que são obtidos por download para o dispositivo de núcleo.
Para permitir que uma função do Lambda acesse um recurso de machine learning no núcleo, você deve anexar o recurso à função do Lambda e definir permissões de acesso. O modo de conteinerização da função do Lambda afiliada (ou anexada) determina como você faz isso.
Acessar as permissões para recursos de machine learning
A partir do AWS IoT Greengrass Core v1.10.0, você pode definir um proprietário de recurso para um recurso de machine learning. O proprietário do recurso representa o grupo de SO e as permissões que o AWS IoT Greengrass usa para fazer download dos artefatos de recurso. Se um proprietário do recurso não estiver definido, os artefatos de recurso obtidos por download estarão acessíveis somente na raiz.
Se as funções não conteinerizadas do Lambda acessarem um recurso de machine learning, você deve definir um proprietário do recurso, pois não há controle de permissão a partir do contêiner. As funções não conteinerizadas do Lambda podem herdar permissões de proprietário do recurso e usá-las para acessar o recurso.
Se apenas funções conteinerizadas do Lambda acessarem o recurso, recomendamos que você use permissões no nível da função em vez de definir um proprietário do recurso.
Propriedades do proprietário do recurso
Um proprietário do recurso especifica um proprietário do grupo e permissões de proprietário do grupo.
-
Proprietário do grupo. O ID do grupo (GID) de um grupo de SO Linux existente no dispositivo de núcleo. As permissões do grupo são adicionadas ao processo do Lambda. Especificamente, o GID é adicionado aos IDs suplementares de grupo da função do Lambda.
Se uma função do Lambda no grupo Greengrass estiver configurada para ser executada como o mesmo grupo de SO que o proprietário do recurso de um recurso de machine learning, o recurso deverá ser anexado à função do Lambda. Caso contrário, haverá falha na implantação, pois essa configuração concede permissões implícitas que a função do Lambda pode usar para acessar o recurso sem autorização do AWS IoT Greengrass. A verificação de validação da implantação será ignorada se a função do Lambda for executada como raiz (UID=0).
Recomendamos que você use um grupo de SO que não seja usado por outros recursos, funções do Lambda ou arquivos no núcleo do Greengrass. O uso de um grupo de SO compartilhado concede mais permissões de acesso às funções anexadas do Lambda do que elas precisam. Se você usar um grupo de SO compartilhado, uma função do Lambda anexada também deverá ser anexada a todos os recursos de machine learning que usam o grupo de SO compartilhado. Caso contrário, haverá falha na implantação.
-
Permissões de proprietário do grupo. A permissão somente leitura ou leitura e gravação a ser adicionada ao processo do Lambda.
As funções não conteinerizadas do Lambda devem herdar essas permissões de acesso ao recurso. As funções conteinerizadas do Lambda podem herdar essas permissões no nível do recurso ou definir permissões no nível da função. Se elas definirem permissões no nível da função, as permissões deverão ser as mesmas ou mais restritivas do que as permissões no nível do recurso.
A tabela a seguir mostra as configurações de permissão de acesso compatíveis.
nota
Quando você usa a API do AWS IoT Greengrass para configurar funções e recursos do Lambda, a propriedade ResourceId
no nível da função também é necessária. A propriedade ResourceId
anexa o recurso de machine learning à função do Lambda.
Definição das permissões de acesso às funções do Lambda (console)
No console AWS IoT, você define as permissões de acesso ao configurar um recurso de machine learning ou anexar um a uma função do Lambda.
- Funções conteinerizadas do Lambda
-
Se apenas funções conteinerizadas do Lambda estiverem anexadas ao recurso de machine learning:
-
Selecione Nenhum grupo de sistema como proprietário do recurso para o recurso de machine learning. Essa é a configuração recomendada quando apenas funções conteinerizadas do Lambda acessam o recurso de machine learning. Caso contrário, você pode conceder mais permissões de acesso às funções anexadas do Lambda do que elas precisam.
-
- Funções não conteinerizadas do Lambda (requer a v1.10 ou posterior do GGC)
-
Se alguma função não conteinerizada do Lambda estiver anexada ao recurso de machine learning:
-
Especifique o ID do grupo do sistema (GID) a ser usado como proprietário do recurso para o recurso de machine learning. Selecione Specify system group and permissions (Especificar grupo do sistema e permissões) e insira o GID. Você pode usar o comando
getent group
no dispositivo de núcleo para pesquisar o ID de um grupo de sistemas. -
Selecione Acesso somente leitura ou Acesso de leitura e gravação para as Permissões do grupo de sistemas.
-
Definindo as permissões de acesso para funções do Lambda (API)
Na API do AWS IoT Greengrass, defina as permissões aos recursos de machine learning na propriedade ResourceAccessPolicy
da função do Lambda ou na propriedade OwnerSetting
do recurso.
- Funções conteinerizadas do Lambda
-
Se apenas funções conteinerizadas do Lambda estiverem anexadas ao recurso de machine learning:
-
Para funções conteinerizadas do Lambda, defina permissões de acesso na propriedade
Permission
da propriedadeResourceAccessPolicies
. Por exemplo:"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 recursos de machine learning, omita a propriedade
OwnerSetting
. Por exemplo:"Resources": [ { "Id": "my-resource-id", "Name": "my-resource-name", "ResourceDataContainer": { "S3MachineLearningModelResourceData": { "DestinationPath": "/
local-destination-path
", "S3Uri": "s3://uri-to-resource-package
" } } } ]Essa é a configuração recomendada quando apenas funções conteinerizadas do Lambda acessam o recurso de machine learning. Caso contrário, você pode conceder mais permissões de acesso às funções anexadas do Lambda do que elas precisam.
-
- Funções não conteinerizadas do Lambda (requer a v1.10 ou posterior do GGC)
-
Se alguma função não conteinerizada do Lambda estiver anexada ao recurso de machine learning:
-
Para funções não conteinerizadas do Lambda, omita a propriedade
Permission
emResourceAccessPolicies
. Essa configuração é necessária e permite que a função herde a permissão no nível do recurso. Por exemplo:"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 funções conteinerizadas do Lambda que também acessam o recurso de machine learning, omita a propriedade
Permission
emResourceAccessPolicies
ou defina uma permissão que seja a mesma ou mais restritiva que a permissão no nível do recurso. Por exemplo:"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 recursos de machine learning, defina a propriedade
OwnerSetting
, incluindo o filhoGroupOwner
e as propriedadesGroupPermission
. Por exemplo:"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
" } } } } ]
-
Acessando os recursos de machine learning do código de função do Lambda
As funções do Lambda definidas pelo usuário usam interfaces de SO específicas da plataforma para acessar recursos de machine learning em um dispositivo de núcleo.
A implementação do seu modelo de carregamento depende da sua biblioteca de ML.
Solução de problemas
Use as informações a seguir para ajudá-lo a solucionar problemas com o acesso aos recursos de machine learning.
Tópicos
- InvalidMLModelOwner - GroupOwnerSetting é fornecido no recurso do modelo de ML, mas GroupOwner ou GroupPermission não está presente
- A função NoContainer não pode configurar permissão ao anexar recursos de Machine Learning. <function-arn> refere-se ao recurso de Machine Learning <resource-id> com permissão <ro/rw> na política de acesso aos recursos.
- A função <function-arn> refere-se ao recurso Machine Learning <resource-id> com permissão ausente em ResourceAccessPolicy e OwnerSetting.
- A função <function-arn> refere-se ao recurso de Machine Learning <resource-id> com permissão \"rw\", enquanto o proprietário do recurso que define GroupPermission permite apenas \"ro\".
- A função NoContainer <function-arn> refere-se a recursos do caminho de destino aninhado.
- O Lambda <function-arn> ganha acesso ao recurso <resource-id> compartilhando o mesmo ID do proprietário do grupo
InvalidMLModelOwner - GroupOwnerSetting é fornecido no recurso do modelo de ML, mas GroupOwner ou GroupPermission não está presente
Solução: você receberá esse erro se um recurso de machine learning contiver o objeto ResourceDownloadOwnerSetting mas a propriedade GroupOwner
ou GroupPermission
necessária não estiver definida. Para resolver esse problema, defina a propriedade ausente.
A função NoContainer não pode configurar permissão ao anexar recursos de Machine Learning. <function-arn> refere-se ao recurso de Machine Learning <resource-id> com permissão <ro/rw> na política de acesso aos recursos.
Solução: você receberá esse erro se uma função não conteinerizada do Lambda especificar permissões no nível da função para um recurso de machine learning. As funções não conteinerizadas devem herdar permissões das permissões de proprietário do recurso definidas no recurso de machine learning. Para resolver esse problema, selecione herdar permissões de proprietário do recurso (console) ou rremover as permissões da política de acesso aos recursos da função do Lambda (API) .
A função <function-arn> refere-se ao recurso Machine Learning <resource-id> com permissão ausente em ResourceAccessPolicy e OwnerSetting.
Solução: você receberá esse erro se as permissões para o recurso de machine learning não estiverem configuradas para a função anexada do Lambda ou para o recurso. Para resolver esse problema, configure permissões na propriedade ResourceAccessPolicy para a função do Lambda ou a propriedade OwnerSetting para o recurso.
A função <function-arn> refere-se ao recurso de Machine Learning <resource-id> com permissão \"rw\", enquanto o proprietário do recurso que define GroupPermission permite apenas \"ro\".
Solução: você receberá esse erro se as permissões de acesso definidas para a função anexada do Lambda excederem as permissões de proprietário do recurso definidas para o recurso de machine learning. Para resolver esse problema, defina permissões mais restritivas para a função do Lambda ou permissões menos restritivas para o proprietário do recurso.
A função NoContainer <function-arn> refere-se a recursos do caminho de destino aninhado.
Solução: você receberá esse erro se vários recursos de machine learning anexados a uma função não conteinerizada do Lambda utilizarem o mesmo caminho de destino ou um caminho de destino aninhado. Para resolver esse problema, especifique caminhos de destino separados para os recursos.
O Lambda <function-arn> ganha acesso ao recurso <resource-id> compartilhando o mesmo ID do proprietário do grupo
Solução: você receberá esse erro em runtime.log
se o mesmo grupo de sistemas operacionais for especificado como a identidade da função do Lambda Executar como e o proprietário do recurso de um recurso de machine learning, mas o recurso não estiver vinculado à função do Lambda. Essa configuração concede permissões implícitas à função do Lambda que podem ser usadas para acessar o recurso sem autorização do AWS IoT Greengrass.
Para resolver esse problema, use um grupo de SO diferente para uma das propriedades ou anexe o recurso de machine learning à função do Lambda.