Поддержка Центра Интернета вещей для управляемых удостоверений

Управляемые удостоверения обеспечивают службы Azure автоматически управляемым удостоверением в идентификаторе Microsoft Entra ID в безопасном режиме. За счет этого разработчикам не требуется предоставлять удостоверение для управления учетными данными. Существует два типа управляемых удостоверений: назначаемые системой и назначаемые пользователем. Центр Интернета вещей поддерживает оба типа.

В Центре Интернета вещей управляемые удостоверения можно использовать для организации исходящего трафика к другим службам Azure для поддержки таких функций, как маршрутизация сообщений, отправка файлови пакетный импорт/экспорт устройств. Из этой статьи вы узнаете, как использовать назначаемые системой и пользователем управляемые удостоверения в центре Интернета вещей для реализации разных функциональных возможностей.

Необходимые компоненты

Управляемое удостоверение, назначаемое системой

Включение или отключение управляемого удостоверения, назначаемого системой, в портал Azure

  1. Войдите на портал Azure и перейдите к своему Центру Интернета вещей.

  2. Выберите удостоверение из раздела "Параметры безопасности" в меню навигации .

  3. Выберите вкладку Назначаемое системой.

  4. Задайте для управляемого удостоверения, назначаемого системой, значение "Включено" или "Отключить", а затем нажмите кнопку "Сохранить".

    Примечание.

    Вы не можете отключить управляемое удостоверение, назначаемое системой, во время его использования. Убедитесь, что пользовательские конечные точки не используют проверку подлинности управляемого удостоверения, назначаемого системой, перед отключением функции.

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

Включение назначаемого системой управляемого удостоверения во время создания центра с помощью шаблона ARM

Чтобы включить назначаемое системой управляемое удостоверение в центре Интернета вещей во время подготовки ресурсов, используйте шаблон Azure Resource Manager (ARM) ниже.

{
  "$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
              }
            }
          ] 
        }
      }
    }
  ]
}

После замены значений namelocationSKU.name и SKU.tier для ресурса можно с помощью Azure CLI развернуть его в существующей группе ресурсов:

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>

После создания ресурса можно получить назначаемое системой удостоверение для центра с помощью Azure CLI:

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

Управляемое удостоверение, назначаемое пользователем

В этом разделе вы узнаете, как добавить и удалить назначаемое пользователем управляемое удостоверение для виртуальной машины с помощью портала Azure.

  1. Сначала необходимо создать назначаемое пользователем управляемое удостоверение как автономный ресурс. Для этого выполните инструкции из раздела Создание управляемого удостоверения, назначаемого пользователем.

  2. Откройте центр Интернета вещей и перейдите в раздел Удостоверения на портале Центра Интернета вещей.

  3. На вкладке Назначено пользователем нажмите кнопку Привязать управляемое удостоверение, назначаемое пользователем. Выберите назначаемое пользователем управляемое удостоверение, которое необходимо добавить в центр, и нажмите кнопку Выбрать.

  4. Вы можете удалить назначаемое пользователем удостоверение из центра Интернета вещей. Выберите назначаемое пользователем удостоверение, которое необходимо удалить, и нажмите кнопку Удалить. Обратите внимание, что удостоверение удаляется только из центра Интернета вещей, но не в качестве ресурса. Чтобы удалить назначаемое пользователем удостоверение как ресурс, следуйте этим инструкциям.

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

Включение назначаемого пользователем управляемого удостоверения во время создания центра с помощью шаблона ARM

Следующий пример шаблона можно использовать для создания концентратора с управляемым удостоверением, назначаемым пользователем. В этом шаблоне создается одно удостоверение, назначаемое пользователем, под названием [iothub-name-provided]-identity, которое присваивается созданному центру Интернета вещей. При необходимости шаблон можно изменить, чтобы добавить несколько удостоверений, назначаемых пользователем.

