Creación mediante programación de una inscripción individual de Device Provisioning Service para la atestación de TPM

En este artículo se muestra cómo crear mediante programación una inscripción individual para un dispositivo de TPM en Azure IoT Hub Device Provisioning Service mediante el SDK de Microsoft Azure IoT y una aplicación de ejemplo. Después de crear la inscripción individual, puede inscribir opcionalmente un dispositivo TPM simulado en el servicio de aprovisionamiento a través de esta entrada de inscripción.

Aunque estos pasos funcionan en equipos Windows y Linux, en este artículo se usa un equipo de desarrollo de Windows.

Requisitos previos

  • Instale el SDK de .NET 6.0 o versiones posteriores en una máquina con Windows. Para comprobar la versión, use el siguiente comando.

    dotnet --info
    
  • (Opcional) Si quiere inscribir un dispositivo simulado al final de este artículo, siga el procedimiento descrito en Creación y aprovisionamiento de un dispositivo de TPM simulado hasta llegar al paso donde obtiene una clave de aprobación para el dispositivo. Guarde la clave de aprobación, ya que la usará más adelante en este artículo.

    Nota:

    No siga los pasos para crear una inscripción individual mediante Azure Portal.

  • Instale Node.js v4.0+.

  • (Opcional) Si quiere inscribir un dispositivo simulado al final de este artículo, siga el procedimiento descrito en Creación y aprovisionamiento de un dispositivo de TPM simulado hasta llegar al paso donde obtiene una clave de aprobación y un ID de registro para el dispositivo. Guarde la clave de aprobación y el identificador de registro, ya que los usará más adelante en este artículo.

    Nota:

    No siga los pasos para crear una inscripción individual mediante Azure Portal.

  • Instale Java SE Development Kit 8. En este artículo se instala el SDK de servicio de Java más adelante en el artículo. Funciona tanto en Windows como en Linux. En este artículo se usa Windows.

  • Instale Maven 3.

  • Instale Git y asegúrese de que la ruta de acceso se agrega a la variable PATHde entorno .

  • (Opcional) Si quiere inscribir un dispositivo simulado al final de este artículo, siga el procedimiento descrito en Creación y aprovisionamiento de un dispositivo de TPM simulado hasta llegar al paso donde obtiene una clave de aprobación para el dispositivo. Anote la clave de aprobación y el identificador de registro, ya que los usará más adelante en este artículo.

    Nota:

    No siga los pasos para crear una inscripción individual mediante Azure Portal.

Obtenga la clave de aprobación (opcional)

Puede seguir los pasos de este artículo para crear una inscripción individual de ejemplo. En este caso, podrá ver la entrada de inscripción en DPS, pero no podrá usarla para aprovisionar un dispositivo.

También puede seguir los pasos descritos en este artículo para crear una inscripción individual e inscribir un dispositivo TPM simulado. Si quiere inscribir un dispositivo simulado al final de este artículo, siga el procedimiento descrito en Creación y aprovisionamiento de un dispositivo de TPM simulado hasta llegar al paso donde obtiene una clave de aprobación para el dispositivo. Guarde la clave de aprobación, ya que la usará más adelante en este artículo.

Nota:

No siga los pasos para crear una inscripción individual mediante Azure Portal.

También puede seguir los pasos descritos en este artículo para crear una inscripción individual e inscribir un dispositivo TPM simulado. Si quiere inscribir un dispositivo simulado al final de este artículo, siga el procedimiento descrito en Creación y aprovisionamiento de un dispositivo de TPM simulado hasta llegar al paso donde obtiene una clave de aprobación y un ID de registro para el dispositivo. Guarde la clave de aprobación y el identificador de registro, ya que los usará más adelante en este artículo.

Nota:

No siga los pasos para crear una inscripción individual mediante Azure Portal.

También puede seguir los pasos descritos en este artículo para crear una inscripción individual e inscribir un dispositivo TPM simulado. Si quiere inscribir un dispositivo simulado al final de este artículo, siga el procedimiento descrito en Creación y aprovisionamiento de un dispositivo de TPM simulado hasta llegar al paso donde obtiene una clave de aprobación para el dispositivo. Anote la clave de aprobación y el identificador de registro, ya que los usará más adelante en este artículo.

Nota:

No siga los pasos para crear una inscripción individual mediante Azure Portal.

Obtención de la cadena de conexión para el servicio de aprovisionamiento

