Share via


프로그래밍 방식으로 TPM 증명을 위한 Device Provisioning Service 개별 등록 만들기

이 문서에서는 Azure IoT Hub DPS 서비스 SDK 및 샘플 애플리케이션을 사용하여 Azure IoT Hub Device Provisioning Service에서 프로그래밍 방식으로 TPM 디바이스에 대한 개별 등록을 만드는 방법을 보여 줍니다. 개별 등록을 만든 후 선택적으로 이 등록 항목을 통해 프로비전 서비스에 시뮬레이트된 TPM 디바이스를 등록할 수 있습니다.

이러한 단계는 Windows 및 Linux 컴퓨터 모두에서 작동하지만, 이 문서에서는 Windows 개발 컴퓨터를 사용합니다.

필수 조건

  • Windows 기반 컴퓨터에 .NET 6.0 SDK 이상 이상을 설치합니다. 다음 명령을 사용하여 버전을 확인할 수 있습니다.

    dotnet --info
    
  • (선택 사항) 이 문서를 완료한 후 시뮬레이션된 디바이스를 등록하려면, 디바이스에 대한 인증 키를 가져오는 단계까지 시뮬레이션된 TPM 디바이스 만들기 및 프로비전의 단계를 수행합니다. 이 문서의 뒷부분에서 사용하므로 인증 키를 저장합니다.

    참고 항목

    Azure Portal을 사용하여 개별 등록을 만드는 단계는 수행하지 마세요.

  • Node.js v4.0+를 설치합니다.

  • (선택 사항) 이 문서의 끝에서 시뮬레이션된 디바이스를 등록하려면 시뮬레이션된 TPM 디바이스 만들기 및 프로비전에서 장치에 대한 인증 키 및 등록 ID를 받는 단계까지 절차를 수행합니다. 이 문서의 뒷부분에서 사용하므로 인증 키등록 ID를 저장합니다.

    참고 항목

    Azure Portal을 사용하여 개별 등록을 만드는 단계는 수행하지 마세요.

  • Java SE Development Kit 8을 설치합니다. 이 문서에서는 문서의 뒷부분에 Java 서비스 SDK를 설치합니다. Windows와 Linux 모두에서 작동합니다. 이 문서에서는 Windows 10을 사용합니다.

  • Maven 3을 설치합니다.

  • Git을 설치하고 경로가 환경 변수 PATH에 추가되도록 합니다.

  • (선택 사항) 이 문서를 완료한 후 시뮬레이션된 디바이스를 등록하려면, 디바이스에 대한 인증 키를 가져오는 단계까지 시뮬레이션된 TPM 디바이스 만들기 및 프로비전의 단계를 수행합니다. 이 문서의 뒷부분에서 사용하므로 인증 키등록 ID를 기록해 둡니다.

    참고 항목

    Azure Portal을 사용하여 개별 등록을 만드는 단계는 수행하지 마세요.

TPM 인증 키 가져오기(선택 사항)

이 문서의 단계에 따라 샘플 개별 등록을 만들 수 있습니다. 이 경우 DPS에서 등록 항목을 볼 수 있지만 이를 사용하여 디바이스를 프로비전할 수는 없습니다.

이 문서의 단계에 따라 개별 등록을 만들고 시뮬레이션된 TPM 디바이스를 등록하도록 선택할 수도 있습니다. 이 문서의 끝 부분에서 시뮬레이션된 디바이스를 등록하려면 시뮬레이션된 TPM 디바이스 만들기 및 프로비전에서 디바이스에 대한 인증 키를 받는 단계까지 절차를 수행합니다. 이 문서의 뒷부분에서 사용하므로 인증 키를 저장합니다.

참고 항목

Azure Portal을 사용하여 개별 등록을 만드는 단계는 수행하지 마세요.

이 문서의 단계에 따라 개별 등록을 만들고 시뮬레이션된 TPM 디바이스를 등록하도록 선택할 수도 있습니다. 이 문서의 끝 부분에서 시뮬레이션된 디바이스를 등록하려면 시뮬레이션된 TPM 디바이스 만들기 및 프로비전에서 디바이스에 대한 인증 키 및 등록 ID를 받는 단계까지 절차를 수행합니다. 이 문서의 뒷부분에서 사용하므로 인증 키등록 ID를 저장합니다.

