Criar programaticamente um registro individual do Serviço de Provisionamento de Dispositivo para atestado TPM

Este artigo mostra como criar programaticamente um registro individual para um dispositivo TPM no Serviço de Provisionamento de Dispositivo do Hub IoT do Azure usando o SDK do serviço DPS do Hub IoT do Azure e um aplicativo de exemplo. Depois de criar o registro individual, você pode, opcionalmente, registrar um dispositivo TPM simulado no serviço de provisionamento por meio dessa entrada de registro.

Embora essas etapas funcionem em computadores Windows e Linux, este artigo usa um computador de desenvolvimento Windows.

Pré-requisitos

  • Instale o SDK do .NET 6.0 ou posterior ou posterior em sua máquina baseada no Windows. Você pode usar o seguinte comando para verificar sua versão.

    dotnet --info
    
  • (Opcional) Se você quiser registrar um dispositivo simulado no final deste artigo, siga o procedimento em Criar e provisionar um dispositivo TPM simulado até a etapa em que você obtém uma chave de endosso para o dispositivo . Salve a chave de endosso, como você usá-lo mais adiante neste artigo.

    Nota

    Não siga as etapas para criar um registro individual usando o portal do Azure.

  • Instale o Node.js v4.0+.

  • (Opcional) Se você quiser registrar um dispositivo simulado no final deste artigo, siga o procedimento em Criar e provisionar um dispositivo TPM simulado até a etapa em que você obtém uma chave de endosso e ID de registro para o dispositivo . Salve a chave de endosso e a ID de registro, como você usá-los mais adiante neste artigo.

    Nota

    Não siga as etapas para criar um registro individual usando o portal do Azure.

  • Instale o Java SE Development Kit 8. Este artigo instala o Java Service SDK mais adiante no artigo. Ele funciona em Windows e Linux. Este artigo usa o Windows.

  • Instale o Maven 3.

  • Instale o Git e certifique-se de que o caminho é adicionado à variável PATHde ambiente .

  • (Opcional) Se você quiser registrar um dispositivo simulado no final deste artigo, siga o procedimento em Criar e provisionar um dispositivo TPM simulado até a etapa em que você obtém uma chave de endosso para o dispositivo . Observe a chave de endosso e a ID de registro, como você usá-los mais adiante neste artigo.

    Nota

    Não siga as etapas para criar um registro individual usando o portal do Azure.

Obter chave de endosso do TPM (opcional)

Você pode seguir as etapas neste artigo para criar um exemplo de inscrição individual. Nesse caso, você poderá visualizar a entrada de inscrição no DPS, mas não poderá usá-la para provisionar um dispositivo.

Você também pode optar por seguir as etapas neste artigo para criar um registro individual e registrar um dispositivo TPM simulado. Se você quiser registrar um dispositivo simulado no final deste artigo, siga o procedimento em Criar e provisionar um dispositivo TPM simulado até a etapa em que você obtém uma chave de endosso para o dispositivo . Salve a chave de endosso, como você usá-la mais adiante neste artigo.

Nota

Não siga as etapas para criar um registro individual usando o portal do Azure.

Você também pode optar por seguir as etapas neste artigo para criar um registro individual e registrar um dispositivo TPM simulado. Se você quiser registrar um dispositivo simulado no final deste artigo, siga o procedimento em Criar e provisionar um dispositivo TPM simulado até a etapa em que você obtém uma chave de endosso e ID de registro para o dispositivo . Salve a chave de endosso e a ID de registro, como você usá-los mais adiante neste artigo.

Nota

Não siga as etapas para criar um registro individual usando o portal do Azure.

Você também pode optar por seguir as etapas neste artigo para criar um registro individual e registrar um dispositivo TPM simulado. Se você quiser registrar um dispositivo simulado no final deste artigo, siga o procedimento em Criar e provisionar um dispositivo TPM simulado até a etapa em que você obtém uma chave de endosso para o dispositivo . Observe a chave de endosso e a ID de registro, como você usá-los mais adiante neste artigo.