En el ejemplo de este artículo, tendrá que copiar la cadena de conexión para su servicio de aprovisionamiento.

  1. Inicie sesión en Azure Portal.

  2. En el menú de la izquierda o en la página del portal, seleccione Todos los recursos.

  3. Seleccione la instancia de Device Provisioning Service.

  4. En el menú Configuración, seleccione Directivas de acceso compartidas.

  5. Seleccione la directiva de acceso que quiera usar.

  6. En el panel Directiva de acceso, copie y guarde la cadena de conexión de la clave principal.

    Get provisioning service connection string from the portal.

Creación del ejemplo de inscripción individual

En esta sección se muestra cómo crear una aplicación de consola de .NET Core que agrega una inscripción individual para un dispositivo de TPM al servicio de aprovisionamiento.

  1. Abra un símbolo del sistema de Windows y vaya a la carpeta donde quiera crear la aplicación.

  2. Para crear un proyecto de consola, ejecute el siguiente comando:

    dotnet new console --framework net6.0 --use-program-main 
    
  3. Para agregar una referencia al SDK del servicio DPS, ejecute el siguiente comando:

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

    Este paso permite descargar, instalar y agregar una referencia al paquete de cliente de servicio de NuGet de Azure IoT DPS y sus dependencias. Este paquete incluye los archivos binarios para el SDK del servicio .NET.

  4. Abra el archivo Program.cs en un editor.

  5. Reemplace la instrucción de espacio de nombres en la parte superior del archivo con lo siguiente:

    namespace CreateIndividualEnrollment;
    
  6. Agregue las siguientes instrucciones using en la parte superior del archivo encima de la instrucción namespace:

    using System.Threading.Tasks;
    using Microsoft.Azure.Devices.Provisioning.Service;
    
  7. Agregue los siguientes campos a la clase Program y realice los cambios de la lista.

    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;
    
    • Reemplace el valor del marcador de posición ProvisioningServiceConnectionString con la cadena de conexión del servicio de aprovisionamiento que copió en la sección anterior.

    • Si usa este artículo junto con el inicio rápido de Creación y aprovisionamiento de un dispositivo de TPM simulado para aprovisionar un dispositivo simulado, reemplace la clave de aprobación por el valor que anotó en ese inicio rápido. Puede reemplazar el identificador del dispositivo y el identificador de registro por los valores sugeridos en ese inicio rápido, usar sus propios valores o utilizar los valores predeterminados en este ejemplo.

  8. Agrega el método siguiente a la clase Program: Este código crea una entrada de inscripción individual y luego llama al CreateOrUpdateIndividualEnrollmentAsyncmétodo en ProvisioningServiceClient para agregar la inscripción individual al servicio de aprovisionamiento.

    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. Por último, reemplace el método Main por las siguientes líneas:

    static async Task Main(string[] args)
    {
        await RunSample();
        Console.WriteLine("\nHit <Enter> to exit ...");
        Console.ReadLine();
    }
    
  10. Guarde los cambios.

  1. Desde una ventana de comandos en la carpeta de trabajo, ejecute:

    npm install azure-iot-provisioning-service
    

    Este paso permite descargar, instalar y agregar una referencia al paquete de cliente de servicio de Azure IoT DPS y sus dependencias. Este paquete incluye los archivos binarios del SDK del servicio Node.js.

  2. Con un editor de texto, cree un archivo create_individual_enrollment.js en la carpeta de trabajo. Agregue el siguiente código al archivo :

    '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 el archivo.

  1. Abra un símbolo del sistema de Windows.

  2. Clone los SDK de IoT de Microsoft Azure para el repositorio de GitHub de Java:

    git clone https://github.com/Azure/azure-iot-sdk-java.git --recursive
    
  3. Vaya a la carpeta de muestra:

    cd azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample
    
  4. Abra el archivo \src\main\java\samples\com\microsoft\azure\sdk\iot\ServiceEnrollmentSample.java en un editor.

  5. Reemplace [Provisioning Connection String] por la cadena de conexión que copió en Obtención de la cadena de conexión del servicio de aprovisionamiento.

    private static final String PROVISIONING_CONNECTION_STRING = "[Provisioning Connection String]";
    
  6. Agregue los detalles del dispositivo de TPM. Reemplace el [RegistrationId] y [TPM Endorsement Key] en las siguientes instrucciones por la clave de aprobación y el identificador de registro.

    private static final String REGISTRATION_ID = "[RegistrationId]";
    private static final String TPM_ENDORSEMENT_KEY = "[TPM Endorsement Key]";
    
    • Si usa este artículo junto con el inicio rápido de Creación y aprovisionamiento de un dispositivo de TPM simulado para aprovisionar un dispositivo simulado, use elidentificador de registro y la clave de aprobación que anotó de esta guía rápida.

    • Si usa este artículo para crear una inscripción individual de ejemplo y no pretende usarla para inscribir un dispositivo, puede usar el siguiente valor para una clave de aprobación:

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

      Escriba su propio valor para el identificador de registro, por ejemplo, "myJavaDevice".

  7. En el caso de las inscripciones individuales, puede elegir establecer un identificador de dispositivo que DPS asigne al dispositivo cuando lo aprovisione en IoT Hub. Si no asigna un identificador de dispositivo, DPS usa el identificador de registro como identificador de dispositivo. De forma predeterminada, este ejemplo asigna "myJavaDevice" como identificador de dispositivo. Si desea cambiar el identificador de dispositivo, modifique la siguiente instrucción:

        private static final String DEVICE_ID = "myJavaDevice";
    

    Si no desea asignar un identificador de dispositivo específico, convierta en comentario la siguiente instrucción:

    individualEnrollment.setDeviceId(DEVICE_ID);
    
  8. El ejemplo permite establecer un centro de IoT en inscripción individual para el dispositivo. Este centro de IoT debe ser uno que se haya vinculado anteriormente al servicio de aprovisionamiento. En este artículo, se permite que DPS elija entre los centros vinculados según la directiva de asignación predeterminada, distribución ponderada uniformemente. Escriba la siguiente instrucción en el archivo:

    individualEnrollment.setIotHubHostName(IOTHUB_HOST_NAME);
    
  9. El ejemplo crea, actualiza, consulta y elimina una inscripción de un dispositivo de TPM individual. Para comprobar si la inscripción se realizó correctamente en el portal, convierta temporalmente en comentario las siguientes líneas de código al final del archivo:

    // *********************************** Delete info of individualEnrollment ************************************
    System.out.println("\nDelete the individualEnrollment...");
    provisioningServiceClient.deleteIndividualEnrollment(REGISTRATION_ID);
    
  10. Guarde los cambios.

