Controlar o acesso ao Hub IoT usando o Microsoft Entra ID

Você pode usar a ID do Microsoft Entra para autenticar solicitações para APIs de serviço do Hub IoT do Azure, como criar identidade de dispositivo e invocar método direto. Você também pode usar o controle de acesso baseado em função do Azure (Azure RBAC) para autorizar essas mesmas APIs de serviço. Usando essas tecnologias juntas, você pode conceder permissões para acessar APIs de serviço do Hub IoT a uma entidade de segurança do Microsoft Entra. Essa entidade de segurança pode ser um usuário, grupo ou entidade de serviço de aplicativo.

Autenticar o acesso usando a ID do Microsoft Entra e controlar as permissões usando o RBAC do Azure oferece segurança aprimorada e facilidade de uso em tokens de segurança. Para minimizar possíveis problemas de segurança inerentes aos tokens de segurança, recomendamos que você imponha a autenticação do Microsoft Entra sempre que possível.

Nota

A autenticação com ID do Microsoft Entra não é suportada para as APIs de dispositivo do Hub IoT (como mensagens de dispositivo para nuvem e propriedades de atualização relatadas). Use chaves simétricas ou X.509 para autenticar dispositivos no Hub IoT.

Autenticação e autorização

A autenticação é o processo de provar que você é quem diz ser. A autenticação verifica a identidade de um usuário ou dispositivo para o Hub IoT. Às vezes é encurtado para AuthN. Autorização é o processo de confirmação de permissões para um usuário ou dispositivo autenticado no Hub IoT. Ele especifica quais recursos e comandos você tem permissão para acessar e o que você pode fazer com esses recursos e comandos. A autorização às vezes é encurtada para AuthZ.

Quando uma entidade de segurança do Microsoft Entra solicita acesso a uma API de serviço do Hub IoT, a identidade da entidade de segurança é autenticada primeiro. Para autenticação, a solicitação precisa conter um token de acesso OAuth 2.0 em tempo de execução. O nome do recurso para solicitar o token é https://iothubs.azure.net. Se o aplicativo for executado em um recurso do Azure, como uma VM do Azure, aplicativo do Azure Functions ou aplicativo do Serviço de Aplicativo do Azure, ele poderá ser representado como uma identidade gerenciada.

Depois que a entidade de segurança do Microsoft Entra for autenticada, a próxima etapa será a autorização. Nesta etapa, o Hub IoT usa o serviço de atribuição de função Microsoft Entra para determinar quais permissões a entidade de segurança tem. Se as permissões da entidade de segurança corresponderem ao recurso ou API solicitado, o Hub IoT autorizará a solicitação. Portanto, esta etapa requer que uma ou mais funções do Azure sejam atribuídas à entidade de segurança. O Hub IoT fornece algumas funções internas que têm grupos comuns de permissões.

Gerenciar o acesso ao Hub IoT usando a atribuição de função RBAC do Azure

Com o Microsoft Entra ID e o RBAC, o Hub IoT exige que a entidade que solicita a API tenha o nível apropriado de permissão para autorização. Para dar permissão ao principal, atribua-lhe uma atribuição de função.

Para garantir o menor privilégio, atribua sempre a função apropriada no menor escopo de recurso possível, que provavelmente é o escopo do Hub IoT.

O Hub IoT fornece as seguintes funções internas do Azure para autorizar o acesso às APIs de serviço do Hub IoT usando o Microsoft Entra ID e o RBAC:

Função Description
Contribuidor de dados do Hub IoT Permite acesso total às operações do plano de dados do Hub IoT.
Leitor de dados do Hub IoT Permite acesso total de leitura às propriedades do plano de dados do Hub IoT.
Colaborador do Registro do Hub IoT Permite acesso total ao registro do dispositivo do Hub IoT.
Contribuidor gêmeo do Hub IoT Permite acesso de leitura e gravação a todos os dispositivos do Hub IoT e gêmeos de módulo.

Você também pode definir funções personalizadas para usar com o Hub IoT combinando as permissões necessárias. Para obter mais informações, consulte Criar funções personalizadas para o controle de acesso baseado em função do Azure.

Âmbito do recurso

