Windows에서 X.509 인증서를 사용하여 대규모로 IoT Edge 디바이스 만들기 및 프로비전

적용 대상:예 아이콘 IoT Edge 1.1

중요

IoT Edge 1.1 지원 종료일은 2022년 12월 13일이었습니다. 이 제품, 서비스, 기술 또는 API가 지원되는 방법에 대한 정보는 Microsoft 제품 수명 주기를 확인하세요. 최신 버전의 IoT Edge 업데이트하는 방법에 대한 자세한 내용은 IoT Edge 업데이트를 참조하세요.

이 문서에서는 X.509 인증서를 사용하여 하나 이상의 Windows IoT Edge 디바이스를 자동 프로비저닝하기 위한 엔드투엔드 지침을 제공합니다. Azure IoT Hub DPS(Device Provisioning Service)를 사용하여 Azure IoT Edge 디바이스를 자동으로 프로비전할 수 있습니다. 자동 프로비저닝 프로세스에 익숙하지 않은 경우 계속하기 전에 프로비전 개요를 검토하세요.

참고

Windows 컨테이너를 사용하는 Azure IoT Edge는 Azure IoT Edge 버전 1.2부터 지원되지 않습니다.

Window 디바이스에서 IoT Edge를 실행하는 새로운 방법을 사용하려면 Azure IoT Edge for Linux on Windows를 참조하세요.

Azure IoT Edge for Linux on Windows를 사용하려는 경우 해당 방법 가이드의 단계를 수행할 수 있습니다.

작업은 다음과 같습니다.

  1. 인증서 및 키를 생성합니다.
  2. 단일 디바이스에 대한 개별 등록 또는 디바이스 세트에 대한 그룹 등록을 만듭니다.
  3. IoT Edge 런타임을 설치하고 IoT Hub를 사용하여 디바이스를 등록합니다.

X.509 인증서를 증명 메커니즘으로 사용하면 프로덕션의 크기를 조정하고 디바이스 프로비전을 간소화할 수 있습니다. 일반적으로 X.509 인증서는 신뢰할 수 있는 인증서 체인에 정렬됩니다. 자체 서명되었거나 신뢰할 수 있는 루트 인증서부터 시작하여, 체인에 존재하는 각 인증서는 그다음으로 낮은 인증서에 서명합니다. 이 패턴은 루트 인증서에서 각 중간 인증서를 통해 디바이스에 설치된 최종 다운스트림 디바이스 인증서까지 위임된 신뢰 체인을 만듭니다.

사전 요구 사항

클라우드 리소스

  • 활성 IoT 허브
  • Azure의 IoT Hub Device Provisioning Service의 새 인스턴스로 IoT 허브에 연결되어 있습니다.

디바이스 요구 사항

IoT Edge 디바이스가 될 수 있는 실제 또는 가상 Windows 디바이스입니다.

디바이스 ID 인증서 생성

디바이스 ID 인증서는 신뢰의 인증서 체인을 통해 상위 X.509 CA(인증 기관) 인증서에 연결하는 다운스트림 디바이스 인증서입니다. 디바이스 ID 인증서에는 디바이스를 IoT 허브에 포함하려는 디바이스 ID로 설정된 일반 이름(CN)이 있어야 합니다.

디바이스 ID 인증서는 IoT Edge 디바이스를 프로비저닝하고 Azure IoT Hub 디바이스를 인증하는 데만 사용됩니다. IoT Edge 디바이스가 확인을 위해 모듈 또는 다운스트림 디바이스에 제공하는 CA 인증서와 달리 인증서에 서명하지 않습니다. 자세한 내용은 Azure IoT Edge 인증서 사용 현황 세부 정보를 참조하세요.

디바이스 ID 인증서를 만든 후에는 2개의 파일이 있어야 합니다. 이는 인증서의 퍼블릭 부분을 포함하는 .cer 또는 .pem 파일 및 인증서의 프라이빗 키를 포함하는 .cer 또는 .pem 파일입니다. DPS에서 그룹 등록을 사용하려면 동일한 인증서 신뢰 체인에 중간 또는 루트 CA 인증서의 퍼블릭 부분도 있어야 합니다.

