빠른 시작: 시뮬레이션된 TPM 디바이스 프로비저닝

이 빠른 시작에서는 Windows 머신에서 시뮬레이션된 디바이스를 만듭니다. 시뮬레이션된 디바이스는 인증에 TPM(신뢰할 수 있는 플랫폼 모듈) 증명 메커니즘을 사용하도록 구성됩니다. 장치를 구성한 후 Azure IoT Hub Device Provisioning Service를 사용하여 IoT hub에 프로비전합니다. 샘플 코드를 사용하여 Device Provisioning Service 인스턴스에 디바이스를 등록할 수 있습니다.

프로비저닝 프로세스에 익숙하지 않은 경우 프로비저닝 개요를 검토하세요. 계속하기 전에 Azure Portal에서 IoT Hub Device Provisioning Service 설정의 단계를 완료해야 합니다.

Azure IoT Device Provisioning 서비스는 다음과 같은 두 가지 등록을 지원합니다.

  • 등록 그룹은 여러 관련 디바이스를 등록하는 데 사용됩니다.

  • 개별 등록은 단일 장치를 등록하는 데 사용됩니다.

이 문서에서는 개별 등록을 보여 줍니다.

TPM(신뢰할 수 있는 플랫폼 모듈) 증명은 Python SDK에서 지원되지 않습니다. Python을 사용하면 대칭 키 또는 X.509 인증서를 사용하여 디바이스를 프로비전할 수 있습니다.

필수 조건

다음 필수 구성 요소는 Windows 개발 환경을 위한 것입니다. Linux 또는 macOS의 경우 SDK 설명서에서 개발 환경 준비의 해당 섹션을 참조하세요.

  • Windows 기반 컴퓨터의 TPM 2.0 하드웨어 보안 모듈.

  • Windows 기반 머신에 .NET Core SDK 6.0 이상이 설치되어 있는지 확인합니다. 다음 명령을 사용하여 버전을 확인할 수 있습니다.

    dotnet --info
    
  • 최신 버전의 Git을 설치합니다. Git이 명령 창에 액세스할 수 있는 환경 변수에 추가되었는지 확인합니다. 설치할 git 도구의 최신 버전은 Software Freedom Conservancy의 Git 클라이언트 도구를 참조하세요. 여기에는 로컬 Git 리포지토리와 상호 작용하는 데 사용할 수 있는 명령줄 앱인 Git Bash가 포함됩니다.

개발 환경 준비

이 섹션에서는 Azure IoT C SDKTPM 디바이스 시뮬레이터 샘플을 빌드하는 데 사용되는 개발 환경을 준비합니다.

  1. 최신 CMake 빌드 시스템을 다운로드합니다.

    Important

    CMake 설치를 시작하기 전에 Visual Studio 필수 구성 요소(Visual Studio 및 ‘C++를 사용한 데스크톱 개발’ 워크로드)가 머신에 설치되어 있는지 확인합니다. 필수 구성 요소가 설치되고 다운로드를 확인하면 CMake 빌드 시스템을 설치합니다. 이전 버전의 CMake 빌드 시스템은 이 문서에 사용된 솔루션 파일을 생성하지 못합니다. 최신 버전의 CMake를 사용해야 합니다.

  2. 웹 브라우저를 열고 Azure IoT C SDK 릴리스 페이지로 이동합니다.

  3. 페이지 맨 위에서 태그 탭을 선택합니다.

  4. Azure IoT C SDK의 최신 릴리스에 대한 태그 이름을 복사합니다.

  5. 명령 프롬프트 또는 Git Bash 셸을 엽니다. 다음 명령을 실행하여 C용 Azure IoT 디바이스 SDK GitHub 리포지토리의 최신 릴리스를 복제합니다. <release-tag>를 이전 단계에서 복사한 태그로 바꿉니다(예: lts_01_2023).

    git clone -b <release-tag> https://github.com/Azure/azure-iot-sdk-c.git
    cd azure-iot-sdk-c
    git submodule update --init
    

    이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다.

  6. 작업이 완료되면 azure-iot-sdk-c 디렉터리에서 다음 명령을 실행합니다.

    mkdir cmake
    cd cmake
    
  1. Git CMD 또는 Git Bash 명령줄 환경을 엽니다.

  2. 다음 명령을 사용하여 C# GitHub 리포지토리용 Azure IoT SDK를 복제합니다.

    git clone https://github.com/Azure/azure-iot-sdk-csharp.git
    
  1. Git CMD 또는 Git Bash 명령줄 환경을 엽니다.

  2. 다음 명령을 사용하여 azure-utpm-c GitHub 리포지토리를 복제합니다.

    git clone https://github.com/Azure/azure-utpm-c.git --recursive
    
  1. Git CMD 또는 Git Bash 명령줄 환경을 엽니다.

  2. 다음 명령을 사용하여 Java GitHub 리포지토리를 복제합니다.

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    