{
  "$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>

После создания ресурса назначаемое пользователем управляемое удостоверение можно получить в центре с помощью Azure CLI:

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

Исходящие подключения из Центра Интернета вещей к другим ресурсам Azure

Управляемые удостоверения можно использовать для подключения для передачи исходящего трафика из Центра Интернета вещей к другим службам Azure для маршрутизации сообщений, отправки файлов и пакетного импорта или экспорта устройств. Вы можете выбрать управляемое удостоверение, которое будет использоваться для каждого исходящего подключения Центра Интернета вещей к принадлежащим заказчику конечным точкам, включая учетные записи хранения, концентратор событий и конечные точки служебной шины.

Примечание.

Только управляемое удостоверение, назначаемое системой, предоставляет Центру Интернета вещей доступ к частным ресурсам. Если вы хотите использовать управляемое удостоверение, назначаемое пользователем, необходимо включить общий доступ к этим частным ресурсам, чтобы разрешить подключение.

Настройка маршрутизации сообщений с помощью управляемых удостоверений

В этом разделе мы используем маршрутизацию сообщений в пользовательскую конечную точку Центров событий в качестве примера. Пример также относится к другим пользовательским конечным точкам маршрутизации.

  1. Перейдите в центр событий на портале Azure, чтобы назначить управляемому удостоверению необходимый доступ.

  2. Выберите Управление доступом (IAM) .

  3. Выберите "Добавить" > "Добавить назначение ролей".

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

  4. На вкладке Роль выберите Отправитель данных Центров событий Azure.

    Примечание.

    В качестве роли для учетной записи хранения выберите Участник для данных BLOB-объектов хранилища (не участник или участник учетной записи хранения). Для служебной шины выберите Отправитель данных служебной шины Azure.

    Screenshot showing Add role assignment page with Role tab selected.

  5. На вкладке "Участники" выберите "Управляемое удостоверение" и нажмите "Выбрать участников".

  6. Для управляемых удостоверений, назначаемых пользователем, выберите свою подписку, затем выберите Управляемое удостоверение, назначаемое пользователем, после чего выберите свое управляемое удостоверение, назначаемое пользователем.

  7. Для управляемых удостоверений, назначаемых системой, выберите свою подписку, затем выберите Все управляемые удостоверения, назначаемые системой, после чего выберите имя ресурса Центра Интернета вещей.

  8. Чтобы назначить роль, на вкладке Проверка и назначение выберите Проверка и назначение.

    Дополнительные сведения о назначении ролей см. в статье Назначение ролей Azure с помощью портала Azure

  9. Чтобы ограничить возможность подключения к пользовательской конечной точке через виртуальную сеть, необходимо активировать доверенное собственное исключение Майкрософт, которое предоставит центру Интернета вещей доступ к определенной конечной точке. Например, если вы добавляете пользовательскую конечную точку концентратора событий, откройте вкладку Брандмауэры и виртуальные сети в центре событий и включите параметр Разрешить доступ из выбранных сетей. В разделе Исключения установите флажок Разрешить доверенным службам Майкрософт доступ к этим концентраторам событий. Нажмите кнопку Сохранить. Это также относится к учетной записи хранения и служебной шине. Дополнительные сведения о поддержке виртуальных сетей в Центре Интернета вещей приведены здесь.

    Примечание.

    Перед добавлением концентратора событий в качестве пользовательской конечной точки в Центре Интернета вещей необходимо выполнить описанные выше действия, чтобы назначить управляемому удостоверению необходимый доступ. Подождите несколько минут, пока назначение роли не будет распространено.

  10. Затем перейдите в свой центр Интернета вещей. В центре перейдите к маршрутизации сообщений, а затем нажмите кнопку "Добавить".

  11. На вкладке "Конечная точка" создайте конечную точку для концентратора событий, указав следующие сведения:

    Параметр Значение
    Тип конечной точки Выберите Концентраторы событий.
    Имя конечной точки Укажите уникальное имя новой конечной точки или выберите "Выбрать существующую ", чтобы выбрать существующую конечную точку Центров событий.
    Пространство имен Центров событий Используйте раскрывающееся меню, чтобы выбрать существующее пространство имен Центров событий в подписке.
    Экземпляр концентратора событий Используйте раскрывающееся меню, чтобы выбрать существующий концентратор событий в пространстве имен.
    Тип проверки подлинности Выберите назначаемое пользователем, а затем используйте раскрывающееся меню, чтобы выбрать удостоверение , назначенное пользователем, созданное в концентраторе событий.

    Screenshot that shows event hub endpoint with user assigned authentication.

  12. Нажмите кнопку "Создать+ далее". Вы можете продолжить работу мастера, чтобы создать маршрут, указывающий на эту конечную точку, или закрыть мастер.

Можно изменить тип проверки подлинности существующей пользовательской конечной точки. Чтобы изменить конечную точку, выполните следующие действия.

  1. В центре Интернета вещей выберите маршрутизацию сообщений в области навигации слева и пользовательские конечные точки.

  2. Выберите поле проверка для настраиваемой конечной точки, которую требуется изменить, и выберите тип проверки подлинности.

  3. Выберите новый тип проверки подлинности для этой конечной точки, а затем нажмите кнопку "Сохранить".

Настройка отправки файлов с помощью управляемых удостоверений

Функция отправки файлов в Центре Интернета вещей позволяет устройствам передавать файлы в принадлежащую заказчику учетную запись хранения. Чтобы функция отправки файлов работала, у Центра Интернета вещей должно быть подключение к учетной записи хранения. Как и при маршрутизации сообщений, вы можете выбрать тип проверки подлинности и управляемое удостоверение для организации исходящего трафика из Центра Интернета вещей к учетной записи хранения Azure.

  1. Войдите в свою учетную запись хранения на портале Azure.

  2. Выберите Управление доступом (IAM) .

  3. Выберите "Добавить" > "Добавить назначение ролей".

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

  4. На вкладке Роль выберите Участник для данных BLOB-объектов хранилища. (Не выбирайте Участник или Участник учетной записи хранения.)

  5. На вкладке "Участники" выберите "Управляемое удостоверение" и нажмите "Выбрать участников".

  6. Для управляемых удостоверений, назначаемых пользователем, выберите свою подписку, затем выберите Управляемое удостоверение, назначаемое пользователем, после чего выберите свое управляемое удостоверение, назначаемое пользователем.

  7. Для управляемых удостоверений, назначаемых системой, выберите свою подписку, затем выберите Все управляемые удостоверения, назначаемые системой, после чего выберите имя ресурса Центра Интернета вещей.

  8. Чтобы назначить роль, на вкладке Проверка и назначение выберите Проверка и назначение.

    Дополнительные сведения о назначении ролей см. в статье Назначение ролей Azure с помощью портала Azure

    Чтобы ограничить возможность подключения к учетной записи хранения через виртуальную сеть, необходимо активировать доверенное собственное исключение Майкрософт, которое предоставит центру Интернета вещей доступ к определенной учетной записи хранения. На странице ресурсов учетной записи хранения откройте вкладку Брандмауэры и виртуальные сети и включите параметр Разрешить доступ из выбранных сетей. В разделе Исключения установите флажок Разрешить доверенным службам Майкрософт доступ к этой учетной записи хранения. Нажмите кнопку Сохранить. Дополнительные сведения о поддержке виртуальных сетей в Центре Интернета вещей приведены здесь.

    Примечание.

    Прежде чем сохранять учетную запись хранения в Центре Интернета вещей для передачи файлов с использованием управляемого удостоверения, необходимо выполнить описанные выше действия, чтобы назначить управляемому удостоверению необходимый доступ. Подождите несколько минут, пока назначение роли не будет распространено.

  9. На странице ресурсов центра Интернета вещей откройте вкладку Отправка файлов.

  10. На появившейся странице выберите контейнер, который планируете использовать в хранилище BLOB-объектов, и настройте параметры уведомлений о файлах, срок жизни SAS, срок жизни по умолчанию и максимальное число доставок. Выберите тип проверки подлинности и нажмите кнопку Сохранить. Если на этом этапе возникает ошибка, временно настройте учетную запись хранения, разрешающую доступ из всех сетей, а затем повторите попытку. Вы можете настроить брандмауэр в учетной записи хранения после завершения настройки передачи файлов.

    Screen shot that shows file upload with msi.

    Примечание.

    В сценарии отправки файла концентратор и устройство необходимо подключить к учетной записи хранения. Описанные выше действия предназначены для подключения центра Интернета вещей к учетной записи хранения с требуемым типом аутентификации. Вам по-прежнему нужно подключить устройство к хранилищу с помощью универсального кода ресурса SAS. На сегодняшний день универсальный код ресурса SAS создается с помощью строки подключения. Вскоре мы добавим поддержку для создания универсального кода ресурса SAS с управляемым удостоверением. Выполните эти действия.

Настройка массового импорта и экспорта устройств с помощью управляемых удостоверений

Центр Интернета вещей поддерживает массовый импорт и экспорт сведений об устройствах из предоставленного клиентом большого двоичного объекта или в него. Для использования этой функции требуется подключение из Центра Интернета вещей к учетной записи хранения.

  1. Войдите в свою учетную запись хранения на портале Azure.

  2. Выберите Управление доступом (IAM) .

  3. Выберите "Добавить" > "Добавить назначение ролей".

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

  4. На вкладке Роль выберите Участник для данных BLOB-объектов хранилища. (Не выбирайте Участник или Участник учетной записи хранения.)

  5. На вкладке "Участники" выберите "Управляемое удостоверение" и нажмите "Выбрать участников".

  6. Для управляемых удостоверений, назначаемых пользователем, выберите свою подписку, затем выберите Управляемое удостоверение, назначаемое пользователем, после чего выберите свое управляемое удостоверение, назначаемое пользователем.

  7. Для управляемых удостоверений, назначаемых системой, выберите свою подписку, затем выберите Все управляемые удостоверения, назначаемые системой, после чего выберите имя ресурса Центра Интернета вещей.

  8. Чтобы назначить роль, на вкладке Проверка и назначение выберите Проверка и назначение.

    Дополнительные сведения о назначении ролей см. в статье Назначение ролей Azure с помощью портала Azure

Использование REST API или пакета SDK для заданий импорта и экспорта

Теперь вы можете использовать REST API службы Интернета вещей Azure для создания заданий импорта и экспорта. В тексте запроса необходимо указать следующие свойства:

  • storageAuthenticationType: задайте значение identityBased.
  • inputBlobContainerUri: устанавливайте это свойство только в заданиях импорта.
  • outputBlobContainerUri: устанавливайте это свойство в заданиях как импорта, так и экспорта.
  • identity: задайте значение, которое будет использоваться управляемым удостоверением.

Пакеты SDK для Центра Интернета вещей Azure также поддерживают эту функцию в диспетчере реестра клиента службы. В следующем фрагменте кода показано, как инициировать задание импорта или экспорта в с помощью пакета SDK для C#.

Фрагмент кода на 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
        });

Фрагмент кода на 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>"
    ) 
))

Примечание.

  • Если для storageAuthenticationType задано значение identityBased, а свойство userAssignedIdentity не равно null, задания будут использовать указанное управляемое удостоверение, назначаемое пользователем.
  • Если в центре Интернета вещей не настроено назначаемое пользователем управляемое удостоверение, заданное параметром userAssignedIdentity, задание завершится ошибкой.
  • Если для storageAuthenticationType задано значение identityBased, а свойство userAssignedIdentity равно null, задания будут использовать управляемое удостоверение, назначаемое системой.
  • Если в центре Интернета вещей не настроено назначаемое пользователем управляемое удостоверение, задание завершится ошибкой.
  • Если для storageAuthenticationType задано значение identityBased и в концентраторе не настроены ни назначаемые пользователем, ни назначаемые системой управляемые удостоверения, задание завершится ошибкой.

Примеры пакетов SDK

Следующие шаги

Используйте приведенные ниже ссылки для получения дополнительных сведений о функциях Центра Интернета вещей: