Controlar o acesso ao Hub IoT usando o Microsoft Entra ID

Você pode usar a Microsoft Entra ID para autenticar solicitações para APIs de serviço do Hub IoT do Azure, como criar de identidade do dispositivo e invocar método direto. Você também pode usar o RBAC do Azure (controle de acesso baseado em função do Azure) 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 Microsoft Entra ID e controlar permissões usando o RBAC do Azure fornece segurança aprimorada e facilidade de uso em tokens de segurança. Para minimizar possíveis problemas de segurança inerentes a tokens de segurança, recomendamos usar a autenticação do Microsoft Entra sempre que possível.

Observação

A autenticação com o Microsoft Entra ID não tem suporte para APIs de dispositivo do Hub IoT (como mensagens de dispositivo para a nuvem e atualização de propriedades 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 no Hub IoT. Às vezes, a autenticação é abreviada para AuthN. A autorização é o processo de confirmação de permissões para um usuário ou dispositivo autenticado no Hub IoT. Ela especifica quais recursos e comandos você tem permissão para acessar e o que você pode fazer com esses recursos e comandos. Às vezes, a autorização é abreviada para AuthZ.

Quando uma entidade de segurança do Microsoft Entra solicita o acesso a uma API de serviço do Hub IoT, a identidade da entidade de segurança é autenticada pela primeira vez. Para autenticação, a solicitação precisa conter um token de acesso OAuth 2.0 no runtime. O nome do recurso para solicitar o token é https://iothubs.azure.net. Se o aplicativo for executado dentro de um recurso do Azure, como uma VM do Azure, um aplicativo do Azure Function ou um aplicativo do Serviço de Aplicativo, 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á autorização. Nesta etapa, o Hub IoT usa o serviço de atribuição de função do Microsoft Entra, as permissões que 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. A etapa de autorização 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 do RBAC do Azure

Com o Microsoft Entra ID e o RBAC, o Hub IoT requer que a entidade de segurança que solicita a API tenha o nível apropriado de permissão para fornecer a autorização. Para dar permissão à entidade de segurança, conceda a essa entidade uma atribuição de função.

Para garantir o privilégio mínimo, atribua sempre a função apropriada no menor escopo de recursos 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 Descrição
Colaborador de dados do Hub IoT Permite acesso completo às operações do plano de dados do Hub IoT.
Leitor de dados do Hub IoT Permite o acesso de leitura completo às propriedades do plano de dados do Hub IoT.
Colaborador de registro do Hub IoT Permite acesso completo ao registro de dispositivos do Hub IoT.
Colaborador de entrelaçamento do Hub IoT Permite acesso de leitura e gravação a todos os gêmeos de módulo e dispositivo do Hub IoT.

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

Escopo do recurso

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

A lista descreve os níveis de escopo de acesso que você pode definir para o Hub IoT, começando pelo escopo mais estreito:

  • O Hub IoT. Nesse 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 a atribuição de função em escopos menores, como identidade de dispositivo individual ou seção gêmea.
  • O grupo de recursos. Nesse escopo, uma atribuição de função é aplicada a todo os Hubs IoT do grupo de recursos.
  • A assinatura. Nesse escopo, uma atribuição de função é aplicada a todos os Hubs IoT de todos os grupos de recursos da assinatura.
  • Um grupo de gerenciamento. Nesse escopo, uma atribuição de função é aplicada a todos os Hubs IoT de todos os grupos de recursos em todas as assinaturas do 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, verifique se a função RBAC atribuída ao cliente oferece permissões suficientes para essa operação.

Ação do RBAC Descrição
Microsoft.Devices/IotHubs/devices/read Ler qualquer identidade de dispositivo ou módulo.
Microsoft.Devices/IotHubs/devices/write Criar ou atualizar qualquer identidade do módulo ou dispositivo.
Microsoft.Devices/IotHubs/devices/delete Excluir qualquer identidade de dispositivo ou módulo.
Microsoft.Devices/IotHubs/twins/read Ler qualquer módulo gêmeo ou dispositivo.
Microsoft.Devices/IotHubs/twins/write Gravar qualquer módulo gêmeo ou dispositivo.
Microsoft.Devices/IotHubs/jobs/read Retornar uma lista de trabalhos.
Microsoft.Devices/IotHubs/jobs/write Criar ou atualizar qualquer trabalho.
Microsoft.Devices/IotHubs/jobs/delete Excluir qualquer trabalho.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/send/action Enviar uma mensagem da nuvem para o dispositivo para qualquer dispositivo.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/feedback/action Receber, concluir ou abandonar a notificação de comentários da mensagem da nuvem para o dispositivo.
Microsoft.Devices/IotHubs/cloudToDeviceMessages/queue/purge/action Excluir todos os comandos pendentes de um dispositivo.
Microsoft.Devices/IotHubs/directMethods/invoke/action Invocar um método direto em qualquer dispositivo ou módulo.
Microsoft.Devices/IotHubs/fileUpload/notifications/action Receber, completar ou abandonar notificações de upload de arquivo.
Microsoft.Devices/IotHubs/statistics/read Ler estatísticas do dispositivo e serviço.
Microsoft.Devices/IotHubs/configurations/read Ler configurações de gerenciamento de dispositivo.
Microsoft.Devices/IotHubs/configurations/write Criar ou atualizar configurações de gerenciamento de dispositivo.
Microsoft.Devices/IotHubs/configurations/delete Excluir qualquer configuração de gerenciamento de dispositivo.
Microsoft.Devices/IotHubs/configurations/applyToEdgeDevice/action Aplicar o conteúdo de configuração a um dispositivo de borda.
Microsoft.Devices/IotHubs/configurations/testQueries/action Validar a condição de destino e as consultas de métrica personalizadas de uma configuração.

Dica

Observação

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

Habilite a autenticação do Microsoft Entra

Por padrão, o Hub IoT dá suporte ao acesso à API de serviço por meio do Microsoft Entra ID e a políticas de acesso compartilhado e tokens de segurança. Para minimizar possíveis vulnerabilidades de segurança inerentes a tokens de segurança, desabilite 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 DPS (Serviço de Provisionamento de Dispositivos) só dá suporte à vinculação de hubs IoT usando políticas de acesso compartilhado, todos os fluxos de provisionamento de dispositivo falharão com erro "não autorizado". Prossiga com cuidado e planeje substituir o acesso por acesso baseado em função do Microsoft Entra. Não prossiga se você usar o DPS.

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

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

Acesso à Microsoft Entra ID no portal do Azure

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

Quando você tenta acessar o Hub IoT, o portal do Azure primeiro verifica se você recebeu uma função do Azure com base em Microsoft.Devices/iotHubs/listkeys/action. Se for esse o caso, o portal do Azure usa as chaves das políticas de acesso compartilhado para acessar o Hub IoT. Se não for, o portal do Azure tenta acessar os dados usando a sua conta do Microsoft Entra ID.

Para acessar o Hub IoT a partir do Portal do Azure usando a conta do Microsoft Entra, você precisa de permissões para acessar os recursos de dados do IoT Hub (como dispositivos e gêmeos). Você também precisa de permissões para acessar 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 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 Leitor. A função de leitura é uma boa escolha porque é a função mais restrita que permite que você navegue o 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 pode ler identidades de dispositivo, mas não pode criar ou excluir dispositivos, crie uma função personalizada que:

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

Certifique-se, então, de que a conta não tenha nenhuma outra função que conceda a Microsoft.Devices/iotHubs/listkeys/action permissões, como Proprietário ou Colaborador. Para permitir que a conta tenha acesso a recursos e navegue pelo portal, atribua a função de Leitor.

Acesso à Microsoft Entra ID no portal do CLI do Azure

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

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

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

Para saber mais, confira a extensão do Azure IoT para a página da extensão da CLI do Azure.

Amostras do SDK

Próximas etapas

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