Ejecución del ejemplo de inscripción individual

  1. Ejecución del ejemplo:

    dotnet run
    
  2. Tras una creación correcta, la ventana de comandos muestra las propiedades dela nueva inscripción.

Para ejecutar el ejemplo, necesita el cadena de conexión para el servicio de aprovisionamiento que copió en la sección anterior y la clave de aprobación del dispositivo. Si siguió la guía de inicio rápido Creación y aprovisionamiento de un dispositivo simulado para crear un dispositivo de TPM simulado, use la clave que se creó para dicho dispositivo. En caso contrario, para crear una inscripción individual de ejemplo, puede usar la siguiente clave de aprobación proporcionada con el SDK de servicio de Node.js:

AToAAQALAAMAsgAgg3GXZ0SEs/gakMyNRqXXJP1S124GUgtk8qHaGzMUaaoABgCAAEMAEAgAAAAAAAEAxsj2gUScTk1UjuioeTlfGYZrrimExB+bScH75adUMRIi2UOMxG1kw4y+9RW/IVoMl4e620VxZad0ARX2gUqVjYO7KPVt3dyKhZS3dkcvfBisBhP1XH9B33VqHG9SHnbnQXdBUaCgKAfxome8UmBKfe+naTsE5fkvjb/do3/dD6l4sGBwFCnKRdln4XpM03zLpoHFao8zOwt8l/uP3qUIxmCYv9A7m69Ms+5/pCkTu/rK4mRDsfhZ0QLfbzVI6zQFOKF/rwsfBtFeWlWtcuJMKlXdD8TXWElTzgh7JS4qhFzreL0c1mI0GCj+Aws0usZh7dLIVPnlgZcBhgy1SSDQMQ==
  1. Para crear una inscripción individual para el dispositivo de TPM, ejecute el comando siguiente (incluidas las comillas alrededor de los argumentos de comando):

    node create_individual_enrollment.js "<the connection string for your provisioning service>" "<endorsement key>"
    
  2. Tras una creación correcta, la ventana de comandos muestra las propiedades dela nueva inscripción.

  1. En la carpeta azure-iot-sdk-java\provisioning\provisioning-service-client-samples\service-enrollment-sample en el símbolo del sistema, ejecute el siguiente comando para compilar el ejemplo:

    mvn install -DskipTests
    

    Este comando descarga el paquete de Maven de cliente de servicio Azure IoT DPS en la máquina y compila la muestra. Este paquete incluye los archivos binarios para el SDK de servicio de Java.

  2. Cambie a la carpeta target y ejecute la muestra. La compilación del paso anterior genera el archivo .jar en la carpeta de destino con el siguiente formato de archivo: service-enrollment-sample-{version}-with-deps.jar; por ejemplo: service-enrollment-sample-1.8.1-with-deps.jar. Es posible que tenga que reemplazar la versión en el comando siguiente.

    cd target
    java -jar ./service-enrollment-sample-1.8.1-with-deps.jar
    
  3. Tras una creación correcta, la ventana de comandos muestra las propiedades dela nueva inscripción.

Para comprobar que se ha creado la inscripción individual:

  1. En Azure Portal, vaya a la instancia de Device Provisioning Service.

  2. En el menú de Configuración, seleccione Administrar inscripciones.

  3. Seleccione la pestaña Inscripciones individuales. Debería ver una nueva entrada de inscripción que corresponda al identificador de registro que usó en el ejemplo.

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.

Inscripción de un dispositivo simulado (opcional)

Si ha seguido los pasos descritos en el inicio rápido Creación y aprovisionamiento de un dispositivo TPM simulado para aprovisionar un dispositivo simulado, reanude el inicio rápido en Registro del dispositivo.

Si ha seguido los pasos descritos en el inicio rápido Creación y aprovisionamiento de un dispositivo TPM simulado para aprovisionar un dispositivo simulado, reanude el inicio rápido en Registro del dispositivo.

Si ha seguido los pasos descritos en el inicio rápido Creación y aprovisionamiento de un dispositivo TPM simulado para aprovisionar un dispositivo simulado, reanude el inicio rápido en Registro del dispositivo.

Limpieza de recursos

Si tiene previsto explorar los tutoriales del DPS, no elimine los recursos que se crearon en este artículo. De lo contrario, use el siguiente comando para eliminar todos los recursos creados en este artículo.

  1. En Azure Portal, vaya a la instancia de Device Provisioning Service.

  2. En el menú de Configuración, seleccione Administrar inscripciones.

  3. Seleccione la pestaña Inscripciones individuales.

  4. Active la casilla situada junto al identificador de registro de la entrada de inscripción que creó en este artículo.

  5. En la parte superior de la página, seleccione Eliminar.

  1. Si ha seguido los pasos del inicio rápido Creación y aprovisionamiento de un dispositivo de TPM simulado para crear un dispositivo de TPM simulado, haga lo siguiente:

    1. En Azure Portal, vaya a la instancia de IoT Hub donde se aprovisionó el dispositivo.

    2. En el menú de la izquierda, en Administración de dispositivos, seleccione Dispositivos.

    3. Active la casilla situada junto al campo ID de dispositivo del dispositivo que registró en este artículo.

    4. Seleccione Eliminar en la parte superior del panel.

  1. Si ha seguido los pasos del inicio rápido Creación y aprovisionamiento de un dispositivo de TPM simulado para crear un dispositivo de TPM simulado, haga lo siguiente:

    1. Cierre la ventana del simulador de TPM y la ventana de salida de ejemplo para el dispositivo simulado.

    2. En Azure Portal, vaya a la instancia de IoT Hub donde se aprovisionó el dispositivo.

    3. En el menú de la izquierda, en Administración de dispositivos, seleccione Dispositivos.

    4. Active la casilla situada junto al identificador de dispositivo del dispositivo que registró en este artículo.

    5. Seleccione Eliminar en la parte superior del panel.

  1. Si ha seguido los pasos del inicio rápido Creación y aprovisionamiento de un dispositivo de TPM simulado para crear un dispositivo de TPM simulado, haga lo siguiente:

    1. Cierre la ventana del simulador de TPM y la ventana de salida de ejemplo para el dispositivo simulado.

    2. En Azure Portal, vaya a la instancia de IoT Hub donde se aprovisionó el dispositivo.

    3. En el menú de la izquierda, en Administración de dispositivos, seleccione Dispositivos.

    4. Active la casilla situada junto al identificador de dispositivo del dispositivo que registró en este artículo.

    5. Seleccione Eliminar en la parte superior del panel.

Pasos siguientes

En este artículo, ha creado mediante programación una entrada de inscripción individual para un dispositivo de TPM. Opcionalmente, ha creado un dispositivo simulado de TPM en su equipo y lo ha aprovisionado con el centro de IoT mediante Azure IoT Hub Device Provisioning Service. Para más información, consulte los siguientes enlaces: