Lambda 함수에서 기계 학습 리소스에 액세스 - AWS IoT Greengrass

AWS IoT Greengrass Version 1 는 2023년 6월 30일에 수명 연장 단계에 들어갔습니다. AWS IoT Greengrass V1 관리형 정책에 대한 자세한 정보는 섹션을 참조하세요. 이 날짜 이후에는 기능, 개선 사항, 버그 수정 또는 보안 패치를 제공하는 업데이트를 릴리스하지 AWS IoT Greengrass V1 않습니다. 에서 실행되는 디바이스는 중단 AWS IoT Greengrass V1 되지 않고 계속 작동하며 클라우드에 연결됩니다. 로 마이그레이션 AWS IoT Greengrass Version 2하는 것이 좋습니다. 이 마이그레이션하면 추가 플랫폼 에 대한 중요한 새 기능과 지원이 추가됩니다. https://docs.aws.amazon.com/greengrass/v2/developerguide/operating-system-feature-support-matrix.html

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Lambda 함수에서 기계 학습 리소스에 액세스

사용자 정의 Lambda 함수는 기계 학습 리소스에 액세스하여 AWS IoT Greengrass에서 로컬 추론을 실행할 수 있습니다. 기계 학습 리소스는 훈련된 모델과 코어 디바이스로 다운로드되는 기타 아티팩트로 구성됩니다.

Lambda 함수가 코어의 기계 학습 리소스에 액세스할 수 있도록 허용하려면 해당 리소스를 Lambda 함수에 연결하고 액세스 권한을 정의해야 합니다. 제휴(또는 연결된) Lambda 함수의 컨테이너화 모드에 따라 이 작업을 수행하는 방법이 결정됩니다.

기계 학습 리소스에 대한 액세스 권한

AWS IoT Greengrass 코어 v1.10.0부터는 기계 학습 리소스의 리소스 소유자를 정의할 수 있습니다. 리소스 소유자는 AWS IoT Greengrass가 리소스 아티팩트를 다운로드하는 데 사용하는 OS 그룹 및 권한을 나타냅니다. 리소스 소유자가 정의되지 않은 경우 다운로드한 리소스 아티팩트는 루트에 대해서만 액세스가 가능합니다.

  • 컨테이너화되지 않은 Lambda 함수가 기계 학습 리소스에 액세스하는 경우 컨테이너에서 권한 제어가 없으므로 리소스 소유자를 정의해야 합니다. 컨테이너화되지 않은 Lambda 함수는 리소스 소유자 권한을 상속하여 리소스에 액세스하는 데 사용할 수 있습니다.

     

  • 컨테이너화된 Lambda 함수만 리소스에 액세스하는 경우 리소스 소유자를 정의하는 대신 함수 수준 권한을 사용하는 것이 좋습니다.

     

리소스 소유자 속성

리소스 소유자는 그룹 소유자 및 그룹 소유자 권한을 지정합니다.

그룹 소유자. 코어 디바이스에 있는 기존 Linux OS 그룹의 그룹 ID(GID)입니다. 그룹의 사용 권한이 Lambda 프로세스에 추가됩니다. 특히 GID가 Lambda 함수의 보충 그룹 ID에 추가됩니다.

Greengrass 그룹의 Lambda 함수가 기계 학습 리소스의 리소스 소유자와 동일한 OS 그룹으로 실행되도록 구성된 경우 해당 리소스가 Lambda 함수에 연결되어야 합니다. 그렇지 않으면 이 구성이 AWS IoT Greengrass 인증 없이 리소스에 액세스하는 데 Lambda 함수가 사용할 수 있는 암시적 권한을 부여하기 때문에 배포가 실패합니다. Lambda 함수가 루트(UID=0)로 실행되는 경우 배포 유효성 검사를 건너뜁니다.

Greengrass 코어의 다른 리소스, Lambda 함수 또는 파일에서 사용하지 않는 OS 그룹을 사용하는 것이 좋습니다. 공유 OS 그룹을 사용하면 연결된 Lambda 함수에 필요한 것보다 더 많은 액세스 권한이 부여됩니다. 공유 OS 그룹을 사용하는 경우, 연결된 Lambda 함수가 공유 OS 그룹을 사용하는 모든 기계 학습 리소스에도 연결되어야 합니다. 그렇지 않으면 배포가 실패합니다.

그룹 소유자 권한. Lambda 프로세스에 추가할 읽기 전용 또는 읽기 및 쓰기 권한입니다.

컨테이너화되지 않은 Lambda 함수는 리소스에 대한 이러한 액세스 권한을 상속해야 합니다. 컨테이너화된 Lambda 함수는 이러한 리소스 수준 권한을 상속하거나 함수 수준 권한을 정의할 수 있습니다. 함수 수준 권한을 정의하는 경우, 권한은 리소스 수준 권한과 같거나 더 제한적이어야 합니다.

다음 테이블은 지원되는 액세스 권한 구성을 보여줍니다.

GGC v1.10 or later
속성 컨테이너화된 Lambda 함수만 리소스에 액세스하는 경우 컨테이너화되지 않은 Lambda 함수가 리소스에 액세스하는 경우
함수 수준 속성