Antes de atribuir uma função RBAC do Azure a uma entidade de segurança, determine o escopo de acesso que a entidade de segurança deve ter. É sempre melhor conceder apenas o âmbito mais restrito possível. As funções do RBAC do Azure definidas em um escopo mais amplo são herdadas pelos recursos abaixo delas.

Esta lista descreve os níveis nos quais você pode definir o escopo de acesso ao Hub IoT, começando com o escopo mais estreito:

  • O hub IoT. Neste escopo, uma atribuição de função se aplica ao hub IoT. Não há escopo menor do que um hub IoT individual. Não há suporte para atribuição de função em escopos menores, como identidade de dispositivo individual ou seção gêmea.
  • o grupo de recursos. Neste escopo, uma atribuição de função se aplica a todos os hubs IoT no grupo de recursos.
  • A assinatura. Neste escopo, uma atribuição de função se aplica a todos os hubs IoT em todos os grupos de recursos na assinatura.
  • Um grupo de gestão. Neste escopo, uma atribuição de função se aplica a todos os hubs IoT em todos os grupos de recursos em todas as assinaturas no grupo de gerenciamento.

Permissões para APIs de serviço do Hub IoT

A tabela a seguir descreve as permissões disponíveis para operações de API de serviço do Hub IoT. Para permitir que um cliente chame uma operação específica, certifique-se de que a função RBAC atribuída ao cliente ofereça permissões suficientes para a operação.

Ação do RBAC Description
Microsoft.Devices/IotHubs/devices/read Leia qualquer identidade de dispositivo ou módulo.
Microsoft.Devices/IotHubs/devices/write Crie ou atualize qualquer identidade de dispositivo ou módulo.
Microsoft.Devices/IotHubs/devices/delete Exclua qualquer identidade de dispositivo ou módulo.
Microsoft.Devices/IotHubs/twins/read Leia qualquer dispositivo ou módulo twin.
Microsoft.Devices/IotHubs/twins/write Escreva qualquer dispositivo ou módulo twin.
Microsoft.Devices/IotHubs/jobs/read Retornar uma lista de trabalhos.
Microsoft.Devices/IotHubs/jobs/write Crie ou atualize qualquer trabalho.
Microsoft.Devices/IotHubs/jobs/delete Exclua qualquer trabalho.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/send/action Envie uma mensagem da nuvem para o dispositivo para qualquer dispositivo.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/feedback/action Receba, conclua ou abandone uma notificação de feedback de mensagem da nuvem para o dispositivo.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/queue/purge/action Exclua todos os comandos pendentes de um dispositivo.
Microsoft.Devices/IotHubs/directMethods/invoke/action Invoque um método direto em qualquer dispositivo ou módulo.
Microsoft.Devices/IotHubs/fileUpload/notifications/action Receba, complete ou abandone notificações de upload de arquivos.
Microsoft.Devices/IotHubs/statistics/read Leia as estatísticas do dispositivo e do serviço.
Microsoft.Devices/IotHubs/configurations/read Leia as configurações de gerenciamento de dispositivos.
Microsoft.Devices/IotHubs/configurations/write Crie ou atualize configurações de gerenciamento de dispositivos.
Microsoft.Devices/IotHubs/configurations/delete Exclua qualquer configuração de gerenciamento de dispositivos.
Microsoft.Devices/IotHubs/configurations/applyToEdgeDevice/action Aplique o conteúdo de configuração a um dispositivo de borda.
Microsoft.Devices/IotHubs/configurations/testQueries/action Valide a condição de destino e as consultas métricas personalizadas para uma configuração.

Gorjeta

Nota

Para obter dados do Hub IoT usando a ID do Microsoft Entra, configure o roteamento para um ponto de extremidade de Hubs de Eventos personalizado. Para acessar o ponto de extremidade compatível com Hubs de Eventos interno, use o método de cadeia de conexão (chave de acesso compartilhado) como antes.

Impor a autenticação do Microsoft Entra

Por padrão, o Hub IoT oferece suporte ao acesso à API de serviço por meio da ID do Microsoft Entra e de políticas de acesso compartilhado e tokens de segurança. Para minimizar possíveis vulnerabilidades de segurança inerentes aos tokens de segurança, você pode desabilitar o acesso com políticas de acesso compartilhado.

Aviso