참고 항목

Azure Portal을 사용하여 개별 등록을 만드는 단계는 수행하지 마세요.

이 문서의 단계에 따라 개별 등록을 만들고 시뮬레이션된 TPM 디바이스를 등록하도록 선택할 수도 있습니다. 이 문서의 끝 부분에서 시뮬레이션된 디바이스를 등록하려면 시뮬레이션된 TPM 디바이스 만들기 및 프로비전에서 디바이스에 대한 인증 키를 받는 단계까지 절차를 수행합니다. 이 문서의 뒷부분에서 사용하므로 인증 키등록 ID를 기록해 둡니다.

참고 항목

Azure Portal을 사용하여 개별 등록을 만드는 단계는 수행하지 마세요.

프로비전 서비스에 대한 연결 문자열 가져오기

이 문서의 샘플에서는 프로비전 서비스에 대한 연결 문자열을 복사해야 합니다.

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

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

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

  4. 설정 메뉴에서 공유 액세스 정책을 선택합니다.

  5. 사용하려는 액세스 정책을 선택합니다.

  6. 액세스 정책 패널에서 기본 키 연결 문자열을 복사하여 저장합니다.

    Get provisioning service connection string from the portal.

개별 등록 샘플 만들기

이 섹션에서는 TPM 디바이스의 개별 등록을 프로비저닝 서비스에 추가하는 .NET Core 콘솔 앱을 만드는 방법을 보여줍니다.

  1. Windows 명령 프롬프트를 열고 앱을 만들려는 폴더로 이동합니다.

  2. 콘솔 프로젝트를 만들려면 다음 명령을 실행합니다.

    dotnet new console --framework net6.0 --use-program-main 
    
  3. DPS 서비스 SDK에 대한 참조를 추가하려면 다음 명령을 실행합니다.

    dotnet add package Microsoft.Azure.Devices.Provisioning.Service 
    

    이 단계에서는 Azure IoT DPS 서비스 클라이언트 NuGet 패키지 및 종속 항목에 대한 참조를 다운로드, 설치 및 추가합니다. 이 패키지에는 .NET 서비스 SDK용 이진 파일이 포함되어 있습니다.

  4. 편집기에서 Program.cs 파일을 엽니다.

  5. 파일 맨 위에 있는 네임스페이스 문을 다음으로 바꿉니다.

    namespace CreateIndividualEnrollment;
    
  6. namespace위의 파일 상단에 다음 using 문을 추가합니다.

    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. Program 클래스에 다음 필드를 추가하고 나열된 변경 작업을 수행합니다.

    private static string ProvisioningConnectionString = "{ProvisioningServiceConnectionString}";
    private const string RegistrationId = "sample-registrationid-csharp";
    private const string TpmEndorsementKey =
        "AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUS" +
        "cTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3d" +
        "yKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKR" +
        "dln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFe" +
        "WlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==";
    
    // Optional parameters
    private const string OptionalDeviceId = "myCSharpDevice";
    private const ProvisioningStatus OptionalProvisioningStatus = ProvisioningStatus.Enabled;
    
    • ProvisioningServiceConnectionString 자리 표시자 값을 이전 섹션에서 복사한 프로비전 서비스의 연결 문자열로 바꿉니다.

    • 시뮬레이션된 TPM 디바이스 만들기 및 프로비전 빠른 시작과 함께 이 문서를 사용하여 시뮬레이션된 디바이스를 프로비전하는 경우 인증 키를 해당 빠른 시작에서 기록한 값으로 바꿉니다. 디바이스 ID 및 등록 ID를 해당 빠른 시작에 제안된 값으로 바꾸거나 자체 값을 사용하거나 이 샘플의 기본값을 사용할 수 있습니다.

  8. 다음 메서드를 Program 클래스에 추가합니다. 이 코드는 개별 등록 항목을 만든 다음, ProvisioningServiceClient에서 CreateOrUpdateIndividualEnrollmentAsync 메서드를 호출하여 프로비전 서비스에 개별 등록을 추가합니다.

    public static async Task RunSample()
    {
        Console.WriteLine("Starting sample...");
    
        using (ProvisioningServiceClient provisioningServiceClient =
                ProvisioningServiceClient.CreateFromConnectionString(ProvisioningConnectionString))
        {
            #region Create a new individualEnrollment config
            Console.WriteLine("\nCreating a new individualEnrollment object...");
            Attestation attestation = new TpmAttestation(TpmEndorsementKey);
            IndividualEnrollment individualEnrollment =
                    new IndividualEnrollment(
                            RegistrationId,
                            attestation);
    
            // The following parameters are optional. Remove them if you don't need them.
            individualEnrollment.DeviceId = OptionalDeviceId;
            individualEnrollment.ProvisioningStatus = OptionalProvisioningStatus;
            #endregion
    
            #region Create the individualEnrollment
            Console.WriteLine("\nAdding the individualEnrollment to the provisioning service...");
            IndividualEnrollment individualEnrollmentResult =
                await provisioningServiceClient.CreateOrUpdateIndividualEnrollmentAsync(individualEnrollment).ConfigureAwait(false);
            Console.WriteLine("\nIndividualEnrollment created with success.");
            Console.WriteLine(individualEnrollmentResult);
            #endregion
    
        }
    }
    
  9. 마지막으로 Main 메서드를 다음 줄로 바꿉니다.

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  10. 변경 내용을 저장합니다.

  1. 작업 폴더의 명령 창에서 다음을 실행합니다.

    npm install azure-iot-provisioning-service
    

    이 단계에서는 Azure IoT DPS 서비스 클라이언트 패키지 및 종속 항목에 대한 참조를 다운로드, 설치 및 추가합니다. 이 패키지에는 Node.js 서비스 SDK용 이진 파일이 포함되어 있습니다.

  2. 텍스트 편집기를 사용하여 작업 폴더에 create_individual_enrollment.js 파일을 만듭니다. 파일에 다음 코드를 추가합니다.

    'use strict';
    
    var provisioningServiceClient = require('azure-iot-provisioning-service').ProvisioningServiceClient;
    
    var serviceClient = provisioningServiceClient.fromConnectionString(process.argv[2]);
    var endorsementKey = process.argv[3];
    
    var enrollment = {
      registrationId: 'first',
      attestation: {
        type: 'tpm',
        tpm: {
          endorsementKey: endorsementKey
        }
      }
    };
    
    serviceClient.createOrUpdateIndividualEnrollment(enrollment, function(err, enrollmentResponse) {
      if (err) {
        console.log('error creating the individual enrollment: ' + err);
      } else {
        console.log("enrollment record returned: " + JSON.stringify(enrollmentResponse, null, 2));
      }
    });
    
  3. 파일을 저장합니다.

  1. Windows 명령 프롬프트를 엽니다.

  2. Java용 Microsoft Azure IoT SDK GitHub 저장소 복제:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. 샘플 폴더로 이동합니다.

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample
    
  4. 편집기에서 \src\main\java\samples\com\microsoft\azure\sdk\iot\ServiceEnrollmentSample.java 파일을 엽니다.

  5. [Provisioning Connection String]프로비전 서비스에 대한 연결 문자열 가져오기에서 복사한 연결 문자열로 바꿉니다.

    private static final String PROVISIONING_CONNECTION_STRING = "[Provisioning Connection String]";
    
  6. TPM 디바이스 세부 정보를 추가합니다. 다음 문의 [RegistrationId][TPM Endorsement Key]를 인증 키 및 등록 ID로 바꿉니다.

    private static final String REGISTRATION_ID = "[RegistrationId]";
    private static final String TPM_ENDORSEMENT_KEY = "[TPM Endorsement Key]";
    
    • 시뮬레이션된 TPM 디바이스 만들기 및 프로비전 빠른 시작과 함께 이 문서를 사용하여 시뮬레이션된 디바이스를 프로비전하려면 빠른 시작에서 언급한 등록 ID인증 키 값을 사용합니다.

    • 이 문서를 사용하여 샘플 개별 등록을 만들고 디바이스를 등록하는 데 사용하지 않으려는 경우 인증 키에 대해 다음 값을 사용할 수 있습니다.

      private static final String TPM_ENDORSEMENT_KEY = "AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnefZcBhgy1SSDQMQ==";
      

      예를 들어, "myJavaDevice"와 같이 등록 ID에 고유한 값을 입력합니다.

  7. 개별 등록의 경우 DPS가 디바이스를 IoT Hub에 프로비전할 때 디바이스에 할당할 디바이스 ID를 설정하도록 선택할 수 있습니다. 디바이스 ID를 할당하지 않으면 DPS는 등록 ID를 디바이스 ID로 사용합니다. 기본적으로 이 샘플은 "myJavaDevice"를 디바이스 ID로 할당합니다. 디바이스 ID를 변경하려면 다음 문을 수정합니다.

        private static final String DEVICE_ID = "myJavaDevice";
    

    특정 디바이스 ID를 할당하지 않으려면 다음 문을 주석으로 처리합니다.

    individualEnrollment.setDeviceId(DEVICE_ID);
    
  8. 이 샘플을 사용하면 개별 등록에서 IoT 허브를 설정하여 디바이스를 프로비전할 수 있습니다. 이전에 프로비저닝 서비스에 연결된 IoT 허브여야 합니다. 이 문서에서는 DPS가 기본 할당 정책인 균등 가중치 배포에 따라 연결된 허브에서 선택하도록 합니다. 파일에서 다음 문을 주석으로 처리합니다.

    individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
    
  9. 이 샘플은 개별 TPM 디바이스 등록을 만들기, 업데이트, 쿼리 및 삭제합니다. 포털에 성공적으로 등록되었는지 확인하려면 파일 끝에 다음 코드 줄을 일시적으로 주석으로 처리합니다.

    // *********************************** Delete info of individualEnrollment ************************************
    System.out.println("\nDelete the individualEnrollment...");
    provisioningServiceClient.deleteIndividualEnrollment(REGISTRATION_ID);
    
  10. 변경 내용을 저장합니다.