X.509를 사용하여 자동 프로비저닝을 설정하려면 다음 파일이 필요합니다.

  • 디바이스 ID 인증서 및 해당 인증서의 프라이빗 키 인증서. 개별 등록을 만들면 디바이스 ID 인증서가 DPS에 업로드됩니다. 프라이빗 키가 IoT Edge 런타임에 전달됩니다.
  • 최소한 디바이스 ID와 중간 인증서를 포함해야 하는 전체 체인 인증서. 전체 체인 인증서는 IoT Edge 런타임에 전달됩니다.
  • 인증서 신뢰 체인의 중간 또는 루트 CA 인증서. 이 인증서는 그룹 등록을 만들면 DPS에 업로드됩니다.

참고

현재 libiothsm의 제한으로 인해 2038년 1월 1일 이후에 만료되는 인증서는 사용할 수 없습니다.

테스트 인증서 사용(선택 사항)

새 ID 인증서를 만드는 데 사용할 수 있는 인증 기관이 없지만 이 시나리오를 사용해 보려는 경우, Azure IoT Edge Git 리포지토리에 테스트 인증서 생성에 사용할 수 있는 스크립트가 포함되어 있습니다. 해당 인증서는 개발 테스트 전용으로 설계되었으며 프로덕션 단계에서 사용해서는 안 됩니다.

테스트 인증서를 만들려면 데모 인증서를 만들어 IoT Edge 디바이스 기능 테스트의 단계를 따릅니다. 인증서 생성 스크립트를 설정하고 루트 CA 인증서를 만들기 위한 두 개의 필수 섹션을 완료합니다. 그런 다음 단계를 따라 디바이스 ID 인증서를 만듭니다. 단계를 모두 완료하면 다음 인증서 체인 및 키 쌍이 있어야 합니다.

  • <WRKDIR>\certs\iot-edge-device-identity-<name>-full-chain.cert.pem
  • <WRKDIR>\private\iot-edge-device-identity-<name>.key.pem

IoT Edge 디바이스에는 해당 인증서가 모두 필요합니다. DPS에서 개별 등록을 사용하려면 .cert.pem 파일을 업로드합니다. DPS에서 그룹 등록을 사용하려면 업로드하려는 동일한 인증서 신뢰 체인에 중간 또는 루트 CA 인증서도 있어야 합니다. 데모 인증서를 사용한다면 그룹 등록에 <WRKDIR>\certs\azure-iot-test-only.root.ca.cert.pem 인증서를 사용합니다.

DPS 등록 만들기

하나 이상의 IoT Edge 디바이스에 대해 DPS에서 등록을 만들려면 생성된 인증서와 키를 사용합니다.

단일 IoT Edge 디바이스를 프로비전하려는 경우 개별 등록을 만듭니다. 여러 디바이스를 프로비전해야 하는 경우 DPS 그룹 등록 만들기 단계를 따릅니다.

DPS에서 등록을 만들 때 초기 디바이스 쌍 상태를 선언할 기회가 있습니다. 디바이스 쌍에서 지역, 환경, 위치 또는 디바이스 유형 같은 솔루션에 필요한 모든 메트릭으로 디바이스 그룹에 태그를 설정할 수 있습니다. 이러한 태그는 자동 배포를 만드는 데 사용됩니다.

Device Provisioning Service의 등록에 대한 자세한 내용은 디바이스 등록을 관리하는 방법 항목을 참조하세요.

DPS 개별 등록 만들기

개별 등록은 디바이스의 ID 인증서의 퍼블릭 부분을 가져와 디바이스의 인증서와 일치시킵니다.