Nota

Não siga as etapas para criar um registro individual usando o portal do Azure.

Obter a cadeia de ligação para o serviço de aprovisionamento

Para o exemplo neste artigo, você precisará copiar a cadeia de conexão para seu serviço de provisionamento.

  1. Inicie sessão no portal do Azure.

  2. No menu à esquerda ou na página do portal, selecione Todos os recursos.

  3. Selecione o Serviço de Provisionamento de Dispositivo.

  4. No menu Configurações, selecione Políticas de acesso compartilhado.

  5. Selecione a política de acesso que você deseja usar.

  6. No painel Política de Acesso, copie e salve a cadeia de conexão de chave primária.

    Get provisioning service connection string from the portal.

Criar o exemplo de inscrição individual

Esta seção mostra como criar um aplicativo de console .NET Core que adiciona um registro individual para um dispositivo TPM ao seu serviço de provisionamento.

  1. Abra um prompt de comando do Windows e navegue até uma pasta onde você deseja criar seu aplicativo.

  2. Para criar um projeto de console, execute o seguinte comando:

    dotnet new console --framework net6.0 --use-program-main 
    
  3. Para adicionar uma referência ao SDK do serviço DPS, execute o seguinte comando:

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

    Esta etapa baixa, instala e adiciona uma referência ao pacote NuGet do cliente de serviço do Azure IoT DPS e suas dependências. Este pacote inclui os binários para o SDK do serviço .NET.

  4. Abra o arquivo Program.cs em um editor.

  5. Substitua a instrução namespace na parte superior do arquivo pelo seguinte:

    namespace CreateIndividualEnrollment;
    
  6. Adicione as seguintes using instruções na parte superior do arquivo acima da namespace instrução:

    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. Adicione os seguintes campos à Program classe e faça as alterações listadas.

    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;
    
    • Substitua o ProvisioningServiceConnectionString valor do espaço reservado pela cadeia de conexão do serviço de provisionamento copiado na seção anterior.

    • Se você estiver usando este artigo junto com o início rápido Criar e provisionar um dispositivo TPM simulado para provisionar um dispositivo simulado, substitua a chave de endosso pelo valor que você anotou nesse início rápido. Você pode substituir o ID do dispositivo e o ID de registro pelos valores sugeridos nesse início rápido, usar seus próprios valores ou usar os valores padrão neste exemplo.

  8. Adicione o seguinte método à Program classe. Esse código cria uma entrada de registro individual e, em seguida, chama o método no ProvisioningServiceClient para adicionar o CreateOrUpdateIndividualEnrollmentAsync registro individual ao serviço de provisionamento.

    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. Finalmente, substitua o Main método pelas seguintes linhas:

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  10. Guardar as suas alterações.

  1. A partir de uma janela de comando na sua pasta de trabalho, execute:

    npm install azure-iot-provisioning-service
    

    Esta etapa baixa, instala e adiciona uma referência ao pacote do cliente de serviço do Azure IoT DPS e suas dependências. Este pacote inclui os binários para o SDK do serviço Node.js.

  2. Com um editor de texto, crie um ficheiro create_individual_enrollment.js na sua pasta de trabalho. Adicione o seguinte código ao ficheiro:

    '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. Guarde o ficheiro.

  1. Abra um prompt de comando do Windows.

  2. Clone os SDKs IoT do Microsoft Azure para Java GitHub repo:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. Vá para a pasta de exemplo:

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample
    
  4. Abra o arquivo \src\main\java\samples\com\microsoft\azure\sdk\iot\ServiceEnrollmentSample.java em um editor.

  5. Substitua [Provisioning Connection String] pela cadeia de conexão que você copiou em Obter a cadeia de conexão para seu serviço de provisionamento.

    private static final String PROVISIONING_CONNECTION_STRING = "[Provisioning Connection String]";
    
  6. Adicione os detalhes do dispositivo TPM. Substitua as [RegistrationId] instruções a seguir [TPM Endorsement Key] por sua chave de endosso e ID de registro.

    private static final String REGISTRATION_ID = "[RegistrationId]";
    private static final String TPM_ENDORSEMENT_KEY = "[TPM Endorsement Key]";
    
    • Se você estiver usando este artigo junto com o Guia de início rápido Criar e provisionar um dispositivo TPM simulado para provisionar um dispositivo simulado, use os valores de chave de ID de Registro e Endosso que você anotou nesse início rápido.

    • Se você estiver usando este artigo apenas para criar um exemplo de registro individual e não pretende usá-lo para registrar um dispositivo, poderá usar o seguinte valor para uma chave de endosso:

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

      Insira seu próprio valor para o ID de registro, por exemplo, "myJavaDevice".

  7. Para inscrições individuais, você pode optar por definir um ID de dispositivo que o DPS atribui ao dispositivo quando o provisiona para o Hub IoT. Se você não atribuir uma ID de dispositivo, o DPS usará a ID de registro como a ID do dispositivo. Por padrão, este exemplo atribui "myJavaDevice" como o ID do dispositivo. Se você quiser alterar a ID do dispositivo, modifique a seguinte instrução:

        private static final String DEVICE_ID = "myJavaDevice";
    

    Se você não quiser atribuir um ID de dispositivo específico, comente a seguinte instrução:

    individualEnrollment.setDeviceId(DEVICE_ID);
    
  8. O exemplo permite definir um hub IoT no registro individual para provisionar o dispositivo. Esse hub IoT deve ser um que tenha sido vinculado anteriormente ao serviço de provisionamento. Para este artigo, permitimos que o DPS escolha entre os hubs vinculados de acordo com a política de alocação padrão, distribuição ponderada uniformemente. Comente a seguinte declaração no arquivo:

    individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
    
  9. O exemplo cria, atualiza, consulta e exclui um registro de dispositivo TPM individual. Para verificar a inscrição bem-sucedida no portal, comente temporariamente as seguintes linhas de código no final do arquivo:

    // *********************************** Delete info of individualEnrollment ************************************
    System.out.println("\nDelete the individualEnrollment...");
    provisioningServiceClient.deleteIndividualEnrollment(REGISTRATION_ID);
    
  10. Guardar as suas alterações.