개별 등록 샘플 실행

  1. 샘플을 실행합니다.

    dotnet run
    
  2. 성공적으로 만들어지면 명령 창에 새 등록의 속성이 표시됩니다.

샘플을 실행하려면 이전 섹션에서 복사한 프로비전 서비스의 연결 문자열과 디바이스의 인증 키가 필요합니다. 시뮬레이션된 디바이스 만들기 및 프로비전 빠른 시작을 따라 시뮬레이션된 TPM 디바이스를 만든 경우 해당 디바이스에 대해 만들어진 인증 키를 사용합니다. 그렇지 않고 개별 등록 샘플을 만들려면 Node.js 서비스 SDK에서 제공되는 다음 인증 키를 사용할 수 있습니다.

AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==
  1. TPM 디바이스에 대한 개별 등록을 만들려면 다음 명령을 실행합니다(명령 인수를 따옴표로 묶음).

    node create_individual_enrollment.js "<the connection string for your provisioning service>" "<endorsement key>"
    
  2. 성공적으로 만들어지면 명령 창에 새 등록의 속성이 표시됩니다.

  1. 명령 프롬프트의 azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample 폴더에서 다음 명령을 실행하여 샘플을 빌드합니다.

    mvn install -DskipTests
    

    이 명령은 Azure IoT DPS 서비스 클라이언트 Maven 패키지를 컴퓨터에 다운로드하고 샘플을 빌드합니다. 이 패키지에는 Java 서비스 SDK용 이진 파일이 포함되어 있습니다.

  2. target 폴더로 전환하고 샘플을 실행합니다. 이전 단계의 빌드는 service-enrollment-sample-{version}-with-deps.jar 파일 형식으로 target 폴더에 .jar 파일을 출력합니다(예: service-enrollment-sample-1.8.1-with-deps.jar). 다음 명령에서 버전을 바꿔야 할 수도 있습니다.

    cd target
    java -jar ./service-enrollment-sample-1.8.1-with-deps.jar
    
  3. 성공적으로 만들어지면 명령 창에 새 등록의 속성이 표시됩니다.