Ao negar conexões usando políticas de acesso compartilhado, todos os usuários e serviços que se conectam usando esse método perdem o acesso imediatamente. Notavelmente, como o Device Provisioning Service (DPS) só suporta a vinculação de hubs IoT usando políticas de acesso compartilhado, todos os fluxos de provisionamento de dispositivos falharão com erro "não autorizado". Prossiga com cuidado e planeje substituir o acesso pelo acesso baseado em função do Microsoft Entra. Não prossiga se utilizar DPS.

  1. Certifique-se de que seus clientes e usuários de serviço tenham acesso suficiente ao seu hub IoT. Siga o princípio do menor privilégio.
  2. No portal do Azure, vá para seu hub IoT.
  3. No painel esquerdo, selecione Políticas de acesso compartilhado.
  4. Em Ligar utilizando políticas de acesso partilhado, selecione Negar e reveja o aviso. Screenshot that shows how to turn off IoT Hub shared access policies.

As APIs do serviço Hub IoT agora podem ser acessadas somente por meio do Microsoft Entra ID e RBAC.

Acesso ao Microsoft Entra ID a partir do portal do Azure

Você pode fornecer acesso ao Hub IoT a partir do portal do Azure com políticas de acesso compartilhado ou permissões do Microsoft Entra.

Quando tenta aceder ao Hub IoT a partir do portal do Azure, o portal do Azure verifica primeiro se lhe foi atribuída uma função do Azure com Microsoft.Devices/iotHubs/listkeys/actiono . Se você tiver, o portal do Azure usa as chaves das políticas de acesso compartilhado para acessar o Hub IoT. Caso contrário, o portal do Azure tenta acessar dados usando sua conta do Microsoft Entra.

Para acessar o Hub IoT a partir do portal do Azure usando sua conta do Microsoft Entra, você precisa de permissões para acessar recursos de dados do Hub IoT (como dispositivos e gêmeos). Você também precisa de permissões para ir para o recurso do Hub IoT no portal do Azure. As funções internas fornecidas pelo Hub IoT concedem acesso a recursos como dispositivos e gêmeos, mas não concedem acesso ao recurso do Hub IoT. Portanto, o acesso ao portal também requer a atribuição de uma função do Azure Resource Manager, como o Reader. A função de leitor é uma boa escolha porque é a função mais restrita que permite navegar no portal. Ele não inclui a Microsoft.Devices/iotHubs/listkeys/action permissão (que fornece acesso a todos os recursos de dados do Hub IoT por meio de políticas de acesso compartilhado).

Para garantir que uma conta não tenha acesso fora das permissões atribuídas, não inclua a Microsoft.Devices/iotHubs/listkeys/action permissão ao criar uma função personalizada. Por exemplo, para criar uma função personalizada que possa ler identidades de dispositivo, mas não possa criar ou excluir dispositivos, crie uma função personalizada que:

  • Tem a Microsoft.Devices/IotHubs/devices/read ação de dados.
  • Não tem a Microsoft.Devices/IotHubs/devices/write ação de dados.
  • Não tem a Microsoft.Devices/IotHubs/devices/delete ação de dados.
  • Não tem a Microsoft.Devices/iotHubs/listkeys/action ação.

Em seguida, certifique-se de que a conta não tem outras funções que tenham a Microsoft.Devices/iotHubs/listkeys/action permissão, como Proprietário ou Colaborador. Para permitir que a conta tenha acesso aos recursos e navegue no portal, atribua o Reader.

Acesso à ID do Microsoft Entra a partir da CLI do Azure

A maioria dos comandos no Hub IoT suporta a autenticação Microsoft Entra. Você pode controlar o tipo de autenticação usado para executar comandos usando o --auth-type parâmetro que aceita key ou login valores. O key valor é o padrão.

  • Quando --auth-type tem o key valor, como antes, a CLI descobre automaticamente uma política adequada quando interage com o Hub IoT.

  • Quando --auth-type tem o login valor, um token de acesso da CLI do Azure registrada na entidade de segurança é usado para a operação.

Para obter mais informações, consulte a página de lançamento da extensão do Azure IoT para a CLI do Azure.

Exemplos de SDK

Próximos passos

Use o Serviço de Provisionamento de Dispositivos para provisionar vários dispositivos X.509 usando grupos de registro.