TPM 디바이스 시뮬레이터를 빌드하고 실행합니다.

이 섹션에서는 TPM 시뮬레이터를 빌드하고 실행합니다. 이 시뮬레이터는 포트 2321 및 2322에서 소켓을 수신 대기합니다. 명령 창을 닫으면 안 됩니다. 이 빠른 시작 가이드가 끝날 때까지 이 시뮬레이터를 계속 실행해 두어야 합니다.

  1. 다음 명령을 실행하여 TPM 디바이스 시뮬레이터 샘플 코드가 포함된 Azure IoT C SDK를 빌드합니다. 시뮬레이션된 디바이스에 대한 Visual Studio 솔루션이 cmake 디렉터리에서 생성됩니다. 이 샘플에서는 SAS(공유 액세스 서명) 토큰 인증을 통해 TPM 증명 메커니즘을 제공합니다.

    cmake -Duse_prov_client:BOOL=ON -Duse_tpm_simulator:BOOL=ON ..
    

    cmake에서 C++ 컴파일러를 찾지 못하면 위의 명령을 실행하는 동안 빌드 오류가 발생할 수 있습니다. 이 경우에는 Visual Studio 명령 프롬프트에서 명령을 실행합니다.

  2. 빌드가 성공되면 마지막 몇 개의 출력 줄은 다음 출력과 유사하게 표시됩니다.

    $ cmake -Duse_prov_client:BOOL=ON ..
    -- Building for: Visual Studio 16 2019
    -- The C compiler identification is MSVC 19.23.28107.0
    -- The CXX compiler identification is MSVC 19.23.28107.0
    
    ...
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: C:/code/azure-iot-sdk-c/cmake
    
  3. 복제된 git 리포지토리의 루트 폴더로 이동합니다.

  4. 아래 표시된 경로를 사용하여 TPM 시뮬레이터를 실행합니다.

    cd ..
    .\provisioning_client\deps\utpm\tools\tpm_simulator\Simulator.exe
    

    시뮬레이터는 출력을 표시하지 않습니다. TPM 디바이스를 시뮬레이션하는 동안 계속 실행합니다.

  1. GitHub 루트 폴더로 이동합니다.

  2. 시뮬레이션된 디바이스의 HSM이 되도록 TPM 시뮬레이터를 실행합니다.

    .\azure-utpm-c\tools\tpm_simulator\Simulator.exe
    
  3. registerdevice라는 빈 폴더를 새로 만듭니다. registerdevice 폴더의 명령 프롬프트에서 다음 명령을 사용하여 package.json 파일을 만듭니다. (npm에서 묻는 모든 질문에 답변하였거나 적절하다면 기본값을 수락해야 합니다)

    npm init
    
  4. 선도적인 다음 패키지를 설치합니다.

    npm install node-gyp -g
    npm install ffi-napi -g
    

    참고 항목

    위 패키지를 설치하는 데 알려진 몇 가지 문제가 있습니다. 이러한 문제를 해결하려면 관리자 권한으로 실행 모드에서 명령 프롬프트를 사용하여 npm install --global --production windows-build-tools를 실행하고, 경로를 설치된 버전으로 바꾼 후에 SET VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140을 실행한 다음, 위의 설치 명령을 다시 실행합니다.

  5. registerdevice 폴더의 명령 프롬프트에서 다음 명령을 실행하여 필요한 모든 패키지를 설치할 수 있습니다.

    npm install --save azure-iot-device azure-iot-device-mqtt azure-iot-security-tpm azure-iot-provisioning-device-http azure-iot-provisioning-device
    

    해당 명령은 다음 패키지를 설치합니다.

    • TPM에서 작동하는 보안 클라이언트: azure-iot-security-tpm

    • Device Provisioning Service에 연결하는 디바이스에 대한 전송: azure-iot-provisioning-device-http 또는 azure-iot-provisioning-device-amqp

    • 전송 및 보안 클라이언트를 사용하는 클라이언트: azure-iot-provisioning-device

    • 디바이스 클라이언트: azure-iot-device

    • 전송: azure-iot-device-amqp, azure-iot-device-mqtt, 또는 azure-iot-device-http 중 하나

    • 이미 설치한 보안 클라이언트: azure-iot-security-tpm

      참고 항목

      이 빠른 시작의 샘플은 azure-iot-provisioning-device-httpazure-iot-device-mqtt 전송을 사용합니다.

  6. 원하는 텍스트 편집기를 엽니다.

  7. registerdevice 폴더에 새 ExtractDevice.js 파일을 만듭니다.

  8. ExtractDevice.js 파일의 시작 부분에 다음 require 문을 추가합니다.

    
    'use strict';
    
    var tpmSecurity = require('azure-iot-security-tpm');
    var tssJs = require("tss.js");
    
    var myTpm = new tpmSecurity.TpmSecurityClient(undefined, new tssJs.Tpm(true));
    
  9. 메서드를 구현하는 다음 함수를 추가합니다.

    
    myTpm.getEndorsementKey(function(err, endorsementKey) {
      if (err) {
        console.log('The error returned from get key is: ' + err);
      } else {
        console.log('the endorsement key is: ' + endorsementKey.toString('base64'));
        myTpm.getRegistrationId((getRegistrationIdError, registrationId) => {
          if (getRegistrationIdError) {
            console.log('The error returned from get registration id is: ' + getRegistrationIdError);
          } else {
            console.log('The Registration Id is: ' + registrationId);
            process.exit();
          }
        });
      }
    });
    
  10. ExtractDevice.js 파일을 저장하고 닫습니다.

    node ExtractDevice.js
    
  11. 예제를 실행합니다.

  12. 출력 창에 디바이스 등록에 필요한 인증 키등록 ID가 표시됩니다. 이러한 값을 복사합니다.

  1. 시뮬레이션된 디바이스의 HSM이 되도록 TPM 시뮬레이터를 실행합니다.

  2. 액세스 허용을 선택합니다. 이 시뮬레이터는 포트 2321 및 2322에서 소켓을 수신 대기합니다. 이 명령 창을 닫지 마세요. 이 빠른 시작 가이드가 끝날 때까지 이 시뮬레이터를 계속 실행하고 있어야 합니다.

    .\azure-iot-sdk-java\provisioning\provisioning-tools\tpm-simulator\Simulator.exe
    

    TPM Simulator

  3. 두 번째 명령 프롬프트를 엽니다.

  4. 두 번째 명령 프롬프트에서 루트 폴더로 이동하고 샘플 종속성을 빌드합니다.

    cd azure-iot-sdk-java
    mvn install -DskipTests=true
    
  5. 샘플 폴더로 이동합니다.

    cd provisioning/provisioning-samples/provisioning-tpm-sample
    