이 문서의 단계는 Azure Portal에 대한 것이지만 Azure CLI를 사용하여 개별 등록을 만들도록 할 수도 있습니다. 자세한 내용은 az iot dps enrollment를 참조하세요. CLI 명령의 일부로 에지 사용 플래그를 사용하여 IoT Edge 장치에 대한 등록을 지정합니다.

  1. Azure Portal에서 IoT Hub Device Provisioning Service 인스턴스로 이동합니다.

  2. 설정에서 등록 관리를 선택합니다.

  3. 등록을 구성하려면 개별 등록 추가를 선택한 다음, 다음 단계를 완료합니다.

    • 메커니즘: X.509를 선택합니다.

    • 기본 인증서 .pem 또는 .cer 파일: 디바이스 ID 인증서에서 퍼블릭 파일을 업로드합니다. 스크립트를 사용하여 테스트 인증서를 생성한 경우 다음 파일을 선택합니다.

      <WRKDIR>\certs\iot-edge-device-identity-<name>.cert.pem

    • IoT Hub 디바이스 ID: 원하는 경우 디바이스에 대한 ID를 제공합니다. 디바이스 ID를 사용하여 모듈 배포에 대한 개별 디바이스를 대상으로 할 수 있습니다. 디바이스 ID를 제공하지 않으면 X.509 인증서의 일반 이름(CN)이 사용됩니다.

    • IoT Edge 디바이스: 등록이 IoT Edge 디바이스에 대한 것이라고 선언하려면 True를 선택합니다.

    • 이 디바이스를 할당할 수 있는 IoT 허브 선택: 디바이스를 연결하려는 연결된 IoT 허브를 선택합니다. 여러 허브를 선택할 수 있으며, 선택한 할당 정책에 따라 허브 중 하나에 디바이스가 할당됩니다.

    • 초기 디바이스 쌍 상태: 원하는 경우 디바이스 쌍에 태그 값을 추가합니다. 태그를 사용하여 자동 배포에 대한 디바이스 그룹을 대상으로 할 수 있습니다. 예를 들면 다음과 같습니다.

      {
          "tags": {
             "environment": "test"
          },
          "properties": {
             "desired": {}
          }
      }
      
  4. 저장을 선택합니다.

등록 관리에서 방금 만든 등록에 대한 등록 ID를 볼 수 있습니다. 디바이스를 프로비전할 때 사용할 수 있으므로 기록해 두세요.

이제 이 디바이스에 대한 등록이 존재하므로 IoT Edge 런타임은 설치 중에 디바이스를 자동으로 프로비저닝할 수 있습니다.

IoT Edge 설치

이 섹션에서는 IoT Edge용 Windows VM 또는 물리적 디바이스를 준비합니다. 그런 다음, IoT Edge를 설치합니다.

Azure IoT Edge는 OCI 호환 컨테이너 런타임을 사용합니다. Moby 기반 엔진인 Moby는 설치 스크립트에 포함되어 있으므로 엔진을 설치하기 위한 추가 단계가 없습니다.

