기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS IoT Greengrass V2 코어 디바이스를 루트가 아닌 디바이스로 마이그레이션
중요
이 주제에서는 권장 마이그레이션 접근 방식을 설명합니다. 디바이스 구성, 운영 체제 및 설치된 소프트웨어에 맞게 이러한 단계를 조정해야 할 수 있습니다.
기본적으로는 Linux 디바이스에서 루트 사용자로 AWS IoT Greengrass 실행됩니다. 에 AWS IoT Greengrass 필요한 Linux 기능만 사용하여 루트가 아닌 사용자로 실행되도록 AWS IoT Greengrass 코어 디바이스를 마이그레이션하여 디바이스의 보안 태세를 개선할 수 있습니다. 단일 디바이스를 마이그레이션하거나 플릿 간에 마이그레이션을 확장할 수 있습니다.
고려 사항
루트가 아닌 로 마이그레이션하기 전에 다음 사항을 고려하세요.
-
이 마이그레이션 절차는 systemd를 사용하여 Linux에서 AWS IoT Greengrass nucleus(Java 기반)를 실행하는 AWS IoT Greengrass 코어 디바이스에 적용됩니다. AWS IoT Greengrass nucleus lite를 실행하는 디바이스에는 적용되지 않습니다.
-
프로덕션 플릿을 마이그레이션하기 전에 개발 환경의 단일 디바이스에서 마이그레이션을 테스트합니다.
단일 디바이스 마이그레이션
이 마이그레이션 절차는에 설명된 접근 방식을 따릅니다솔루션 3: 구성 요소 사용자 분리를 사용하여 루트가 아닌 AWS IoT Greengrass V2 것으로 설정. 시작하기 전에 루트가 아닌 사용자가 구성 요소를 별도의 사용자로 실행할 수 있도록 허용하는 sudoers 구성을 포함하여 해당 주제의 사전 조건을 완료합니다.
플릿을 마이그레이션하기 전에이 절차를 사용하여 단일 디바이스를 마이그레이션합니다.
1단계: 루트가 아닌 사용자 및 그룹 생성
디바이스에 연결하고 로 AWS IoT Greengrass 실행되는 시스템 사용자 및 그룹을 생성합니다. user-name 및 group-name을 사용하려는 이름으로 바꿉니다.
sudo groupadd --systemgroup-namesudo useradd --system --create-home --shell /sbin/nologin -ggroup-nameuser-name
2단계: 파일 소유권 백업
롤백해야 하는 경우 복원할 수 있도록 현재 파일 소유권 구조를 중지 AWS IoT Greengrass 하고 저장합니다.
sudo systemctl stop greengrass.service sudo mkdir -p /opt/greengrass-backup sudo find /greengrass/v2 -exec stat -c 'chown %U:%G "%n"' {} \; | sudo tee /opt/greengrass-backup/restore_ownership.sh > /dev/null sudo chmod 700 /opt/greengrass-backup/restore_ownership.sh
참고
이 주제의 명령은를 AWS IoT Greengrass 루트 경로/greengrass/v2로 사용합니다. 다른 위치에 AWS IoT Greengrass 를 설치한 경우를 실제 AWS IoT Greengrass 루트 경로/greengrass/v2로 바꿉니다.
3단계: 파일 소유권 변경
루트가 아닌 사용자에게 AWS IoT Greengrass 디렉터리의 소유권을 이전합니다.
sudo chown -Ruser-name:group-name/greengrass/v2
4단계: systemd 드롭인 재정의 생성
필요한 Linux 기능을 갖춘 루트가 아닌 사용자 AWS IoT Greengrass 로 실행하도록 systemd에 지시하는 드롭인 디렉터리 및 구성 파일을 생성합니다.
sudo mkdir -p /etc/systemd/system/greengrass.service.d
마이그레이션은에서 시스템 드롭인 재정의 파일을 사용합니다/etc/systemd/system/greengrass.service.d/10-nonroot.conf. 드롭인 재정의는 기본 서비스 파일의 설정을 직접 수정하지 않고 대체합니다. 이 재정의는 제한된 Linux 기능 집합을 가진 루트가 아닌 사용자로 AWS IoT Greengrass 서비스를 실행하도록 systemd를 구성합니다. 드롭인 디렉터리를 제거하면 systemd가 기본 greengrass.service 파일로 되돌리고,이 파일은 원래 구성에서 루트로 실행됩니다.
다음 콘텐츠/etc/systemd/system/greengrass.service.d/10-nonroot.conf로 파일을 생성합니다.
[Service] User=user-nameAmbientCapabilities=CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_SYS_RESOURCE CAP_AUDIT_WRITE CapabilityBoundingSet=CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_SETUID CAP_SETGID CAP_SYS_RESOURCE CAP_AUDIT_WRITE ProtectSystem=strict ReadWritePaths=/greengrass/v2 /tmp
이러한 시스템 명령 및 필수 기능에 대한 자세한 내용은 섹션을 참조하세요솔루션 3: 구성 요소 사용자 분리를 사용하여 루트가 아닌 AWS IoT Greengrass V2 것으로 설정.
5단계: systemd 다시 로드 및 시작 AWS IoT Greengrass
다음 명령을 실행하여 시스템 데몬을 다시 로드하고 시작합니다 AWS IoT Greengrass.
sudo systemctl daemon-reload sudo systemctl start greengrass.service
6단계: 마이그레이션 확인
AWS IoT Greengrass 가 루트가 아닌 사용자로 실행 중인지 확인합니다.
sudo systemctl status greengrass.service ps -ef | grep greengrass
출력에는 루트가 아닌 사용자가 대신 프로세스 소유자로 표시됩니다root.
그런 다음 배포된 모든 구성 요소가 실행 중인지 확인합니다. 이 명령을 실행하려면 디바이스에 aws.greengrass.Cli 구성 요소를 배포해야 합니다.
sudo /greengrass/v2/bin/greengrass-cli component list
각 구성 요소는 RUNNING 또는 State의를 보고해야 합니다FINISHED. FINISHED는의 예상 터미널 상태입니다aws.greengrass.Nucleus. 마이그레이션이 완료된 것으로 간주하기 전에 BROKEN 또는 ERRORED 상태의 구성 요소를 조사합니다.
단일 디바이스 롤백
루트로 실행 AWS IoT Greengrass 되도록 복원해야 하는 경우 드롭인 재정의를 제거하고 파일 소유권을 복원한 다음 다시 시작합니다 AWS IoT Greengrass.
sudo systemctl stop greengrass.service sudo rm -rf /etc/systemd/system/greengrass.service.d sudo bash /opt/greengrass-backup/restore_ownership.sh sudo systemctl daemon-reload sudo systemctl start greengrass.service
에서 확인 명령을 6단계: 마이그레이션 확인 다시 실행하여 AWS IoT Greengrass 가 루트로 실행 중인지 확인합니다. 프로세스가 소유자root로 표시되어야 합니다.
롤백이 성공했는지 확인한 후 마이그레이션 아티팩트를 선택적으로 정리할 수 있습니다.
-
백업 디렉터리 - 나중에 마이그레이션을 재시도하거나 제거하려는
/opt/greengrass-backup경우를 유지할 수 있습니다.sudo rm -r /opt/greengrass-backup -
루트가 아닌 사용자 및 그룹 - 루트가 아닌 사용자 AWS IoT Greengrass 로 더 이상 실행할 계획이 없는 경우 1단계에서 생성한 사용자 및 그룹을 제거할 수 있습니다.
sudo userdeluser-namesudo groupdelgroup-name다른 서비스 또는 구성 요소에서이 사용자를 사용하는 경우 사용자를 제거하지 마십시오.
디바이스 플릿 마이그레이션
단일 디바이스에서 마이그레이션을 확인한 후 플릿 간에 마이그레이션을 확장할 수 있습니다. 다음 방법 중 한 가지를 선택하세요.
사용자 지정 AWS IoT Greengrass 부트스트랩 구성 요소 사용
플릿 전체에서 단일 디바이스 마이그레이션 단계를 자동화하는 사용자 지정 AWS IoT Greengrass 구성 요소를 생성할 수 있습니다. 이 접근 방식은 독립형이며 AWS IoT Greengrass 배포만 사용합니다. Systems Manager와 같은 외부 도구는 필요하지 않습니다.
구성 요소는 배포 중에 구성 요소를 루트로 true실행하는가 로 RequiresPrivilege 설정된 부트스트랩 수명 주기를 사용합니다. 부트스트랩 스크립트는 단일 디바이스 절차와 동일한 권한 있는 작업을 수행합니다.
-
루트가 아닌 사용자 및 그룹이 아직 없는 경우 생성합니다.
-
롤백을 위한 파일 소유권 구조를 백업합니다.
-
AWS IoT Greengrass 루트 디렉터리의 소유권을 루트가 아닌 사용자로 변경합니다.
-
systemd 드롭인 재정의 파일을 생성합니다.
-
systemd 데몬을 다시 로드합니다.
-
코드 101로 종료하여 디바이스를 재부팅합니다.
중요
구성 요소는 100이 아닌 코드 101로 종료되어야 합니다. 종료 코드 100은 메모리에 이미 캐시된 시스템 서비스 구성을 사용하는 AWS IoT Greengrass JVM 프로세스만 다시 시작합니다. 전체 재부팅은 시스템이 디스크에서 새 드롭인 재정의를 읽고 루트가 아닌 사용자 AWS IoT Greengrass 로 시작하도록 강제합니다. 재부팅하면 디바이스의 모든 서비스가 일시적으로 중단됩니다.
디바이스를 이미 마이그레이션한 경우 재배포가 실패하지 않도록 구성 요소를 멱등성으로 설정합니다.
마이그레이션 배포가 완료되면 디바이스가 루트가 아닌 사용자로 실행 중인지 확인합니다. 자세한 내용은 6단계: 마이그레이션 확인 단원을 참조하십시오. 실행 중인 사용자를 확인하고 결과를 보고하는 확인 구성 요소를 배포하거나 AWS IoT Greengrass 콘솔에서 배포 상태를 모니터링할 수 있습니다.
롤백 메커니즘 설정
플릿 전체에서 원격으로 루트 구성을 복원하려면 마이그레이션 구성 요소가 롤백 메커니즘을 설정해야 합니다. 한 가지 접근 방식은 systemd를 사용하여 트리거 파일을 모니터링하는 것입니다. 이 접근 방식에는 다음과 같은 시스템 리소스가 필요합니다.
-
드롭인 재정의를 제거하고, 백업에서 원래 파일 소유권을 복원하고, 시스템 데몬을 다시 로드하고, 루트 AWS IoT Greengrass 로 다시 시작하는 롤백 스크립트입니다.
-
롤백 스크립트를 루트로 실행하는 시스템화된 원샷 서비스입니다. 원샷 서비스는 수명이 긴 데몬으로 실행되는 대신 단일 작업을 실행한 다음 종료합니다.
-
와 같은 특정 파일 경로를 모니터링하는 시스템 경로 단위입니다
/greengrass/v2/rollback/.rollback-trigger. 파일이 나타나면 경로 단위가 자동으로 원샷 롤백 서비스를 시작합니다.
이 메커니즘을 사용하면 트리거 파일을 생성하는 간단한 AWS IoT Greengrass 구성 요소를 배포하여 디바이스를 롤백할 수 있습니다. 시스템 경로 단위는 파일을 감지하고, 롤백 서비스를 루트로 실행하고, 원래 루트 구성 AWS IoT Greengrass 으로 복원합니다.
사용 AWS Systems Manager
Systems Manager를 사용하여 디바이스를 관리하는 경우 단일 디바이스 마이그레이션 단계를 자동화하는 SSM 문서를 생성할 수 있습니다. SSM은 독립적으로 실행되므로 디바이스를 재부팅하지 않고도 AWS IoT Greengrass 서비스를 직접 중지했다가 다시 시작할 AWS IoT Greengrass수 있습니다.
SSM 문서는 다음 요구 사항을 충족해야 합니다.
-
현재 서비스 구성 AWS IoT Greengrass 및 파일 소유권 구조를 중지하고 백업합니다.
-
루트가 아닌 사용자 및 그룹을 생성합니다.
-
AWS IoT Greengrass 디렉터리의 소유권을 루트가 아닌 사용자로 변경합니다.
-
systemd 드롭인 재정의 파일을 생성합니다.
-
시스템 데몬을 다시 로드하고 시작합니다 AWS IoT Greengrass.
-
루트가 아닌 사용자로이 성공적으로 AWS IoT Greengrass 시작되었는지 확인합니다.
플릿 전체에서 마이그레이션을 실행하려면 Systems Manager Run Command를 사용하여 태그 또는 리소스 그룹을 사용하여 디바이스에 대해 SSM 문서를 실행합니다. Systems Manager 콘솔에서 명령 실행 상태를 모니터링할 수 있습니다. 그러면 오류를 포함하여 각 대상 디바이스의 결과가 표시됩니다.
롤백하려면 별도의 SSM 문서를 생성하여 중지 AWS IoT Greengrass하고, 드롭인 재정의를 제거하고, 원래 파일 소유권을 복원하고, 시스템 데몬을 다시 로드하고, 루트 AWS IoT Greengrass 로 다시 시작합니다. 롤백해야 하는 디바이스에 대해이 문서를 실행합니다.
관리형 노드에서 명령을 실행하는 방법에 대한 자세한 내용은 Systems Manager Run Command를 사용하여 명령 실행을 참조하세요.