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(으)로 마이그레이션하는 것이 좋습니다.
그룹별 구성을 사용한 Lambda 함수 실행 제어
AWS IoT Greengrass은 Lambda 함수에 대한 클라우드 기반 관리를 제공합니다. Lambda 함수의 코드와 종속성은 AWS Lambda를 사용하여 관리되지만 Greengrass 그룹에서 실행될 때 Lambda 함수가 동작하는 방식을 구성할 수 있습니다.
그룹별 구성 설정
AWS IoT Greengrass은 Lambda 함수에 대해 다음과 같은 그룹별 구성 설정을 제공합니다.
- 시스템 사용자 및 그룹
Lambda 함수 실행에 사용되는 액세스 ID입니다. 기본적으로 Lambda 함수는 그룹의 기본 액세스 확인으로 실행됩니다. 일반적으로 이 항목은 표준 AWS IoT Greengrass 시스템 계정(ggc_user and ggc_group)입니다. 설정을 변경할 수 있으며, Lambda 함수 실행에 필요한 권한을 가진 사용자 ID 및 그룹 ID를 선택할 수 있습니다. UID와 GID를 둘 다 재정의하거나 한 필드를 비워둘 경우 다른 하나만 재정의할 수도 있습니다. 이러한 설정으로 장치 리소스 액세스를 한층 세부적으로 제어할 수 있습니다. Lambda 함수 실행에 권한이 사용되는 사용자와 그룹에 대해 적절한 리소스 제한, 파일 권한, 디스크 할당량으로 Greengrass 하드웨어를 구성하는 것이 좋습니다.
이 기능은 AWS IoT Greengrass 코어 v1.7 이상에 사용할 수 있습니다.
중요
반드시 필요한 경우 외에는 Lambda 함수를 루트로 실행하는 것은 피하는 것이 좋습니다. 루트로 실행하면 다음과 같은 위험이 증가합니다.
-
Lambda 함수를 루트로 실행하면 중요한 파일을 실수로 삭제하는 등 의도치 않은 변경이 발생할 리스크가 증가합니다.
-
악의적인 개인으로 인한 데이터 및 장치 위험.
-
Docker 컨테이너가
--net=host
및UID=EUID=0
와(과) 함께 실행될 경우 컨테이너 이스케이프 위험이 커집니다.
루트로 실행할 필요가 없는 경우 AWS IoT Greengrass 구성을 업데이트해 이를 활성화해야 합니다. 자세한 내용은 루트로서의 Lambda 함수 실행 단원을 참조하십시오.
- 시스템 사용자 ID(번호)
-
Lambda 함수 실행에 필요한 권한을 가진 사용자의 사용자 ID입니다. 이 설정은 다른 사용자 ID/그룹 ID로 실행하기를 선택할 경우에만 사용 가능합니다. AWS IoT Greengrass 코어 장치에서 getent passwd 명령을 사용하여 Lambda 함수 실행에 사용할 사용자 ID를 조회할 수 있습니다.
Greengrass 코어 장치에서 동일한 UID를 사용하여 프로세스와 Lambda 함수를 실행하는 경우, Greengrass 그룹 역할은 프로세스에 임시 보안 인증을 부여할 수 있습니다. 프로세스는 Greengrass 코어 배포에 임시 보안 인증을 사용할 수 있습니다.
- 시스템 그룹 ID(번호)
-
Lambda 함수 실행에 필요한 권한을 가진 그룹의 그룹 ID입니다. 이 설정은 다른 사용자 ID/그룹 ID로 실행하기를 선택할 경우에만 사용 가능합니다. AWS IoT Greengrass 코어 장치에서 getent group 명령을 사용하여 Lambda 함수 실행에 사용할 그룹 ID를 조회할 수 있습니다.
-
- Lambda 함수 컨테이너화
-
그룹의 기본 컨테이너화로 Lambda 함수를 실행할지 선택하거나 이 Lambda 함수에 항상 사용할 컨테이너화를 지정합니다.
Lambda 함수의 컨테이너화 모드는 격리 수준을 결정합니다.
-
컨테이너화된 Lambda 함수는 Greengrass 컨테이너 모드에서 실행됩니다. Lambda 함수는 AWS IoT Greengrass 컨테이너 내부의 격리된 런타임 환경(또는 네임스페이스)에서 실행됩니다.
-
컨테이너화되지 않은 Lambda 함수는 컨테이너 없음 모드에서 실행됩니다. Lambda 함수는 격리 없이 일반 Linux 프로세스로 실행됩니다.
이 기능은 AWS IoT Greengrass 코어 v1.7 이상에 사용할 수 있습니다.
컨테이너화 없이 실행할 것이 요구되는 사용 사례가 아니라면 Lambda 함수를 Greengrass 컨테이너에서 실행하는 것이 좋습니다. Lambda 함수가 Greengrass 컨테이너에서 실행되면 연결된 로컬 장치 리소스를 사용하고 격리와 보안 강화에 따른 이점을 누릴 수 있습니다. 컨테이너화 변경 전에 Lambda 함수 컨테이너화 선택 시 고려 사항를 참조하십시오.
참고
장치 커널 네임스페이스와 cgroup의 활성화 없이 실행하려면 모든 Lambda 함수가 컨테이너화 없이 실행되어야 합니다. 이는 그룹의 기본 컨테이너화를 설정해 간편히 달성할 수 있습니다. 자세한 내용은 그룹 내 Lambda 함수의 기본 컨테이너화 설정을 참조하세요.
-
- 메모리 제한
-
함수에 할당된 메모리입니다. 기본값은 16MB입니다.
참고
Lambda 함수를 컨테이너화 없이 실행하기로 변경하면 메모리 제한 설정이 삭제됩니다. 컨테이너화 없이 실행되는 Lambda 함수에는 메모리 제한이 없습니다. 컨테이너화 없이 실행되도록 Lambda 함수 또는 그룹 기본 컨테이너화 설정을 변경하면 메모리 제한 설정이 무시됩니다.
- 제한 시간
-
함수 또는 요청이 종료되기 전까지의 시간입니다. 기본값은 3초입니다.
- 고정
-
Lambda 함수는 온디맨드 또는 긴 수명 주기를 가질 수 있습니다. 기본값은 온디맨드입니다.
온디맨드 Lambda 함수는 호출 시 새 컨테이너나 재사용된 컨테이너에서 시작됩니다. 함수에 대한 요청은 사용 가능한 어떤 컨테이너에서든 처리가 가능합니다. 수명이 긴 또는 고정 Lambda 함수는 AWS IoT Greengrass 시작 후 자동으로 시작되며 고유한 컨테이너(또는 샌드박스)에서 계속해서 실행됩니다. 함수에 대한 모든 요청은 동일한 컨테이너에 의해 처리됩니다. 자세한 내용은 Greengrass Lambda 함수의 라이프사이클 구성 단원을 참조하십시오.
- /sys 디렉터리에 대한 읽기 액세스 권한
-
함수가 호스트의 /sys 폴더에 액세스할 수 있는지 여부입니다. 함수가 /sys에서 장치 정보를 읽어야 할 때 이 권한을 사용하십시오. 기본값은 false입니다.
참고
이 설정은 Lambda 함수를 컨테이너화 없이 실행할 경우 사용할 수 없습니다. Lambda 함수를 컨테이너화 없이 실행하기로 변경하면 이 설정 값이 삭제됩니다.
- 인코딩 유형
-
함수에 대한 입력 페이로드의 예상 인코딩 유형(JSON 또는 이진)입니다. 기본값은 JSON입니다.
이진 인코딩 유형은 AWS IoT Greengrass 코어 소프트웨어 v1.5.0 및 AWS IoT Greengrass 코어 SDK v1.1.0부터 지원됩니다. 장치 데이터와 상호 작용하는 함수에서는 이진 입력 데이터를 수락하는 것이 유용할 수 있습니다. 왜냐하면 장치의 하드웨어 기능이 제한되어 있기 때문에 JSON 데이터 유형을 생성하는 것이 종종 어렵거나 불가능하기 때문입니다.
참고
Lambda 실행 파일은 이진 인코딩 유형만 지원하며, JSON은 지원하지 않습니다.
- 프로세스 인수
-
Lambda 함수가 실행될 때 전달할 명령줄 인수입니다.
- 환경 변수
-
함수 코드 및 라이브러리에 역동적으로 설정값을 전달할 수 있는 키-값 쌍입니다. 로컬 환경 변수는 AWS Lambda 함수 환경 변수와 동일한 방식으로 작동하지만, 코어 환경에서도 사용할 수 있습니다.
- Resource access policies(리소스 액세스 정책)
-
Lambda 함수가 액세스할 수 있는 최대 10개의 로컬 리소스, 비밀 리소스, 기계 학습 리소스 및 해당
read-only
또는read-write
권한의 목록입니다. 콘솔에서 이러한 제휴 리소스는 리소스 탭의 그룹 구성 페이지에 나열됩니다.컨테이너화 모드는 Lambda 함수가 로컬 장치와 볼륨 리소스 및 기계 학습 리소스에 액세스하는 방법에 영향을 줍니다.
-
컨테이너화되지 않은 Lambda 함수는 코어 장치의 파일 시스템을 통해 직접 로컬 장치 및 볼륨 리소스에 액세스해야 합니다.
-
컨테이너화되지 않은 Lambda 함수가 Greengrass 그룹의 기계 학습 리소스에 액세스하도록 허용하려면 기계 학습 리소스에 대한 리소스 소유자 및 액세스 권한 속성을 설정해야 합니다. 자세한 내용은 Lambda 함수에서 기계 학습 리소스에 액세스 단원을 참조하십시오.
-
AWS IoT Greengrass API를 사용하여 사용자 정의 Lambda 함수의 그룹별 구성 설정을 설정하는 방법에 대한 자세한 내용은 AWS IoT Greengrass Version 1 API 참조의 CreateFunctionDefinition 또는 AWS CLI 명령 참조의 create-function-definition을 참조하십시오. Greengrass 코어에 Lambda 함수를 배포하려면 함수가 포함된 함수 정의 버전을 생성하고, 함수 정의 버전 및 기타 그룹 구성 요소를 참조하는 그룹 버전을 생성한 다음 그룹을 배포합니다.
루트로서의 Lambda 함수 실행
이 기능은 AWS IoT Greengrass 코어 v1.7 이상에 사용할 수 있습니다.
하나 이상의 Lambda 함수를 루트로 실행할 수 있기 전에는 먼저 AWS IoT Greengrass 구성을 업데이트해 지원을 활성화해야 합니다. 루트로서의 Lambda 함수 실행 지원은 기본적으로 꺼져 있습니다. Lambda 함수를 루트로서 배포 및 실행하려 하고(UID 및 GID가 0) AWS IoT Greengrass 구성을 업데이트하지 않은 경우 배포에 실패합니다. 다음과 같은 오류 메시지가 런타임 로그(greengrass_root
/ggc/var/log/system/runtime.log)에 표시됩니다.
lambda(s)
[list of function arns]
are configured to run as root while Greengrass is not configured to run lambdas with root permissions
중요
반드시 필요한 경우 외에는 Lambda 함수를 루트로 실행하는 것은 피하는 것이 좋습니다. 루트로 실행하면 다음과 같은 위험이 증가합니다.
-
Lambda 함수를 루트로 실행하면 중요한 파일을 실수로 삭제하는 등 의도치 않은 변경이 발생할 리스크가 증가합니다.
-
악의적인 개인으로 인한 데이터 및 장치 위험.
-
Docker 컨테이너가
--net=host
및UID=EUID=0
와(과) 함께 실행될 경우 컨테이너 이스케이프 위험이 커집니다.
Lambda 함수를 루트로 실행하도록 허용하려면
AWS IoT Greengrass 장치에서
greengrass-root
/config 폴더로 이동합니다.참고
기본적으로
greengrass-root
는 /greengrass 디렉터리입니다.config.json 파일을 편집하여
"allowFunctionsToRunAsRoot" : "yes"
를runtime
필드에 추가합니다. 예:{ "coreThing" : { ... }, "runtime" : { ... "allowFunctionsToRunAsRoot" : "yes" }, ... }
다음 명령을 사용해 AWS IoT Greengrass를 재시작합니다.
cd /greengrass/ggc/core sudo ./greengrassd restart
이제 Lambda 함수의 사용자 ID와 그룹 ID(UID/GID)를 0으로 설정해 Lambda 함수를 루트로 실행할 수 있습니다.
루트로서의 Lambda 함수 실행을 허용하지 않으려면 "allowFunctionsToRunAsRoot"
의 값을 "no"
로 변경하고 AWS IoT Greengrass를 재시작할 수 있습니다.
Lambda 함수 컨테이너화 선택 시 고려 사항
이 기능은 AWS IoT Greengrass 코어 v1.7 이상에 사용할 수 있습니다.
기본적으로 Lambda 함수는 AWS IoT Greengrass 컨테이너 내부에서 실행됩니다. 컨테이너를 통해 함수와 호스트를 서로 격리해, 컨테이너 내 호스트와 함수 모두의 보안을 강화할 수 있습니다.
컨테이너화 없이 실행할 것이 요구되는 사용 사례가 아니라면 Lambda 함수를 Greengrass 컨테이너에서 실행하는 것이 좋습니다. Greengrass 컨테이너에서 Lambda 함수를 실행하면 리소스 액세스 제한을 보다 세부적으로 제어할 수 있습니다.
다음은 컨테이너화 없이 실행할 경우에 대한 몇 가지 예제 사용 사례입니다.
컨테이너 모드를 지원하지 않는 장치에서 AWS IoT Greengrass를 실행하려는 경우(예를 들어 특수 Linux 배포를 사용하거나 너무 오래된 커널 버전이 있는 경우).
자체 OverlayFS를 사용하는 다른 컨테이너 환경에서 Lambda 함수를 실행하려 하지만 Greengrass 컨테이너에서 실행 시 OverlayFS 충돌이 발생하는 경우.
배포 시 결정할 수 없거나 플러그 가능 장치처럼 배포 후 변경될 수 있는 경로로 로컬 리소스에 액세스할 수 있어야 합니다.
프로세스로서 쓰여진 레거시 애플리케이션을 컨테이너화된 Lambda 함수로 실행할 때 문제가 발생한 경우.
컨테이너화 | 참고 |
---|---|
Greengrass 컨테이너 |
|
컨테이너 없음 |
|
참고
Greengrass 그룹의 기본 컨테이너화 설정은 커넥터에는 적용되지 않습니다.
Lambda 함수의 컨테이너화를 변경하면 배포 시 문제가 발생할 수 있습니다. 더 이상 새 컨테이너화 설정으로 사용할 수 없는 Lambda 함수에 로컬 리소스를 할당했다면 배포에 실패합니다.
Lambda 함수를 Greengrass 컨테이너에서 실행하는 방식에서 컨테이너화 없이 실행하는 방식으로 변경하면 해당 함수에 대해 설정된 메모리 제한이 삭제됩니다. 연결된 로컬 리소스를 사용하기보다 파일 시스템에 직접 액세스해야 합니다. 배포하기 전에 연결된 모든 리소스를 제거해야 합니다.
Lambda 함수를 컨테이너화 없이 실행하는 방식에서 컨테이너에서 실행하는 방식으로 변경하면 Lambda 함수는 파일 시스템에 대한 직접 액세스 권한을 상실합니다. 각 함수에 대한 메모리 제한을 정의하거나 16MB 기본값을 수락해야 합니다. 배포하기 전에 각 Lambda 함수에 대해 이러한 설정을 구성할 수 있습니다.
Lambda 함수의 컨테이너화 설정을 변경하려면
AWS IoT 콘솔 탐색 창의 관리에서 Greengrass 장치를 확장한 다음 그룹(V1)을 선택합니다.
-
설정을 변경하려는 Lambda 함수가 포함된 그룹을 선택합니다.
-
Lambda 함수탭을 선택합니다.
-
변경하려는 Lambda 함수에서 줄임표(…)를 선택한 다음 구성 편집을 선택합니다.
-
컨테이너화 설정을 변경합니다. Lambda 함수가 Greengras 컨테이너에서 실행되도록 구성할 경우, 메모리 제한과 /sys 디렉터리에 대한 읽기 액세스. 권한 또한 설정해야 합니다.
-
저장을 선택한 다음 확인을 선택하여 Lambda 함수에 변경 내용을 저장합니다.
변경 사항은 그룹이 배포될 때 적용됩니다.
AWS IoT Greengrass API 참조에서 CreateFunctionDefinition, CreateFunctionDefinitionVersion을 사용할 수도 있습니다. 컨테이너화 설정을 변경할 경우, 다른 파라미터 또한 업데이트해야 합니다. 예를 들어 Lambda 함수를 Greengrass 컨테이너에서 실행하는 방식에서 컨테이너화 없이 실행하는 방식으로 변경한다면 MemorySize
파라미터를 지워야 합니다.
Greengrass 장치로 지원되는 격리 모드 결정
AWS IoT Greengrass 종속성 확인 프로그램을 사용해 Greengrass 장치가 어떤 격리 모드(Greengrass 컨테이너 있음/없음)를 지원하는지 확인할 수 있습니다.
AWS IoT Greengrass 종속성 확인 프로그램을 실행하려면
GitHub 리포지토리
에서 AWS IoT Greengrass 종속성 검사기를 다운로드하여 실행합니다. wget https://github.com/aws-samples/aws-greengrass-samples/raw/master/greengrass-dependency-checker-GGCv1.11.x.zip unzip greengrass-dependency-checker-GGCv1.11.x.zip cd greengrass-dependency-checker-GGCv1.11.x sudo modprobe configs sudo ./check_ggc_dependencies | more
more
가 나타나면 Spacebar 키를 눌러 다른 텍스트 페이지를 표시합니다.
modprobe 명령에 대한 자세한 내용을 보려면 터미널에서 man modprobe를 실행합니다.
그룹에 있는 Lambda 함수의 기본 액세스 자격 증명 설정
이 기능은 AWS IoT Greengrass 코어 v1.8 이상에 사용할 수 있습니다.
장치 리소스에 대한 액세스를 자세히 제어하기 위해, 그룹에서 Lambda 함수를 실행하는 데 사용되는 기본 액세스 자격 증명을 구성할 수 있습니다. 이 설정은 Lambda 함수가 코어 장치에서 실행될 때 함수에 제공된 기본 권한을 결정합니다. 그룹에 있는 개별 함수의 설정을 재정의하려면 함수의 Run as(실행 방식) 속성을 사용할 수 있습니다. 자세한 내용은 실행 방식을 참조하십시오.
기본 AWS IoT Greengrass 코어 소프트웨어를 실행하기 위해 이 그룹 수준 설정이 사용되기도 합니다. 이 설정은 메시지 라우팅, 로컬 섀도우 동기화, 자동 IP 주소 감지 등의 작업을 관리하는 시스템 Lambda 함수로 이루어집니다.
표준 AWS IoT Greengrass 시스템 계정(ggc_user 및 ggc_group)으로 실행되거나 다른 사용자나 그룹의 권한을 사용하도록 기본 액세스 자격 증명을 구성할 수 있습니다. 사용자 정의 또는 시스템 Lambda 함수 실행에 권한이 사용되는 사용자와 그룹에 대해 적절한 리소스 제한, 파일 권한, 디스크 할당량으로 Greengrass 하드웨어를 구성하는 것이 좋습니다.
AWS IoT Greengrass 그룹의 기본 액세스 자격 증명을 수정하려면
AWS IoT 콘솔 탐색 창의 관리에서 Greengrass 장치를 확장한 다음 그룹(V1)을 선택합니다.
설정을 변경하려는 그룹을 선택합니다.
-
Lambda 함수 탭을 선택하고 기본 Lambda 함수 런타임 환경 섹션에서 편집을 선택합니다.
-
기본 Lambda 함수 런타임 환경 편집 페이지의 기본 시스템 사용자 및 그룹에서 다른 사용자 ID/그룹 ID를 선택합니다.
이 옵션을 선택하면 시스템 사용자 ID (숫자) 및 시스템 그룹 ID (숫자) 필드가 표시됩니다.
사용자 ID, 그룹 ID 또는 둘 다 입력합니다. 필드를 비워 두면 해당 Greengrass 시스템 계정(ggc_user 또는 ggc_group)이 사용됩니다.
-
시스템 사용자 ID(번호)에 그룹에서 Lambda 함수를 실행하는 데 기본적으로 사용하려는 권한을 가진 사용자의 사용자 ID를 입력합니다. getent passwd 명령을 AWS IoT Greengrass 장치에 사용하여 사용자 ID를 조회할 수 있습니다.
-
시스템 그룹 ID(번호)에 그룹에서 Lambda 함수를 실행하는 데 기본적으로 사용하려는 권한을 가진 그룹의 그룹 ID를 입력합니다. getent group 명령을 AWS IoT Greengrass 장치에 사용하여 그룹 ID를 조회할 수 있습니다.
중요
루트 사용자로 실행하면 데이터 및 장치의 위험이 커집니다. 비즈니스 사례에 필요하지 않으면 루트(UID/GID=0)로 실행하지 마십시오. 자세한 내용은 루트로서의 Lambda 함수 실행 단원을 참조하십시오.
-
변경 사항은 그룹이 배포될 때 적용됩니다.
그룹 내 Lambda 함수의 기본 컨테이너화 설정
이 기능은 AWS IoT Greengrass 코어 v1.7 이상에 사용할 수 있습니다.
Greengrass 그룹의 컨테이너화 설정은 그룹의 Lambda 함수에 대한 기본 컨테이너화를 결정합니다.
Greengrass 컨테이너 모드에서 Lambda 함수는 기본적으로 AWS IoT Greengrass 컨테이너 내부의 격리된 런타임 환경에서 실행됩니다.
컨테이너 없음 모드에서 Lambda 함수는 기본적으로 일반 Linux 프로세스로 실행됩니다.
그룹 설정을 수정해 그룹 내 Lambda 함수의 기본 컨테이너화를 지정할 수 있습니다. Lambda 함수를 그룹 기본값과 다른 컨테이너화로 실행하도록 하려면 그룹 내 하나 이상의 함수에 대해 이 설정을 재정의할 수 있습니다. 컨테이너화 설정 변경 전에 Lambda 함수 컨테이너화 선택 시 고려 사항를 참조하십시오.
중요
그룹의 기본 컨테이너화를 변경하려고 하지만 서로 다른 컨테이너화를 사용하는 함수가 하나 이상인 경우, 그룹 설정 변경 전에 Lambda 함수 설정을 변경합니다. 그룹 컨테이너화 설정을 먼저 변경할 경우, 메모리 제한과 /sys 디렉터리에 대한 읽기 액세스 권한 설정의 값이 삭제됩니다.
AWS IoT Greengrass 그룹의 컨테이너화 설정을 변경하려면
AWS IoT 콘솔 탐색 창의 관리에서 Greengrass 장치를 확장한 다음 그룹(V1)을 선택합니다.
설정을 변경하려는 그룹을 선택합니다.
-
Lambda 함수탭을 선택합니다.
-
기본 Lambda 함수 런타임 환경에서 편집을 선택합니다.
-
기본 Lambda 함수 런타임 환경 편집 페이지의 기본 Lambda 함수 컨테이너화에서 컨테이너화 설정을 변경합니다.
-
Save(저장)를 선택합니다.
변경 사항은 그룹이 배포될 때 적용됩니다.