IoT Edge 런타임을 설치하려면 다음을 수행합니다.

  1. PowerShell을 관리자 권한으로 실행합니다.

    PowerShell(x86)이 아닌 AMD64 PowerShell 세션을 사용합니다. 사용 중인 세션 형식을 잘 모르는 경우 다음 명령을 실행합니다.

    (Get-Process -Id $PID).StartInfo.EnvironmentVariables["PROCESSOR_ARCHITECTURE"]
    
  2. 다음 작업을 수행하는 Deploy-IoTEdge 명령을 실행합니다.

    • Windows 머신이 지원되는 버전에 해당하는지 확인
    • 컨테이너 기능 설정
    • moby 엔진과 IoT Edge 런타임 다운로드
    . {Invoke-WebRequest -useb https://aka.ms/iotedge-win} | Invoke-Expression; `
    Deploy-IoTEdge
    
  3. 메시지가 표시되면 디바이스를 다시 시작합니다.

디바이스에 IoT Edge를 설치하는 경우 추가 매개 변수를 사용하여 다음과 같이 프로세스를 수정할 수 있습니다.

  • 트래픽이 프록시 서버를 통과하도록 설정
  • 오프라인 설치 시 설치 프로그램이 로컬 디렉터리 가리키기

추가 매개 변수에 대한 자세한 내용은 Windows 컨테이너를 포함한 IoT Edge용 PowerShell 스크립트를 참조하세요.

클라우드 ID를 사용한 디바이스 프로비저닝

런타임이 디바이스에 설치되면 디바이스를 Device Provisioning Service 및 IoT Hub에 연결하는 데 사용되는 정보로 구성합니다.

다음 정보를 준비합니다.

  • DPS ID 범위 값. Azure Portal에 있는 DPS 인스턴스의 개요 페이지에서 이 값을 검색할 수 있습니다.
  • 디바이스에 있는 디바이스 ID 인증서 체인 파일.
  • 디바이스에 있는 디바이스 ID 키 파일.
  1. 관리자 모드에서 PowerShell 창을 엽니다. PowerShell(x86)이 아닌 IoT Edge를 설치하는 경우 PowerShell의 AMD64 세션을 사용해야 합니다.

  2. Initialize IoTEdge 명령은 사용자의 머신에서 IoT Edge 런타임을 구성합니다. 이 명령은 기본적으로 Windows 컨테이너를 사용하여 수동으로 프로비저닝하므로 X.509 인증서 인증을 사용하여 자동으로 프로비저닝하려면 -DpsX509 플래그를 사용합니다.

    scope_id, identity cert chain pathidentity key path에 대한 자리 표시자 값을 DPS 인스턴스의 적절한 값 및 디바이스의 파일 경로로 바꿉니다.

    디바이스 ID를 ID 인증서의 CN 이름 이외의 이름으로 설정하려면 -RegistrationId paste_registration_id_here 매개 변수를 추가합니다.

    . {Invoke-WebRequest -useb https://aka.ms/iotedge-win} | Invoke-Expression; `
    Initialize-IoTEdge -DpsX509 -ScopeId paste_scope_id_here -X509IdentityCertificate paste_identity_cert_chain_path_here -X509IdentityPrivateKey paste_identity_key_path_here
    

    구성 파일은 인증서 및 키 정보를 파일 URI로 저장합니다. 그러나 Initialize-IoTEdge 명령이 사용자 대신 이 형식 지정 단계를 처리하므로 디바이스의 인증서 및 키 파일에 대한 절대 경로를 제공할 수 있습니다.

성공적인 설치 확인

런타임이 성공적으로 시작한 경우 IoT Hub로 이동하고 디바이스에 IoT Edge 모듈 배포를 시작할 수 있습니다.

Device Provisioning Service에서 만든 개별 등록이 사용되었는지 확인할 수 있습니다. Azure Portal에서 Device Provisioning Service 인스턴스로 이동합니다. 만든 개별 등록의 등록 세부 정보를 엽니다. 등록 상태가 할당됨이며 디바이스 ID가 나열된 것을 확인할 수 있습니다.

디바이스에서 다음 명령을 사용하여 IoT Edge가 성공적으로 설치되고 시작되는지 확인합니다.

IoT Edge 서비스의 상태를 확인합니다.

Get-Service iotedge

서비스 로그를 검사합니다.

. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; Get-IoTEdgeLog

실행 중인 모듈을 나열합니다.

iotedge list

다음 단계

Device Provisioning Service 등록 프로세스를 사용하면 새 디바이스를 프로비전할 때 디바이스 ID 및 디바이스 쌍 태그를 동시에 설정할 수 있습니다. 자동 디바이스 관리를 사용하여 개별 디바이스 또는 디바이스 그룹을 대상으로 하려면 이러한 값을 사용할 수 있습니다. Azure CLI를 사용하거나 Azure Portal을 사용하여 대규모로 IoT Edge 모듈을 배포하고 모니터링하는 방법을 알아봅니다.