TPM 디바이스의 암호화 키 읽기

이 섹션에서는 포트 2321 및 2322에서 실행되어 수신 대기 중인 TPM 시뮬레이터의 인증 키 및 등록 ID를 읽을 샘플을 빌드하고 실행합니다. 이러한 값은 Device Provisioning Service 인스턴스를 사용하는 디바이스 등록에 사용됩니다.

  1. Visual Studio를 시작합니다.

  2. cmake 폴더에 생성된 솔루션(azure_iot_sdks.sln)을 엽니다.

  3. Visual Studio 메뉴에서 빌드>빌드 솔루션을 선택하여 솔루션의 모든 프로젝트를 빌드합니다.

  4. Visual Studio의 솔루션 탐색기 창에서 Provision_Tools 폴더로 이동합니다. tpm_device_provision 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 시작 프로젝트로 설정을 선택합니다.

  5. Visual Studio 메뉴에서 디버그>디버깅하지 않고 시작을 선택하여 솔루션을 실행합니다. 앱은 등록 ID인증 키를 읽고 표시합니다. 이러한 값을 적어 두거나 복사합니다. 해당 값은 디바이스 등록을 위해 다음 섹션에서 사용됩니다.

  1. Azure Portal에 로그인하여 왼쪽 메뉴에서 모든 리소스 단추를 선택하고 Device Provisioning Service를 엽니다. ID 범위Provisioning Service 글로벌 엔드포인트를 확인합니다.

    Device Provisioning Service information

  2. 앞에서 설명한 대로 ID 범위Provisioning Service 글로벌 엔드포인트를 포함하도록 src/main/java/samples/com/microsoft/azure/sdk/iot/ProvisioningTpmSample.java를 편집합니다.

    private static final String idScope = "[Your ID scope here]";
    private static final String globalEndpoint = "[Your Provisioning Service Global Endpoint here]";
    private static final ProvisioningDeviceClientTransportProtocol PROVISIONING_DEVICE_CLIENT_TRANSPORT_PROTOCOL = ProvisioningDeviceClientTransportProtocol.HTTPS;
    
  3. 파일을 저장합니다.

  4. 다음 명령을 사용하여 프로젝트를 빌드하고 대상 폴더로 이동한 다음, 생성된 .jar 파일을 실행합니다({version}을(를) 사용자의 Java 버전으로 대체).

    mvn clean install
    cd target
    java -jar ./provisioning-tpm-sample-{version}-with-deps.jar
    
  5. 프로그램 실행이 시작되면 인증 키등록 ID가 나타납니다. 다음 섹션을 위해 이러한 값을 복사합니다. 프로그램을 계속 실행해야 합니다.