개별 등록이 만들어졌는지 확인하려면 다음을 수행합니다.

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

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

  3. 개별 등록 탭을 선택합니다. 샘플에서 사용한 등록 ID에 해당하는 새 등록 항목이 표시됩니다.

Screenshot that shows verifying enrollment for a C# individual device in the portal.

Screenshot that shows verifying enrollment for a Node.js individual device in the portal.

Screenshot that shows verifying enrollment for a Java individual device in the portal.

시뮬레이션된 디바이스 등록(선택 사항)

시뮬레이션된 디바이스를 프로비전하기 위해 시뮬레이션된 TPM 디바이스 만들기 및 프로비전 빠른 시작의 단계를 따랐다면 디바이스 등록에서 빠른 시작을 다시 시작합니다.

시뮬레이션된 디바이스를 프로비전하기 위해 시뮬레이션된 TPM 디바이스 만들기 및 프로비전 빠른 시작의 단계를 따랐다면 디바이스 등록에서 빠른 시작을 다시 시작합니다.

시뮬레이션된 디바이스를 프로비전하기 위해 시뮬레이션된 TPM 디바이스 만들기 및 프로비전 빠른 시작의 단계를 따랐다면 디바이스 등록에서 빠른 시작을 다시 시작합니다.

리소스 정리

DPS 자습서를 탐색할 계획이라면 이 문서에서 만든 리소스를 정리하지 마세요. 그렇지 않으면 다음 단계에서 이 문서에서 만든 모든 리소스를 삭제합니다.

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

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

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

  4. 이 문서에서 만든 등록 항목의 등록 ID 옆에 있는 확인란을 선택합니다.

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

  1. 시뮬레이션된 TPM 디바이스 만들기 및 프로비저닝의 단계를 수행하여 시뮬레이션된 TPM 디바이스를 만든 경우 다음 단계를 수행합니다.

    1. Azure Portal에서 디바이스가 프로비전된 IoT Hub로 이동합니다.

    2. 디바이스 관리 아래 왼쪽 메뉴에서 디바이스를 선택합니다.

    3. 이 문서에서 등록한 디바이스의 디바이스 ID 옆에 있는 확인란을 선택합니다.

    4. 창 위쪽에서 삭제를 선택합니다.

  1. 시뮬레이션된 TPM 디바이스 만들기 및 프로비저닝의 단계를 수행하여 시뮬레이션된 TPM 디바이스를 만든 경우 다음 단계를 수행합니다.

    1. TPM 시뮬레이터 창 및 시뮬레이션된 디바이스에 대한 샘플 출력 창을 닫습니다.

    2. Azure Portal에서 디바이스가 프로비전된 IoT Hub로 이동합니다.

    3. 디바이스 관리 아래 왼쪽 메뉴에서 디바이스를 선택합니다.

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

    5. 창 위쪽에서 삭제를 선택합니다.

  1. 시뮬레이션된 TPM 디바이스 만들기 및 프로비저닝의 단계를 수행하여 시뮬레이션된 TPM 디바이스를 만든 경우 다음 단계를 수행합니다.

    1. TPM 시뮬레이터 창 및 시뮬레이션된 디바이스에 대한 샘플 출력 창을 닫습니다.

    2. Azure Portal에서 디바이스가 프로비전된 IoT Hub로 이동합니다.

    3. 디바이스 관리 아래 왼쪽 메뉴에서 디바이스를 선택합니다.

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

    5. 창 위쪽에서 삭제를 선택합니다.

다음 단계

이 문서에서는 프로그래밍 방식으로 TPM 디바이스에 대한 개별 등록 항목을 만들었습니다. 선택 사항으로, 컴퓨터에 TPM 시뮬레이션된 디바이스를 만들고 Azure IoT Hub Device Provisioning Service를 사용하여 IoT 허브에 프로비저닝했습니다. 더 자세히 알아보려면 다음 링크를 확인합니다.