Executar o exemplo de inscrição individual

  1. Execute o exemplo:

    dotnet run
    
  2. Após a criação bem-sucedida, a janela de comando exibe as propriedades do novo registro.

Para executar o exemplo, você precisa da cadeia de conexão para o serviço de provisionamento que você copiou na seção anterior e a chave de endosso para o dispositivo. Se você seguiu o início rápido Criar e provisionar um dispositivo simulado para criar um dispositivo TPM simulado, use a chave de endosso criada para esse dispositivo . Caso contrário, para criar um exemplo de registro individual, você pode usar a seguinte chave de endosso fornecida com o SDK do Serviço .js Nó:

AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==
  1. Para criar uma inscrição individual para o seu dispositivo TPM, execute o seguinte comando (inclua as aspas à volta dos argumentos do comando):

    node create_individual_enrollment.js "<the connection string for your provisioning service>" "<endorsement key>"
    
  2. Após a criação bem-sucedida, a janela de comando exibe as propriedades do novo registro.

  1. Na pasta azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample no prompt de comando, execute o seguinte comando para criar o exemplo:

    mvn install -DskipTests
    

    Este comando baixa o pacote Maven do cliente de serviço do Azure IoT DPS para sua máquina e cria o exemplo. Este pacote inclui os binários para o SDK do serviço Java.

  2. Alterne para a pasta de destino e execute o exemplo. A compilação na etapa anterior produz .jar arquivo na pasta de destino com o seguinte formato de arquivo: ; por exemplo: service-enrollment-sample-1.8.1-with-deps.jarservice-enrollment-sample-{version}-with-deps.jar. Talvez seja necessário substituir a versão no comando a seguir.

    cd target
    java -jar ./service-enrollment-sample-1.8.1-with-deps.jar
    
  3. Após a criação bem-sucedida, a janela de comando exibe as propriedades do novo registro.

Para verificar se a inscrição individual foi criada:

  1. No portal do Azure, navegue até sua instância do Serviço de Provisionamento de Dispositivo.

  2. No menu Configurações, selecione Gerenciar inscrições.

  3. Selecione a guia Inscrições individuais. Você verá uma nova entrada de inscrição que corresponde à ID de registro usada no exemplo.

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.

Inscrever um dispositivo simulado (Opcional)

Clean up resources (Limpar recursos)

Se você planeja explorar os tutoriais do DPS, não limpe os recursos criados neste artigo. Caso contrário, use as etapas a seguir para excluir todos os recursos criados por este artigo.

  1. No portal do Azure, navegue até sua instância do Serviço de Provisionamento de Dispositivo.

  2. No menu Configurações, selecione Gerenciar inscrições.

  3. Selecione a guia Inscrições individuais.

  4. Marque a caixa de seleção ao lado da ID de registro da entrada de inscrição criada neste artigo.

  5. Na parte superior da página, selecione Eliminar.

  1. Se você seguiu as etapas em Criar e provisionar um dispositivo TPM simulado para criar um dispositivo TPM simulado, execute as seguintes etapas:

    1. No portal do Azure, navegue para o Hub IoT onde o seu dispositivo foi aprovisionado.

    2. No menu à esquerda, em Gerenciamento de dispositivos, selecione Dispositivos.

    3. Marque a caixa de seleção ao lado da ID do dispositivo que você registrou neste artigo.

    4. Na parte superior do painel, selecione Excluir.

  1. Se você seguiu as etapas em Criar e provisionar um dispositivo TPM simulado para criar um dispositivo TPM simulado, execute as seguintes etapas:

    1. Feche a janela do simulador TPM e a janela de saída de exemplo para o dispositivo simulado.

    2. No portal do Azure, navegue para o Hub IoT onde o seu dispositivo foi aprovisionado.

    3. No menu à esquerda, em Gerenciamento de dispositivos, selecione Dispositivos.

    4. Marque a caixa de seleção ao lado da ID do dispositivo que você registrou neste artigo.

    5. Na parte superior do painel, selecione Excluir.

  1. Se você seguiu as etapas em Criar e provisionar um dispositivo TPM simulado para criar um dispositivo TPM simulado, execute as seguintes etapas:

    1. Feche a janela do simulador TPM e a janela de saída de exemplo para o dispositivo simulado.

    2. No portal do Azure, navegue para o Hub IoT onde o seu dispositivo foi aprovisionado.

    3. No menu à esquerda, em Gerenciamento de dispositivos, selecione Dispositivos.

    4. Marque a caixa de seleção ao lado da ID do dispositivo que você registrou neste artigo.

    5. Na parte superior do painel, selecione Excluir.

Próximos passos

Neste artigo, você criou programaticamente uma entrada de registro individual para um dispositivo TPM. Opcionalmente, você criou um dispositivo simulado TPM em seu computador e o provisionou para seu hub IoT usando o Serviço de Provisionamento de Dispositivo do Hub IoT do Azure. Para explorar mais, confira os seguintes links:

  • Para obter mais informações sobre o atestado TPM com DPS, consulte Atestado TPM.

  • Para obter um exemplo completo de um provisionamento de um dispositivo por meio de um registro individual usando o atestado TPM, consulte o Guia de início rápido Provisionar um dispositivo TPM simulado.

  • Para saber mais sobre como gerenciar inscrições individuais e grupos de inscrição usando o portal do Azure, consulte Como gerenciar inscrições de dispositivo com o portal do Azure.