이 섹션에서는 TPM 2.0 하드웨어 보안 모듈에서 인증 키를 읽는 샘플을 빌드하고 실행합니다. 이러한 값은 Device Provisioning Service 인스턴스를 사용하는 디바이스 등록에 사용됩니다.

  1. 명령 프롬프트에서 디렉터리를 TPM 디바이스 프로비전 샘플에 대한 프로젝트 디렉터리로 변경합니다.

    cd '.\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\TpmSample\'
    
  2. 다음 명령을 입력하여 TPM 디바이스 프로비전 샘플을 빌드하고 실행합니다. 나중에 디바이스를 등록할 때 사용할 수 있도록 TPM 2.0 하드웨어 보안 모듈에서 반환된 인증 키를 복사합니다.

    dotnet run -- -e
    

디바이스 등록 항목 만들기

  1. Azure Portal에 로그인하고, Device Provisioning Service 인스턴스로 이동합니다.

  2. 탐색 메뉴의 설정 섹션에서 등록 관리를 선택합니다.

  3. 개별 등록 탭을 선택한 다음 개별 등록 추가를 선택합니다.

    Screenshot that shows the add individual enrollment option.

  4. 등록 추가 페이지의 등록 + 프로비전에서 다음 정보를 제공하여 등록 세부 정보를 구성합니다.

    필드 설명
    증명 증명 메커니즘으로 TPM(신뢰할 수 있는 플랫폼 모듈)을 선택합니다.
    TPM(신뢰할 수 있는 플랫폼 모듈) 설정 이 등록에 대한 디바이스를 확인하는 데 사용할 인증 키를 제공합니다. 디바이스의 TPM에서 인증 키를 검색할 수 있습니다.
    등록 ID 디바이스에 대한 고유한 등록 ID를 제공합니다. 디바이스의 TPM에서 등록 ID를 검색할 수 있습니다.
    프로비전 상태 이 등록을 사용하여 디바이스를 프로비전하려면 이 등록 사용하도록 설정 확인란을 선택합니다. 등록을 사용하지 않도록 설정하려면 이 상자를 선택 취소합니다. 이 설정은 나중에 변경할 수 있습니다.
    재프로비전 정책 DPS가 다시 프로비전을 요청하는 디바이스를 처리하는 방법을 반영하는 재프로비전 정책을 선택합니다. 자세한 내용은 다시 프로비전 정책을 참조하세요.
  5. 다음: IoT 허브를 선택합니다.

  6. 등록 추가 페이지의 IoT 허브 탭에서 다음 정보를 제공하여 등록이 디바이스를 프로비전할 수 있는 IoT 허브를 결정합니다.

    필드 설명
    대상 IoT 허브 연결된 IoT 허브 중 하나 이상을 선택하거나 IoT 허브에 새 링크를 추가합니다. DPS 인스턴스에 IoT 허브를 연결하는 방법에 대해 자세히 알아보려면 IoT 허브 연결 및 관리 방법을 참조하세요.
    할당 정책 둘 이상의 연결된 IoT 허브를 선택한 경우 디바이스를 다른 허브에 할당할 방법을 선택합니다. 할당 정책에 대한 자세한 내용은 할당 정책 사용 방법을 참조하세요.

    연결된 IoT 허브를 하나만 선택한 경우 동일 가중 배포 정책을 사용하는 것이 좋습니다.
  7. 다음: 디바이스 설정을 선택합니다

  8. 등록 추가 페이지의 디바이스 설정 탭에서 다음 정보를 제공하여 새로 프로비전된 디바이스를 구성하는 방법을 정의합니다.

    필드 설명
    디바이스 ID IoT Hub에서 프로비전된 디바이스에 할당될 디바이스 ID를 제공합니다. 디바이스 ID를 제공하지 않으면 등록 ID가 사용됩니다.
    IoT Edge 프로비전된 디바이스가 Azure IoT Edge를 실행할 경우 프로비전된 디바이스에서 IoT Edge 사용를 선택합니다. 이 등록이 IoT Edge 지원 디바이스가 아닌 경우 이 상자를 선택 취소합니다.
    디바이스 태그 이 텍스트 상자를 사용하여 프로비전된 디바이스의 디바이스 쌍에 적용할 태그를 제공합니다.
    원하는 속성 이 텍스트 상자를 사용하여 프로비전된 디바이스의 디바이스 쌍에 적용할 원하는 속성을 제공합니다.

    자세한 내용은 IoT Hub의 디바이스 쌍 이해 및 사용을 참조하세요.

  9. 완료되면 다음: 리뷰 + 만들기를 클릭합니다.

  10. 검토 + 만들기 탭에서 모든 값을 확인한 다음 만들기를 선택합니다.

