Compatibilidad de IoT Hub con identidades administradas

Las identidades administradas proporcionan a los servicios de Azure una identidad administrada automáticamente en Microsoft Entra ID de forma segura. Esto elimina la necesidad de que los desarrolladores tengan que administrar las credenciales proporcionando una identidad. Hay dos tipos de identidades administradas: asignadas por el sistema y asignadas por el usuario. IoT Hub admite ambas.

En IoT Hub, las identidades administradas se pueden usar para la conectividad de salida de IoT Hub a otros servicios de Azure para las características como el enrutamiento de mensajes, la carga de archivos y la importación o exportación masivas de dispositivos. En este artículo, aprenderá a usar identidades administradas asignadas por el sistema y asignadas por el usuario en IoT Hub para distintas funcionalidades.

Requisitos previos

Identidad administrada asignada por el sistema

Habilitación o deshabilitación de una identidad administrada asignada por el sistema en Azure Portal

  1. Inicie sesión en Azure Portal y vaya a IoT Hub.

  2. Seleccione Identidad en la sección Configuración de seguridad del menú de navegación.

  3. Seleccione la pestaña Asignado por el sistema.

  4. Establezca el estado de la identidad administrada asignada por el sistema en Activado o Desactivado y, a continuación, seleccione Guardar.

    Nota:

    No se puede desactivar la identidad administrada asignada por el sistema mientras está en uso. Asegúrese de que ningún punto de conexión personalizado use la autenticación de identidad administrada asignada por el sistema antes de deshabilitar la característica.

    Screenshot showing where to turn on system-assigned managed identity for an IoT hub.

Habilitación de la identidad administrada asignada por el sistema en el momento de la creación del centro con la plantilla de ARM

Para habilitar la identidad administrada asignada por el sistema en el centro de IoT en el momento del aprovisionamiento de recursos, use la plantilla de Azure Resource Manager (ARM) siguiente.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": 
    {
      "iotHubName": {
        "type": "string",
        "metadata": {
          "description": "Name of iothub resource"
        }
      },
      "skuName": {
        "type": "string",
        "defaultValue": "S1",
        "metadata": {
          "description": "SKU name of iothub resource, by default is Standard S1"
        }
      },
      "skuTier": {
        "type": "string",
        "defaultValue": "Standard",
        "metadata": {
          "description": "SKU tier of iothub resource, by default is Standard"
        }
      },
      "location": {
        "type": "string",
        "defaultValue": "[resourceGroup().location]",
        "metadata": {
          "description": "Location of iothub resource. Please provide any of supported-regions of iothub"
        }
      }
    },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-10-01",
      "name": "createIotHub",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.Devices/IotHubs",
              "apiVersion": "2021-03-31",
              "name": "[parameters('iotHubName')]",
              "location": "[parameters('location')]",
              "identity": {
                "type": "SystemAssigned"
              },
              "sku": {
              "name": "[parameters('skuName')]",
              "tier": "[parameters('skuTier')]",
              "capacity": 1
              }
            }
          ] 
        }
      }
    }
  ]
}

Después de sustituir los valores del recurso name, location, SKU.name y SKU.tier, puede usar la CLI de Azure para implementar el recurso en un grupo de recursos existente mediante:

az deployment group create --name <deployment-name> --resource-group <resource-group-name> --template-file <template-file.json> --parameters iotHubName=<valid-iothub-name> skuName=<sku-name> skuTier=<sku-tier> location=<any-of-supported-regions>

Una vez creado el recurso, puede recuperar la identidad asignada por el sistema al centro mediante la CLI de Azure:

az resource show --resource-type Microsoft.Devices/IotHubs --name <iot-hub-resource-name> --resource-group <resource-group-name>

Identidad administrada asignada por el usuario