권한(읽기/쓰기)

리소스가 리소스 소유자를 정의하지 않는 한 필수입니다. 리소스 소유자가 정의된 경우, 함수 수준 권한은 리소스 소유자 권한과 같거나 더 제한적이어야 합니다.

컨테이너화된 Lambda 함수만 리소스에 액세스하는 경우 리소스 소유자를 정의하지 않는 것이 좋습니다.

컨테이너화되지 않은 Lambda 함수:

지원하지 않음. 컨테이너화되지 않은 Lambda 함수는 리소스 수준 권한을 상속해야 합니다.

컨테이너화된 Lambda 함수:

선택 사항이지만 리소스 수준 권한과 같거나 더 제한적이어야 합니다.

리소스 수준 속성

리소스 소유자

선택 사항 (권장하지 않음).

필수 사항입니다.

권한(읽기/쓰기)

선택 사항 (권장하지 않음).

필수 사항입니다.

GGC v1.9 or earlier
속성 컨테이너화된 Lambda 함수만 리소스에 액세스하는 경우 컨테이너화되지 않은 Lambda 함수가 리소스에 액세스하는 경우
함수 수준 속성

권한(읽기/쓰기)

필수 사항입니다.

지원하지 않음.

리소스 수준 속성

리소스 소유자

지원하지 않음.

지원하지 않음.

권한(읽기/쓰기)

지원하지 않음.

지원하지 않음.

참고

AWS IoT Greengrass API를 사용하여 Lambda 함수와 리소스를 구성하는 경우 함수 수준 ResourceId 속성도 필요합니다. ResourceId 속성은 기계 학습 리소스를 Lambda 함수에 연결합니다.

Lambda 함수에 대한 액세스 권한 정의(콘솔)

AWS IoT 콘솔에서는 기계 학습 리소스를 구성하거나 Lambda 함수에 연결할 때 액세스 권한을 정의합니다.

컨테이너화된 Lambda 함수

컨테이너화된 Lambda 함수만 기계 학습 리소스에 연결되는 경우:

  • 기계 학습 리소스의 리소스 소유자로 시스템 그룹 없음을 선택합니다. 컨테이너화된 Lambda 함수만 기계 학습 리소스에 액세스할 때 권장되는 설정입니다. 아니면 연결된 Lambda 함수에 필요한 것보다 많은 액세스 권한을 부여할 수 있습니다.

     

 

컨테이너화되지 않은 Lambda 함수(GGC v1.10 이상 필요)

컨테이너화되지 않은 Lambda 함수가 기계 학습 리소스에 연결된 경우:

  • 기계 학습 리소스의 리소스 소유자로 사용할 시스템 그룹의 ID(GID)를 지정합니다. 시스템 그룹 및 권한 지정을 선택하고 GID를 입력합니다. 코어 디바이스의 getent group 명령을 사용하여 시스템 그룹의 ID를 조회할 수 있습니다.

     

  • 시스템 그룹 권한으로 읽기 전용 액세스 또는 읽기 및 쓰기 액세스를 선택합니다.

Lambda 함수에 대한 액세스 권한 정의(API)

AWS IoT Greengrass API의 경우, Lambda 함수의 ResourceAccessPolicy 속성이나 리소스의 OwnerSetting 속성에서 기계 학습 리소스에 대한 권한을 정의합니다.

컨테이너화된 Lambda 함수

컨테이너화된 Lambda 함수만 기계 학습 리소스에 연결되는 경우:

  • 컨테이너화된 Lambda 함수의 경우 ResourceAccessPolicies 속성의 Permission 속성에서 액세스 권한을 정의합니다. 예:

    "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 } } ]
  • 기계 학습 리소스의 경우 OwnerSetting 속성을 생략합니다. 예:

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

    컨테이너화된 Lambda 함수만 기계 학습 리소스에 액세스할 때 권장되는 구성입니다. 아니면 연결된 Lambda 함수에 필요한 것보다 많은 액세스 권한을 부여할 수 있습니다.

 

컨테이너화되지 않은 Lambda 함수(GGC v1.10 이상 필요)

컨테이너화되지 않은 Lambda 함수가 기계 학습 리소스에 연결된 경우:

  • 컨테이너화되지 않은 Lambda 함수의 경우, ResourceAccessPolicies에서 Permission 속성을 생략합니다. 이 구성은 필수이며 함수가 리소스 수준 권한을 상속할 수 있게 해줍니다. 예:

    "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 } } ]
  • 기계 학습 리소스에도 액세스하는 컨테이너화된 Lambda 함수의 경우, ResourceAccessPolicies에서 Permission 속성을 생략하거나 리소스 수준 권한과 같거나 더 제한적인 권한을 정의합니다. 예:

    "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 } } ]
  • 기계 학습 리소스의 경우, 하위 GroupOwnerGroupPermission 속성을 포함해 OwnerSetting 속성을 정의합니다. 예:

    "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" } } } } ]

Lambda 함수 코드에서 기계 학습 리소스에 액세스

사용자 정의 Lambda 함수는 플랫폼별 OS 인터페이스를 사용하여 코어 디바이스의 기계 학습 리소스에 액세스합니다.