이 빠른 시작의 C# TPM 샘플은 등록 ID를 제공하지 않습니다. 개별 등록에 대해 하나를 추가하라는 메시지가 표시되면 고유한 값을 제공합니다.

  1. Azure Portal에 로그인하고, Device Provisioning Service 인스턴스로 이동합니다.

  2. 탐색 메뉴의 설정 섹션에서 등록 관리를 선택합니다.

  3. 개별 등록 탭을 선택한 다음 개별 등록 추가를 선택합니다.

    Screenshot that shows the add individual enrollment option.

  4. 등록 추가 페이지의 등록 + 프로비전에서 다음 정보를 제공하여 등록 세부 정보를 구성합니다.

    필드 설명
    증명 증명 메커니즘으로 TPM(신뢰할 수 있는 플랫폼 모듈)을 선택합니다.
    TPM(신뢰할 수 있는 플랫폼 모듈) 설정 이 등록에 대한 디바이스를 확인하는 데 사용할 인증 키를 제공합니다. 디바이스의 TPM에서 인증 키를 검색할 수 있습니다.
    등록 ID 디바이스에 대한 고유한 등록 ID를 제공합니다. 디바이스의 TPM에서 등록 ID를 검색할 수 있습니다.
    프로비전 상태 이 등록을 사용하여 디바이스를 프로비전하려면 이 등록 사용하도록 설정 확인란을 선택합니다. 등록을 사용하지 않도록 설정하려면 이 상자를 선택 취소합니다. 이 설정은 나중에 변경할 수 있습니다.
    재프로비전 정책 DPS가 다시 프로비전을 요청하는 디바이스를 처리하는 방법을 반영하는 재프로비전 정책을 선택합니다. 자세한 내용은 다시 프로비전 정책을 참조하세요.
  5. 다음: IoT 허브를 선택합니다.

  6. 등록 추가 페이지의 IoT 허브 탭에서 다음 정보를 제공하여 등록이 디바이스를 프로비전할 수 있는 IoT 허브를 결정합니다.

    필드 설명
    대상 IoT 허브 연결된 IoT 허브 중 하나 이상을 선택하거나 IoT 허브에 새 링크를 추가합니다. DPS 인스턴스에 IoT 허브를 연결하는 방법에 대해 자세히 알아보려면 IoT 허브 연결 및 관리 방법을 참조하세요.
    할당 정책 둘 이상의 연결된 IoT 허브를 선택한 경우 디바이스를 다른 허브에 할당할 방법을 선택합니다. 할당 정책에 대한 자세한 내용은 할당 정책 사용 방법을 참조하세요.

    연결된 IoT 허브를 하나만 선택한 경우 동일 가중 배포 정책을 사용하는 것이 좋습니다.
  7. 다음: 디바이스 설정을 선택합니다

  8. 등록 추가 페이지의 디바이스 설정 탭에서 다음 정보를 제공하여 새로 프로비전된 디바이스를 구성하는 방법을 정의합니다.

    필드 설명
    디바이스 ID IoT Hub에서 프로비전된 디바이스에 할당될 디바이스 ID를 제공합니다. 디바이스 ID를 제공하지 않으면 등록 ID가 사용됩니다.
    IoT Edge 프로비전된 디바이스가 Azure IoT Edge를 실행할 경우 프로비전된 디바이스에서 IoT Edge 사용를 선택합니다. 이 등록이 IoT Edge 지원 디바이스가 아닌 경우 이 상자를 선택 취소합니다.
    디바이스 태그 이 텍스트 상자를 사용하여 프로비전된 디바이스의 디바이스 쌍에 적용할 태그를 제공합니다.
    원하는 속성 이 텍스트 상자를 사용하여 프로비전된 디바이스의 디바이스 쌍에 적용할 원하는 속성을 제공합니다.

    자세한 내용은 IoT Hub의 디바이스 쌍 이해 및 사용을 참조하세요.

  9. 완료되면 다음: 리뷰 + 만들기를 클릭합니다.

  10. 검토 + 만들기 탭에서 모든 값을 확인한 다음 만들기를 선택합니다.