En esta sección, aprenderá a agregar y quitar una identidad administrada asignada por el usuario desde un centro de IoT mediante Azure Portal.

  1. En primer lugar, debe crear una identidad administrada asignada por el usuario como un recurso independiente. Para hacerlo, puede seguir las instrucciones de Creación de una identidad administrada asignada por el usuario.

  2. Vaya al centro de IoT y navegue hasta Identidad en el portal de IoT Hub.

  3. En la pestaña User-Assigned (Asignada por el usuario), haga clic en Associate a user-assigned managed identity (Asociar una identidad administrada por el usuario). Elija la identidad administrada asignada por el usuario que desea agregar al centro y, a continuación, haga clic en Seleccionar.

  4. Puede quitar una identidad asignada por el usuario de un centro de IoT. Elija la identidad asignada por el usuario que quiera quitar y haga clic en el botón Quitar. Tenga en cuenta que solo la quita del centro de IoT y no se elimina la identidad asignada por el usuario como recurso. Para eliminar la identidad asignada por el usuario como recurso, siga las instrucciones de Eliminación de una identidad administrada asignada por el usuario.

    Screenshot showing how to add user-assigned managed identity for an I O T hub.

Habilitación de la identidad administrada asignada por el usuario en el momento de la creación del centro con la plantilla de ARM

La plantilla de ejemplo siguiente se puede usar para crear un centro con una identidad administrada asignada por el usuario. Esta plantilla crea una identidad asignada por el usuario con el nombre [iothub-name-provided]-identity y la asigna al centro de IoT creado. Puede cambiar la plantilla para agregar varias identidades asignadas por el usuario según sea necesario.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "iotHubName": {
      "type": "string",
      "metadata": {
        "description": "Name of iothub resource"
      }
    },
  "skuName": {
    "type": "string",
    "defaultValue": "S1",
    "metadata": {
      "description": "SKU name of iothub resource, by default is Standard S1"
    }
  },
  "skuTier": {
    "type": "string",
    "defaultValue": "Standard",
    "metadata": {
      "description": "SKU tier of iothub resource, by default is Standard"
    }
  },
  "location": {
    "type": "string",
    "defaultValue": "[resourceGroup().location]",
    "metadata": {
      "description": "Location of iothub resource. Please provide any of supported-regions of iothub"
    }
  }
},
  "variables": {
    "identityName": "[concat(parameters('iotHubName'), '-identity')]"
  },
  "resources": [
    {
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2020-10-01",
      "name": "createIotHub",
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "resources": [
            {
              "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
              "name": "[variables('identityName')]",
              "apiVersion": "2018-11-30",
              "location": "[resourceGroup().location]"
            },
            {
              "type": "Microsoft.Devices/IotHubs",
              "apiVersion": "2021-03-31",
              "name": "[parameters('iotHubName')]",
              "location": "[parameters('location')]",
              "identity": {
                "type": "UserAssigned",
                "userAssignedIdentities": {
                  "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('identityName'))]": {}
                }
              },
              "sku": {
                "name": "[parameters('skuName')]",
                "tier": "[parameters('skuTier')]",
                "capacity": 1
              },
              "dependsOn": [
                "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',variables('identityName'))]"
              ]
            }
          ]
        }
      }
    }
  ]
}
az deployment group create --name <deployment-name> --resource-group <resource-group-name> --template-file <template-file.json> --parameters iotHubName=<valid-iothub-name> skuName=<sku-name> skuTier=<sku-tier> location=<any-of-supported-regions>

Una vez creado el recurso, puede recuperar la identidad administrada asignada por el usuario al centro mediante la CLI de Azure:

az resource show --resource-type Microsoft.Devices/IotHubs --name <iot-hub-resource-name> --resource-group <resource-group-name>

Conectividad de salida de IoT Hub a otros recursos de Azure

Las identidades administradas se pueden usar para la conectividad de salida desde IoT Hub a otros servicios de Azure para el enrutamiento de mensajes, la carga de archivos y la importación o exportación de dispositivos en bloque. Puede elegir qué identidad administrada usar para cada conexión de salida de IoT Hub a los puntos de conexión propiedad del cliente, incluidas las cuentas de almacenamiento, los centros de eventos y los puntos de conexión de Service Bus.

Nota

Solo la identidad administrada asignada por el sistema proporciona a IoT Hub acceso a recursos privados. Si desea usar la identidad administrada asignada por el usuario, debe habilitarse el acceso público debe habilitarse para permitir la conectividad.

Configuración del enrutamiento de mensajes con identidades administradas

En esta sección, se usa el enrutamiento de mensajes a un punto de conexión personalizado de Event Hubs como ejemplo. El ejemplo se aplica a otros puntos de conexión personalizados de enrutamiento.

  1. Vaya al centro de eventos en Azure Portal para asignar el acceso correcto a la identidad administrada.

  2. Seleccione Access Control (IAM) .

  3. Seleccione Agregar > Agregar asignación de roles.

    Screenshot showing Access control (IAM) page with Add role assignment menu open.

  4. En la pestaña Rol, seleccione Emisor de datos de Azure Event Hubs.

    Nota

    Para una cuenta de almacenamiento, seleccione Colaborador de datos de Storage Blob (no Colaborador ni Colaborador de la cuenta de almacenamiento) como rol. En Service Bus, seleccione Remitente de los datos de Azure Service Bus.

    Screenshot showing Add role assignment page with Role tab selected.

  5. En la pestaña Miembros, seleccione Identidad administrada y, a continuación, seleccione Seleccionar miembros.

  6. En el caso de las identidades administradas asignadas por el usuario, seleccione la suscripción, seleccione Identidad administrada asignada por el usuario y, por último, seleccione la identidad que desee.

  7. En el caso de las identidades administradas asignadas por el sistema, seleccione la suscripción, seleccione Identidad administrada asignada por el sistema y, por último, seleccione el nombre del recurso de IoT Hub.

  8. En la pestaña Revisión y asignación, seleccione Revisión y asignación para asignar el rol.

    Para más información sobre las asignaciones de roles, consulte Asignación de roles de Azure mediante Azure Portal.

  9. Si necesita restringir la conectividad al punto de conexión personalizado a través de una red virtual, debe activar la excepción de primera entidad de confianza de Microsoft para proporcionar a su centro de IoT acceso al punto de conexión específico. Por ejemplo, si agrega un punto de conexión personalizado del centro de eventos, vaya a la pestaña Firewalls y redes virtuales del centro de eventos y habilite la opción Allow access from selected networks (Permitir el acceso desde redes seleccionadas). En la lista Excepciones, active la casilla situada junto a Allow trusted Microsoft services to access event hubs (Permitir que los servicios de Microsoft de confianza accedan a esta instancia de Event Hubs). Haga clic en el botón Save (Guardar). Esto también se aplica a la cuenta de almacenamiento y a Service Bus. Obtenga información sobre la compatibilidad de Azure IoT Hub con redes virtuales.

    Nota

    Debe completar los pasos anteriores para asignar a la identidad administrada el acceso correcto antes de agregar el centro de eventos como punto de conexión personalizado en IoT Hub. Espere unos minutos a que se propague la asignación de roles.

  10. A continuación, vaya a IoT Hub. En el centro, vaya a Enrutamiento de mensajes y seleccione Agregar.

  11. En la pestaña Punto de conexión, cree un punto de conexión para el centro de eventos con la siguiente información:

    Parámetro Value
    Tipo de punto de conexión Seleccione Centro de eventos.
    Nombre del extremo Proporcione un nombre único para un nuevo punto de conexión o seleccione Seleccionar existente para elegir un punto de conexión de Centro de eventos existente.
    Espacio de nombres de Event Hubs Use el menú desplegable para seleccionar un espacio de nombres de un Centro de eventos existente en su suscripción.
    Instancia de Centro de eventos Use el menú desplegable para seleccionar un centro de eventos de su espacio de nombres.
    Tipo de autenticación Seleccione Asignado por el usuario y, a continuación, use el menú desplegable para seleccionar la identidad asignada por el usuario que creó en el centro de eventos.

    Screenshot that shows event hub endpoint with user assigned authentication.

  12. Seleccione Crear y siguiente. Puede continuar con el asistente para crear una ruta que apunte a este punto de conexión o puede cerrar el asistente.

Puede cambiar el tipo de autenticación de un punto de conexión personalizado existente. Siga estos pasos para modificar un punto de conexión:

  1. En el centro de IoT, seleccione Enrutamiento de mensajes en el panel de navegación izquierdo y, después, Puntos de conexión personalizados.

  2. Marque la casilla del punto de conexión personalizado que desea modificar y, a continuación, seleccione Cambiar tipo de autenticación.

  3. Elija el nuevo tipo de autenticación para este punto de conexión y seleccione Guardar.

Configuración de la carga de archivos con identidades administradas

La característica de carga de archivos de IoT Hub permite a los dispositivos cargar archivos en una cuenta de almacenamiento propiedad del cliente. Para permitir que la carga de archivos funcione, IoT Hub debe tener conectividad con la cuenta de almacenamiento. De forma similar al enrutamiento de mensajes, puede elegir el tipo de autenticación preferido y la identidad administrada para la conectividad de salida de IoT Hub a la cuenta de Azure Storage.

  1. En Azure Portal, vaya a la cuenta de almacenamiento.

  2. Seleccione Access Control (IAM) .

  3. Seleccione Agregar > Agregar asignación de roles.

    Screenshot showing Access control (IAM) page with Add role assignment menu open.

  4. En la pestaña Rol, seleccione Colaborador de datos de Storage Blob. (No seleccione Colaborador ni Colaborador de la cuenta de almacenamiento).

  5. En la pestaña Miembros, seleccione Identidad administrada y, a continuación, seleccione Seleccionar miembros.

  6. En el caso de las identidades administradas asignadas por el usuario, seleccione la suscripción, seleccione Identidad administrada asignada por el usuario y, por último, seleccione la identidad que desee.

  7. En el caso de las identidades administradas asignadas por el sistema, seleccione la suscripción, seleccione Identidad administrada asignada por el sistema y, por último, seleccione el nombre del recurso de IoT Hub.

  8. En la pestaña Revisión y asignación, seleccione Revisión y asignación para asignar el rol.

    Para más información sobre las asignaciones de roles, consulte Asignación de roles de Azure mediante Azure Portal.

    Si necesita restringir la conectividad a la cuenta de almacenamiento a través de una red virtual, debe activar la excepción de primera entidad de confianza de Microsoft para proporcionar a su centro de IoT acceso a la cuenta de almacenamiento. En la página de recursos de la cuenta de almacenamiento, vaya a la pestaña Firewalls y redes virtuales y habilite la opción Allow access from selected networks (Permitir acceso desde redes seleccionadas). En la lista Excepciones, active la casilla situada junto a Permitir que los servicios de Microsoft de confianza accedan a esta cuenta de almacenamiento. Haga clic en el botón Save (Guardar). Obtenga información sobre la compatibilidad de Azure IoT Hub con redes virtuales.

    Nota

    Debe completar los pasos anteriores para asignar a la identidad administrada el acceso correcto antes de guardar la cuenta de almacenamiento en IoT Hub para la carga de archivos mediante la identidad administrada. Espere unos minutos a que se propague la asignación de roles.

  9. En la página de recursos del centro de IoT, vaya a la pestaña Carga de archivo.

  10. En la página que se muestra, seleccione el contenedor que quiere usar en Blob Storage, y configure las opciones Configuración de notificación de archivos, TTL de SAS, TTL predeterminado y Número máximo de entregas. Elija el tipo de autenticación preferido y haga clic en Guardar. Si recibe un error en este paso, establezca de forma temporal la cuenta de almacenamiento para permitir el acceso desde Todas las redes y, a continuación, vuelva a intentarlo. Puede configurar el firewall en la cuenta de almacenamiento una vez completada la configuración de carga de archivos.

    Screen shot that shows file upload with msi.

    Nota:

    En el escenario de carga de archivos, tanto el centro como el dispositivo deben conectarse con la cuenta de almacenamiento. Los pasos anteriores sirven para conectar el centro de IoT a la cuenta de almacenamiento con el tipo de autenticación deseado. Todavía debe conectar el dispositivo al almacenamiento mediante el URI de SAS. Actualmente, el URI de SAS se genera mediante la cadena de conexión. Pronto se agregará compatibilidad para generar el URI de SAS con la identidad administrada. Siga los pasos descritos en Carga de archivos.

Configuración de la importación y exportación masivas de dispositivos con identidades administradas