GGC v1.10 or later

컨테이너화된 Lambda 함수의 경우, 리소스는 Greengrass 컨테이너 내부에 마운트되며 해당 리소스에 대해 정의된 로컬 대상 경로에서 사용할 수 있습니다. 컨테이너화되지 않은 Lambda 함수의 경우, 리소스는 Lambda 특정 작업 디렉터리에 symlink되어 Lambda 프로세스의 AWS_GG_RESOURCE_PREFIX 환경 변수로 전달됩니다.

기계 학습 리소스의 다운로드된 아티팩트에 대한 경로를 얻기 위해 Lambda 함수는 리소스에 대해 정의된 로컬 대상 경로에 AWS_GG_RESOURCE_PREFIX 환경 변수를 추가합니다. 컨테이너화된 Lambda 함수의 경우 반환된 값은 단일 슬래시(/)입니다.

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

기계 학습 리소스의 다운로드된 아티팩트는 리소스에 대해 정의된 로컬 대상 경로에 위치합니다. 컨테이너화된 Lambda 함수만 AWS IoT Greengrass 코어 v1.9 이전 버전의 기계 학습 리소스에 액세스할 수 있습니다.

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

모델 로딩 구현은 ML 라이브러리에 따라 다릅니다.

문제 해결

다음 정보를 사용하여 기계 학습 리소스 액세스와 관련된 문제를 해결할 수 있습니다.

InvalidML ModelOwner - GroupOwnerSetting ML 모델 리소스에 제공되었지만 존재하지 GroupOwner 않음 GroupPermission

해결 방법: 기계 학습 리소스에 ResourceDownloadOwnerSetting개체가 포함되어 있지만 필수 GroupOwner 또는 GroupPermission 속성이 정의되지 않은 경우 이 오류가 발생합니다. 이 문제를 해결하려면 누락된 속성을 정의합니다.

 

NoContainer 함수는 Machine Learning 리소스를 연결할 때 권한을 구성할 수 없습니다. <function-arn>리소스 액세스 정책에 <resource-id>권한이 <ro/rw> 있는 기계 학습 리소스를 말합니다.

해결 방법: 컨테이너화되지 않은 Lambda 함수가 기계 학습 리소스에 대한 함수 수준 권한을 지정하는 경우 이 오류가 발생합니다. 컨테이너화되지 않은 함수는 기계 학습 리소스에 정의된 리소스 소유자 권한으로부터 권한을 상속해야 합니다. 이 문제를 해결하려면 리소스 소유자 권한(콘솔)을 상속하거나, Lambda 함수의 리소스 액세스 정책(API)에서 권한을 제거하도록 선택하십시오.

 

함수는 <function-arn><resource-id> ResourceAccessPolicy 및 리소스 모두에서 권한이 누락된 Machine Learning 리소스를 가리킵니다 OwnerSetting.

해결 방법: 기계 학습 리소스에 대한 권한이 연결된 Lambda 함수 또는 리소스에 대해 구성되지 않은 경우 이 오류가 발생합니다. 이 문제를 해결하려면 Lambda 함수의 ResourceAccessPolicy속성 또는 리소스의 속성에서 권한을 OwnerSetting구성하십시오.

 

함수는 <function-arn><resource-id>\ "rw\” 권한이 있는 Machine Learning 리소스를 가리키는 반면, 리소스 소유자 설정은\ "ro\ GroupPermission "만 허용합니다.

해결 방법: 연결된 Lambda 함수에 대해 정의된 액세스 권한이 기계 학습 리소스에 대해 정의된 리소스 소유자 권한을 초과하는 경우 이 오류가 발생합니다. 이 문제를 해결하려면 Lambda 함수에 대해 더 제한적인 권한을 설정하거나, 리소스 소유자에 대해 덜 제한적인 권한을 설정합니다.

 

NoContainer 함수는 <function-arn>중첩된 대상 경로의 리소스를 가리킵니다.

해결 방법: 컨테이너화되지 않은 Lambda 함수에 연결된 여러 개의 기계 학습 리소스가 동일한 대상 경로 또는 중첩된 대상 경로를 사용하는 경우 이 오류가 발생합니다. 이 문제를 해결하려면 리소스에 대해 별도의 대상 경로를 지정합니다.

 

Lambda <function-arn>은 동일한 그룹 소유자 ID를 공유하여 리소스 <resource-id>에 대한 액세스 권한을 획득합니다.

해결 방법: 동일한 OS 그룹이 Lambda 함수의 다음으로 실행 ID와 기계 학습 리소스의 리소스 소유자로 지정되었지만 리소스가 Lambda 함수에 연결되지 않은 경우 runtime.log에 이 오류가 발생합니다. 이 구성은 Lambda 함수에 AWS IoT Greengrass 인증 없이 리소스에 액세스하는 데 사용할 수 있는 암시적 권한을 부여합니다.

이 문제를 해결하려면 속성 중 하나에 대해 다른 OS 그룹을 사용하거나 기계 학습 리소스를 Lambda 함수에 연결합니다.

다음 사항도 참조하십시오.