디바이스 등록

이 섹션에서는 샘플 코드가 AMQP(고급 메시지 큐 프로토콜)를 사용하도록 구성하여 디바이스의 부팅 시퀀스를 Device Provisioning Service 인스턴스에 보냅니다. 이 부팅 시퀀스를 사용하면 디바이스가 Device Provisioning Service 인스턴스에 연결된 IoT Hub에 등록됩니다.

  1. Azure Portal에서 Device Provisioning Service의 개요 탭을 선택합니다.

  2. ID 범위 값을 복사합니다.

    Extract Device Provisioning Service endpoint information from the portal

  3. Visual Studio의 솔루션 탐색기 창에서 Provision_Samples 폴더로 이동합니다. prov_dev_client_sample이라는 샘플 프로젝트를 확장합니다. 원본 파일을 확장하고 prov_dev_client_sample.c를 엽니다.

  4. 아래에 표시된 대로 파일의 맨 위쪽 가까이에 있는 각 디바이스 프로토콜에 대한 #define 문을 찾습니다. SAMPLE_AMQP의 주석 처리를 제거했는지 확인합니다.

    현재 MQTT 프로토콜은 TPM 개별 등록에 지원되지 않습니다.

    //
    // The protocol you wish to use should be uncommented
    //
    //#define SAMPLE_MQTT
    //#define SAMPLE_MQTT_OVER_WEBSOCKETS
    #define SAMPLE_AMQP
    //#define SAMPLE_AMQP_OVER_WEBSOCKETS
    //#define SAMPLE_HTTP
    
  5. id_scope 상수를 찾고, 값을 앞에서 복사한 ID 범위 값으로 바꿉니다.

    static const char* id_scope = "0ne00002193";
    
  6. 동일한 파일에서 main() 함수에 대한 정의를 찾습니다. 아래와 같이 hsm_type 변수가 SECURE_DEVICE_TYPE_TPM로 설정되었는지 확인합니다.

    SECURE_DEVICE_TYPE hsm_type;
    hsm_type = SECURE_DEVICE_TYPE_TPM;
    //hsm_type = SECURE_DEVICE_TYPE_X509;
    //hsm_type = SECURE_DEVICE_TYPE_SYMMETRIC_KEY;
    
  7. prov_dev_client_sample 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 시작 프로젝트로 설정을 선택합니다.

  8. Visual Studio 메뉴에서 디버그>디버깅하지 않고 시작을 선택하여 솔루션을 실행합니다. 프로젝트를 다시 빌드하라는 프롬프트에서 를 선택하여 실행하기 전에 프로젝트를 다시 빌드합니다.

    다음 출력은 프로비전 디바이스 클라이언트 샘플을 성공적으로 부팅하고, IoT Hub 정보를 가져오기 위해 Device Provisioning Service 인스턴스에 연결하고, 등록하는 예제입니다.

    Provisioning API Version: 1.2.7
    
    Registering... Press enter key to interrupt.
    
    Provisioning Status: PROV_DEVICE_REG_STATUS_CONNECTED
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    Provisioning Status: PROV_DEVICE_REG_STATUS_ASSIGNING
    
    Registration Information received from service:
    test-docs-hub.azure-devices.net, deviceId: test-docs-cert-device
    
  1. Azure Portal에서 Device Provisioning Service의 개요 탭을 선택합니다.

  2. ID 범위 값을 복사합니다.

    Copy provisioning service Scope ID from the portal blade

  3. 명령 프롬프트에서 디렉터리를 TPM 디바이스 프로비전 샘플에 대한 프로젝트 디렉터리로 변경합니다.

     cd '.\azure-iot-sdk-csharp\provisioning\device\samples\how to guides\TpmSample\'
    
  4. 다음 명령을 실행하여 디바이스를 등록합니다. <IdScope>를 복사한 DPS의 값으로 바꾸고 <RegistrationId>를 디바이스 등록을 만들 때 사용한 값으로 바꿉니다.

    dotnet run -- -s <IdScope> -r <RegistrationId>
    

    디바이스 등록에 성공하면 다음 메시지가 표시됩니다.

    Initializing security using the local TPM...
    Initializing the device provisioning client...
    Initialized for registration Id <RegistrationId>.
    Registering with the device provisioning service...
    Registration status: Assigned.
    Device <RegistrationId> registered to <HubName>.azure-devices.net.
    Creating TPM authentication for IoT Hub...
    Testing the provisioned device with IoT Hub...
    Sending a telemetry message...
    Finished.
    
  1. Azure Portal에서 Device Provisioning Service의 개요 탭을 선택합니다.

  2. ID 범위 값을 복사합니다.

    Extract Device Provisioning Service endpoint information from the portal blade

  3. 원하는 텍스트 편집기를 엽니다.

  4. registerdevice 폴더에 새 RegisterDevice.js 파일을 만듭니다.

  5. SimulatedDevice.js 파일의 시작 부분에 다음 require 문을 추가합니다.

    
    'use strict';
    
    var ProvisioningTransport = require('azure-iot-provisioning-device-http').Http;
    var iotHubTransport = require('azure-iot-device-mqtt').Mqtt;
    var Client = require('azure-iot-device').Client;
    var Message = require('azure-iot-device').Message;
    var tpmSecurity = require('azure-iot-security-tpm');
    var ProvisioningDeviceClient = require('azure-iot-provisioning-device').ProvisioningDeviceClient;
    

    참고 항목

    Node.js용 Azure IoT SDKAMQ, AMQP WSMQTT WS와 같은 추가 프로토콜을 지원합니다. 더 많은 예제는 Node.js 샘플용 Device Provisioning Service SDK를 참조하세요.

  6. globalDeviceEndpointidScope 변수를 추가하고, 이러한 변수를 사용하여 ProvisioningDeviceClient 인스턴스를 만듭니다. {globalDeviceEndpoint}{idScope}1단계전역 디바이스 엔드포인트ID 범위 값으로 바꿉니다.

    
    var provisioningHost = '{globalDeviceEndpoint}';
    var idScope = '{idScope}';
    
    var tssJs = require("tss.js");
    var securityClient = new tpmSecurity.TpmSecurityClient('', new tssJs.Tpm(true));
    // if using non-simulated device, replace the above line with following:
    //var securityClient = new tpmSecurity.TpmSecurityClient();
    
    var provisioningClient = ProvisioningDeviceClient.create(provisioningHost, idScope, new ProvisioningTransport(), securityClient);
    
  7. 디바이스에서 메서드를 실행하도록 다음 함수를 추가합니다.

    
    provisioningClient.register(function(err, result) {
      if (err) {
        console.log("error registering device: " + err);
      } else {
        console.log('registration succeeded');
        console.log('assigned hub=' + result.registrationState.assignedHub);
        console.log('deviceId=' + result.registrationState.deviceId);
        var tpmAuthenticationProvider = tpmSecurity.TpmAuthenticationProvider.fromTpmSecurityClient(result.registrationState.deviceId, result.registrationState.assignedHub, securityClient);
        var hubClient = Client.fromAuthenticationProvider(tpmAuthenticationProvider, iotHubTransport);
    
        var connectCallback = function (err) {
          if (err) {
            console.error('Could not connect: ' + err.message);
          } else {
            console.log('Client connected');
            var message = new Message('Hello world');
            hubClient.sendEvent(message, printResultFor('send'));
          }
        };
    
        hubClient.open(connectCallback);
    
        function printResultFor(op) {
          return function printResult(err, res) {
            if (err) console.log(op + ' error: ' + err.toString());
            if (res) console.log(op + ' status: ' + res.constructor.name);
            process.exit(1);
          };
        }
      }
    });
    
  8. RegisterDevice.js 파일을 저장하고 닫습니다.

  9. 다음 명령을 실행합니다.

    node RegisterDevice.js
    
  10. 디바이스를 부팅하고 IoT Hub 정보를 얻기 위해 Device Provisioning Service에 연결하는 과정을 시뮬레이션하는 메시지를 확인합니다.

  1. 머신에서 Java 샘플 코드를 실행 중인 명령 창에서 Enter 키를 눌러 애플리케이션을 계속 실행합니다. 디바이스를 부팅하고 IoT Hub 정보를 얻기 위해 Device Provisioning Service에 연결하는 과정을 시뮬레이션하는 메시지를 확인합니다.

    Java TPM device program final