IoT Hub admite la funcionalidad para importar/exportar información de dispositivos de forma masiva desde y hacia una instancia de Storage Blob proporcionada por el cliente. Esta funcionalidad requiere conectividad de IoT Hub a la cuenta de almacenamiento.

  1. En Azure Portal, vaya a la cuenta de almacenamiento.

  2. Seleccione Access Control (IAM) .

  3. Seleccione Agregar > Agregar asignación de roles.

    Screenshot showing Access control (IAM) page with Add role assignment menu open.

  4. En la pestaña Rol, seleccione Colaborador de datos de Storage Blob. (No seleccione Colaborador ni Colaborador de la cuenta de almacenamiento).

  5. En la pestaña Miembros, seleccione Identidad administrada y, a continuación, seleccione Seleccionar miembros.

  6. En el caso de las identidades administradas asignadas por el usuario, seleccione la suscripción, seleccione Identidad administrada asignada por el usuario y, por último, seleccione la identidad que desee.

  7. En el caso de las identidades administradas asignadas por el sistema, seleccione la suscripción, seleccione Identidad administrada asignada por el sistema y, por último, seleccione el nombre del recurso de IoT Hub.

  8. En la pestaña Revisión y asignación, seleccione Revisión y asignación para asignar el rol.

    Para más información sobre las asignaciones de roles, consulte Asignación de roles de Azure mediante Azure Portal.

Uso de la API de REST o el SDK para trabajos de importación y exportación

Ahora puede usar la API de REST de Azure IoT para crear trabajos de importación y exportación. Deberá proporcionar las siguientes propiedades en el cuerpo de la solicitud:

  • storageAuthenticationType: establezca el valor en identityBased.
  • inputBlobContainerUri: establezca esta propiedad solo en el trabajo de importación.
  • outputBlobContainerUri: establezca esta propiedad para los trabajos de importación y exportación.
  • identity: establezca el valor en la identidad administrada que se usará.

Los SDK de Azure IoT Hub también admiten esta funcionalidad en el administrador del Registro del cliente del servicio. El fragmento de código siguiente muestra cómo iniciar un trabajo de importación o exportación al usar el SDK de C#.

Fragmento de código C#

    // Create an export job
 
    using RegistryManager srcRegistryManager = RegistryManager.CreateFromConnectionString(hubConnectionString);
 
    JobProperties jobProperties = JobProperties.CreateForExportJob(
        outputBlobContainerUri: blobContainerUri,
        excludeKeysInExport: false,
        storageAuthenticationType: StorageAuthenticationType.IdentityBased,
        identity: new ManagedIdentity
        {
            userAssignedIdentity = userDefinedManagedIdentityResourceId
        });
    // Create an import job
    
    using RegistryManager destRegistryManager = RegistryManager.CreateFromConnectionString(hubConnectionString);
 
    JobProperties jobProperties = JobProperties.CreateForImportJob(
        inputBlobContainerUri: blobContainerUri,
        outputBlobContainerUri: blobContainerUri,
        storageAuthenticationType: StorageAuthenticationType.IdentityBased,
        identity: new ManagedIdentity
        {
            userAssignedIdentity = userDefinedManagedIdentityResourceId
        });

Fragmento de código Python

# see note below
iothub_job_manager = IoTHubJobManager("<IoT Hub connection string>")

# Create an import job
result = iothub_job_manager.create_import_export_job(JobProperties(
    type="import",
    input_blob_container_uri="<input container URI>",
    output_blob_container_uri="<output container URI>",
    storage_authentication_type="identityBased",
    identity=ManagedIdentity(
        user_assigned_identity="<resource ID of user assigned managed identity>"
    )
))

# Create an export job
result = iothub_job_manager.create_import_export_job(JobProperties(
    type="export",
    output_blob_container_uri="<output container URI>",
    storage_authentication_type="identityBased",
    exclude_keys_in_export=True,
    identity=ManagedIdentity(
        user_assigned_identity="<resource ID of user assigned managed identity>"
    ) 
))

Nota

  • Si storageAuthenticationType se establece en identityBased y la propiedad userAssignedIdentity no es null, los trabajos usarán la identidad administrada asignada por el usuario especificada.
  • Si el centro de IoT no está configurado con la identidad administrada asignada por el usuario especificada en userAssignedIdentity, se producirá un error en el trabajo.
  • Si storageAuthenticationType se establece en identityBased, la propiedad userAssignedIdentity es NULL, los trabajos usarán la identidad asignada por el sistema.
  • Si el centro de IoT no está configurado con la identidad administrada asignada por el usuario, se producirá un error en el trabajo.
  • Si storageAuthenticationType se establece en identityBased y no se configuran identidades administradas asignadas por el usuario ni asignadas por el sistema en el centro, se producirá un error en el trabajo.

Ejemplos del SDK

Pasos siguientes

Use los vínculos siguientes para obtener más información sobre las características de IoT Hub: