모듈에 디바이스의 로컬 스토리지에 대한 액세스 권한 부여

적용 대상:IoT Edge 1.5 확인 표시 IoT Edge 1.5 IoT Edge 1.4 확인 표시 IoT Edge 1.4

Important

IoT Edge 1.5 LTS 및 IoT Edge 1.4 LTS는 지원되는 릴리스입니다. IoT Edge 1.4 LTS는 2024년 11월 12일에 수명이 종료됩니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.

IoT Edge 모듈은 특히 오프라인으로 작동할 때 개선된 안정성을 위해 호스트 IoT Edge 디바이스 자체의 스토리지를 사용할 수 있습니다.

영구 스토리지를 사용하도록 시스템 모듈 구성

기본적으로 IoT Edge 시스템 모듈, IoT Edge 에이전트 및 IoT Edge 허브는 해당 컨테이너 인스턴스의 임시 파일 시스템에 상태를 저장합니다. 모듈 이미지 버전 또는 createOptions가 업데이트되는 경우와 같이 컨테이너 인스턴스가 재활용되면 이 상태가 손실됩니다.

프로덕션 시나리오의 경우 호스트 파일 시스템의 영구 스토리지 위치를 사용하여 시스템 모듈 상태를 저장합니다. 이렇게 하면 솔루션 견고성과 클라우드 메시지 배달 보장이 개선됩니다.

영구 스토리지를 사용하도록 시스템 모듈을 설정하려면:

  1. IoT Edge 허브와 IoT Edge 에이전트 모두에서 모듈의 디렉터리를 가리키는 storageFolder라는 환경 변수를 추가합니다.

  2. IoT Edge 허브와 IoT Edge 에이전트 모두에 대해 호스트 머신의 로컬 디렉터리를 모듈의 디렉터리에 연결하는 바인딩을 추가합니다. 예를 들면 다음과 같습니다.

    로컬 스토리지에 대한 만들기 옵션 및 환경 변수를 추가하는 방법을 보여 주는 스크린샷.

    <HostStoragePath><ModuleStoragePath>를 호스트 및 모듈 스토리지 경로로 바꿉니다. 두 값 모두 절대 경로여야 하며 <HostStoragePath>가 존재해야 합니다.

배포 매니페스트에서 로컬 스토리지를 직접 구성할 수도 있습니다. 예를 들어, 다음 스토리지 경로를 매핑하려는 경우:

모듈 호스트 스토리지 경로 모듈 스토리지 경로
edgeAgent /srv/edgeAgent /tmp/edgeAgent
edgeHub /srv/edgeHub /tmp/edgeHub

배포 매니페스트는 다음과 유사합니다.

"systemModules": {
    "edgeAgent": {
        "env": {
            "StorageFolder": {
                "value": "/tmp/edgeAgent"
            }
        },
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-agent:1.5",
            "createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeAgent:/tmp/edgeAgent\"]}}"
        },
        "type": "docker"
    },
    "edgeHub": {
        "env": {
            "StorageFolder": {
                "value": "/tmp/edgeHub"
            }
        },
        "restartPolicy": "always",
        "settings": {
            "image": "mcr.microsoft.com/azureiotedge-hub:1.5",
            "createOptions": "{\"HostConfig\":{\"Binds\":[\"/srv/edgeHub:/tmp/edgeHub\"],\"PortBindings\":{\"443/tcp\":[{\"HostPort\":\"443\"}],\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}]}}}"
        },
        "status": "running",
        "type": "docker"
    }
}

참고 항목

스냅 설치를 사용하는 경우 스냅에 액세스할 수 있는 호스트 스토리지 경로를 선택했는지 확인합니다. 예들 들어 $HOME/snap/azure-iot-edge/current/modules/입니다.

자동 호스트 시스템 권한 관리

버전 1.4 이상에서는 StorageFolder를 지원하는 호스트 스토리지에 대한 소유권 또는 권한을 수동으로 설정할 필요가 없습니다. 권한 및 소유권은 시작하는 동안 시스템 모듈에 의해 자동으로 관리됩니다.

참고 항목

호스트 바인딩 스토리지의 자동 권한 관리는 시스템 모듈, IoT Edge 에이전트 및 Edge 허브에만 적용됩니다. 사용자 지정 모듈의 경우 사용자 지정 모듈 컨테이너가 root 사용자로 실행되지 않는 경우 결합된 호스트 스토리지의 권한 및 소유권을 수동으로 관리해야 합니다.

사용자 지정 모듈이 호스트 파일 컴퓨터의 영구 스토리지에 액세스해야 하는 경우 모듈의 만들기 옵션을 사용하여 모듈 컨테이너의 스토리지 폴더를 호스트 컴퓨터의 폴더에 바인딩합니다. 예시:

{
  "HostConfig": {
    "Mounts": [
      {
        "Target": "<ModuleStoragePath>",
        "Source": "<HostStoragePath>",
        "Type": "bind",
        "ReadOnly": false
      }
    ]
  }
}

<HostStoragePath><ModuleStoragePath>를 호스트 및 모듈 스토리지 경로로 바꿉니다. 두 값 모두 절대 경로여야 합니다. 옵션에 대한 자세한 내용은 Docker 엔진 탑재 사양을 참조하세요.

호스트 시스템 권한

모듈에서 사용 중인 사용자 프로필에 호스트 시스템 디렉터리에 대한 필수 읽기, 쓰기 및 실행 권한이 있는지 확인합니다. 기본적으로 컨테이너는 필요한 권한이 있는 root 사용자로 실행됩니다. 그러나 모듈의 Dockerfile은 호스트 스토리지 권한을 수동으로 구성해야 하는 경우 루트가 아닌 사용자의 사용을 지정할 수 있습니다.

chown을 사용하여 디렉터리 소유자를 변경한 다음 chmod를 사용하여 권한을 변경하는 등 Linux 시스템에서 디렉터리 권한을 관리하는 여러 가지 방법이 있습니다. 예를 들어, 루트가 아닌 사용자 ID 1000으로 실행 중인 모듈에 대한 호스트 스토리지 액세스를 허용하려면 다음 명령을 사용합니다.

sudo chown 1000 <HostStoragePath>
sudo chmod 700 <HostStoragePath>

모듈 스토리지의 암호화된 데이터

모듈이 데이터를 암호화하기 위해 IoT Edge 디먼의 워크로드 API를 호출하면 모듈 ID 및 모듈의 생성 ID를 사용하여 암호화 키가 파생됩니다. 생성 ID는 배포에서 모듈이 제거된 다음 나중에 모듈 ID가 동일한 다른 모듈이 동일한 디바이스에 배포되는 경우 비밀을 보호하는 데 사용됩니다. Azure CLI 명령 az iot hub module-identity show를 사용하여 모듈의 생성 ID를 확인할 수 있습니다.

여러 세대에 걸친 모듈 간에 파일을 공유하려면 비밀이 포함되지 않아야 합니다. 포함된 경우에는 암호를 해독하지 못합니다.

다음 단계

모듈에서 호스트 스토리지에 액세스하는 추가적인 예제는 IoT Edge에서 Azure Blob Storage를 사용하여 에지에 데이터 저장을 참조하세요.