디바이스 프로비저닝 등록 확인

  1. Azure Portal에 로그인합니다.

  2. 왼쪽 메뉴 또는 포털 페이지에서 모든 리소스를 선택합니다.

  3. 디바이스가 할당된 IoT Hub를 선택합니다.

  4. Explorers 메뉴에서 IoT 디바이스를 선택합니다.

  1. 디바이스가 성공적으로 프로비전된 경우 상태사용으로 설정된 디바이스 ID가 목록에 표시됩니다. 디바이스가 표시되지 않으면 페이지 위쪽에서 새로 고침을 선택합니다.

    Device is registered with the IoT hub for C

  1. 디바이스가 성공적으로 프로비전된 경우 상태사용으로 설정된 디바이스 ID가 목록에 표시됩니다. 디바이스가 표시되지 않으면 페이지 위쪽에서 새로 고침을 선택합니다.

    Device is registered with the IoT hub for C#

  1. 디바이스가 성공적으로 프로비전된 경우 상태사용으로 설정된 디바이스 ID가 목록에 표시됩니다. 디바이스가 표시되지 않으면 페이지 위쪽에서 새로 고침을 선택합니다.

    Device is registered with the IoT hub for Node.js

  1. 디바이스가 성공적으로 프로비전된 경우 상태사용으로 설정된 디바이스 ID가 목록에 표시됩니다. 디바이스가 표시되지 않으면 페이지 위쪽에서 새로 고침을 선택합니다.

    Device is registered with the IoT hub

참고 항목

디바이스에 대한 등록 항목의 기본값으로부터 초기 디바이스 쌍 상태를 변경한 경우, 허브에서 원하는 쌍 상태를 가져와서 그에 맞게 작동할 수 있습니다. 자세한 내용은 IoT Hub의 디바이스 쌍 이해 및 사용을 참조하세요.

리소스 정리

디바이스 클라이언트 샘플을 계속해서 작업하고 검색할 계획인 경우 이 빠른 시작에서 만든 리소스를 정리하지 마세요. 그만하려면 다음 단계를 사용하여 이 빠른 시작에서 만든 모든 리소스를 삭제합니다.

디바이스 등록 삭제

  1. 컴퓨터에서 디바이스 클라이언트 샘플 출력 창을 닫습니다.

  2. Azure Portal의 왼쪽 메뉴에서 모든 리소스를 선택합니다.

  3. Device Provisioning Service를 선택합니다.

  4. 설정 메뉴에서 등록 관리를 선택합니다.

  5. 개별 등록 탭을 선택합니다.

  6. 이 빠른 시작에 등록한 디바이스의 등록 ID 옆에 있는 확인란을 선택합니다.

  7. 페이지 위쪽에서 삭제를 선택합니다.

IoT Hub에서 디바이스 등록 삭제

  1. Azure Portal의 왼쪽 메뉴에서 모든 리소스를 선택합니다.

  2. IoT Hub를 선택합니다.

  3. Explorers 메뉴에서 IoT 디바이스를 선택합니다.

  4. 이 빠른 시작에서 등록한 디바이스의 디바이스 ID 옆에 있는 확인란을 선택합니다.

  5. 페이지 위쪽에서 삭제를 선택합니다.

다음 단계

이 빠른 시작에서는 개별 등록을 사용하여 단일 디바이스를 IoT Hub에 프로비전했습니다. 다음으로, 여러 허브에서 여러 디바이스를 프로비전하는 방법을 알아봅니다.