Crie e provisione dispositivos IoT Edge em escala com um TPM no Linux

Aplica-se a:Marca de verificação do IoT Edge 1.4 IoT Edge 1.4

Importante

O IoT Edge 1.4 é a versão suportada. Se tiver uma versão anterior, consulte Atualizar IoT Edge.

Este artigo fornece instruções para provisionar automaticamente um dispositivo do Azure IoT Edge para Linux usando um TPM (Trusted Platform Module). Você pode provisionar automaticamente dispositivos IoT Edge com o serviço de provisionamento de dispositivo do Hub IoT do Azure. Se você não estiver familiarizado com o processo de provisionamento automático, revise a visão geral do provisionamento antes de continuar.

Este artigo descreve duas metodologias. Selecione a sua preferência com base na arquitetura da sua solução:

  • Autoprovisionamento de um dispositivo Linux com hardware TPM físico.
  • Autoprovisionar uma máquina virtual (VM) Linux com um TPM simulado em execução em uma máquina de desenvolvimento Windows com Hyper-V habilitado. Recomendamos usar essa metodologia apenas como um cenário de teste. Um TPM simulado não oferece a mesma segurança que um TPM físico.

As instruções diferem com base na sua metodologia, por isso certifique-se de que está no separador correto no futuro.

As tarefas são as seguintes:

  1. Recupere informações de provisionamento para seu TPM.
  2. Crie um registro individual para seu dispositivo em uma instância do serviço de provisionamento de dispositivo do Hub IoT.
  3. Instale o tempo de execução do IoT Edge e conecte o dispositivo ao hub IoT.

Pré-requisitos

Recursos na nuvem

  • Um hub IoT ativo
  • Uma instância do serviço de provisionamento de dispositivo do Hub IoT no Azure, vinculada ao seu hub IoT
    • Se você não tiver uma instância de serviço de provisionamento de dispositivo, poderá seguir as instruções nas seções Criar um novo serviço de provisionamento de dispositivo do Hub IoT e Vincular o hub IoT e o serviço de provisionamento de dispositivo do início rápido do serviço de provisionamento de dispositivos do Hub IoT.
    • Depois de executar o serviço de provisionamento de dispositivo, copie o valor de ID Scope da página de visão geral. Você usa esse valor ao configurar o tempo de execução do IoT Edge.

Requisitos do dispositivo

Um dispositivo Linux físico para ser o dispositivo IoT Edge.

Se você for um fabricante de dispositivos, consulte as orientações sobre a integração de um TPM no processo de fabricação.

Nota

O TPM 2.0 é necessário quando você usa o atestado TPM com o serviço de provisionamento de dispositivo.

Você só pode criar registros de serviço de provisionamento de dispositivo individuais, não de grupo, quando usar um TPM.

Configurar o seu dispositivo

Se você estiver usando um dispositivo Linux físico com um TPM, não há etapas adicionais para configurar seu dispositivo.

Você está pronto para continuar.

Recuperar informações de provisionamento para seu TPM

Nota

Este artigo usou anteriormente a tpm_device_provision ferramenta do IoT C SDK para gerar informações de provisionamento. Se você confiou nessa ferramenta anteriormente, esteja ciente de que as etapas abaixo geram um ID de registro diferente para a mesma chave de endosso pública. Se você precisar recriar o ID de registro como antes, consulte como a ferramenta tpm_device_provision do C SDK o gera. Certifique-se de que a ID de registro para a inscrição individual no DPS corresponde à ID de registro que o dispositivo IoT Edge está configurado para usar.

Nesta seção, você usa as ferramentas de software TPM2 para recuperar a chave de endosso para seu TPM e, em seguida, gerar um ID de registro exclusivo. Esta seção corresponde à Etapa 3: O dispositivo tem firmware e software instalados no processo de integração de um TPM no processo de fabricação.

Instale as ferramentas do TPM2

Inicie sessão no seu dispositivo e instale o tpm2-tools pacote.

sudo apt-get install tpm2-tools

Execute o script a seguir para ler a chave de endosso, criando uma se ela ainda não existir.

#!/bin/sh
if [ "$USER" != "root" ]; then
  SUDO="sudo "
fi

$SUDO tpm2_readpublic -Q -c 0x81010001 -o ek.pub 2> /dev/null
if [ $? -gt 0 ]; then
  # Create the endorsement key (EK)
  $SUDO tpm2_createek -c 0x81010001 -G rsa -u ek.pub

  # Create the storage root key (SRK)
  $SUDO tpm2_createprimary -Q -C o -c srk.ctx > /dev/null

  # make the SRK persistent
  $SUDO tpm2_evictcontrol -c srk.ctx 0x81000001 > /dev/null

  # open transient handle space for the TPM
  $SUDO tpm2_flushcontext -t > /dev/null
fi

printf "Gathering the registration information...\n\nRegistration Id:\n%s\n\nEndorsement Key:\n%s\n" $(sha256sum -b ek.pub | cut -d' ' -f1 | sed -e 's/[^[:alnum:]]//g') $(base64 -w0 ek.pub)
$SUDO rm ek.pub srk.ctx 2> /dev/null

A janela de saída exibe a chave de endosso do dispositivo e uma ID de registro exclusiva. Copie esses valores para uso posterior quando você criar um registro individual para seu dispositivo no serviço de provisionamento de dispositivo.

Depois de ter seu ID de registro e chave de endosso, você estará pronto para continuar.

Gorjeta

Se você não quiser usar as ferramentas de software TPM2 para recuperar as informações, precisará encontrar outra maneira de obter as informações de provisionamento. A chave de endosso, que é exclusiva para cada chip TPM, é obtida do fabricante do chip TPM associado a ele. Você pode derivar um ID de registro exclusivo para seu dispositivo TPM. Por exemplo, como mostrado acima, você pode criar um hash SHA-256 da chave de endosso.

Criar um registro de serviço de provisionamento de dispositivo

Use as informações de provisionamento do TPM para criar um registro individual no serviço de provisionamento de dispositivo.

Ao criar um registro no serviço de provisionamento de dispositivo, você tem a oportunidade de declarar um Estado Gêmeo Inicial do Dispositivo. No gêmeo de dispositivo, você pode definir tags para agrupar dispositivos por qualquer métrica usada em sua solução, como região, ambiente, local ou tipo de dispositivo. Essas tags são usadas para criar implantações automáticas.

Gorjeta

As etapas neste artigo são para o portal do Azure, mas você também pode criar inscrições individuais usando a CLI do Azure. Para obter mais informações, consulte az iot dps enrollment. Como parte do comando CLI, use o sinalizador habilitado para borda para especificar que o registro é para um dispositivo IoT Edge.

  1. No portal do Azure, vá para sua instância do serviço de provisionamento de dispositivo do Hub IoT.

  2. Em Configurações, selecione Gerenciar inscrições.

  3. Selecione Adicionar inscrição individual e conclua as seguintes etapas para configurar o registro:

    1. Em Mecanismo, selecione TPM.

    2. Forneça a chave de endosso e a ID de registro que você copiou da sua VM ou dispositivo físico.

    3. Forneça um ID para o seu dispositivo, se desejar. Se você não fornecer um ID de dispositivo, o ID de registro será usado.

    4. Selecione True para declarar que sua VM ou dispositivo físico é um dispositivo IoT Edge.

    5. Escolha o hub IoT vinculado ao qual você deseja conectar seu dispositivo ou selecione Vincular ao novo Hub IoT. Você pode escolher vários hubs e o dispositivo será atribuído a um deles de acordo com a política de atribuição selecionada.

    6. Adicione um valor de tag ao Estado Gêmeo Inicial do Dispositivo, se desejar. Você pode usar tags para segmentar grupos de dispositivos para implantação de módulos. Para obter mais informações, consulte Implantar módulos do IoT Edge em escala.

    7. Selecione Guardar.

Agora que existe um registro para esse dispositivo, o tempo de execução do IoT Edge pode provisionar automaticamente o dispositivo durante a instalação.

Instalar o IoT Edge

Nesta seção, você prepara sua máquina virtual Linux ou dispositivo físico para o IoT Edge. Em seguida, instale o IoT Edge.

Execute os seguintes comandos para adicionar o repositório de pacotes e, em seguida, adicione a chave de assinatura do pacote Microsoft à sua lista de chaves confiáveis.

Importante

Em 30 de junho de 2022, o Raspberry Pi OS Stretch foi retirado da lista de suporte do Tier 1 OS. Para evitar possíveis vulnerabilidades de segurança, atualize seu sistema operacional host para Bullseye.

A instalação pode ser feita com alguns comandos. Abra um terminal e execute os seguintes comandos:

  • 22.04:

    wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    
  • 20.04:

    wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
    sudo dpkg -i packages-microsoft-prod.deb
    rm packages-microsoft-prod.deb
    

Para obter mais informações sobre versões do sistema operacional, consulte Plataformas com suporte do Azure IoT Edge.

Nota

Os pacotes de software do Azure IoT Edge estão sujeitos aos termos de licença localizados em cada pacote (usr/share/doc/{package-name} ou no LICENSE diretório). Leia os termos de licença antes de usar um pacote. A sua instalação e utilização de um pacote constitui a sua aceitação destes termos. Se você não concorda com os termos da licença, não use esse pacote.

Instalar um mecanismo de contêiner

O Azure IoT Edge depende de um tempo de execução de contêiner compatível com OCI. Para cenários de produção, recomendamos que você use o mecanismo Moby. O mecanismo Moby é o único mecanismo de contêiner oficialmente suportado com o IoT Edge. As imagens de contêiner do Docker CE/EE são compatíveis com o tempo de execução do Moby.

Instale o motor Moby.

sudo apt-get update; \
  sudo apt-get install moby-engine

Por padrão, o mecanismo de contêiner não define limites de tamanho de log de contêiner. Ao longo do tempo, isto pode fazer com que o dispositivo seja preenchido com registos e fique sem espaço em disco. No entanto, você pode configurar seu log para ser exibido localmente, embora seja opcional. Para saber mais sobre a configuração de log, consulte Lista de verificação de implantação de produção.

As etapas a seguir mostram como configurar seu contêiner para usar local o driver de log como o mecanismo de log.

  1. Criar ou editar o arquivo de configuração do daemon Docker existente

    sudo nano /etc/docker/daemon.json
    
  2. Defina o driver de log padrão para o local driver de log, conforme mostrado no exemplo.

       {
          "log-driver": "local"
       }
    
  3. Reinicie o mecanismo de contêiner para que as alterações entrem em vigor.

    sudo systemctl restart docker
    

Instalar o runtime do IoT Edge

O serviço IoT Edge fornece e mantém padrões de segurança no dispositivo IoT Edge. O serviço é iniciado em cada inicialização e inicializa o dispositivo iniciando o restante do tempo de execução do IoT Edge.

As etapas nesta seção representam o processo típico para instalar a versão mais recente do IoT Edge em um dispositivo com conexão com a Internet. Se você precisar instalar uma versão específica, como uma versão de pré-lançamento, ou precisar instalar offline, siga as etapas de instalação Offline ou versão específica mais adiante neste artigo.

Gorjeta

Se você já tiver um dispositivo IoT Edge executando uma versão mais antiga e quiser atualizar para a versão mais recente, use as etapas em Atualizar o daemon de segurança e o tempo de execução do IoT Edge. As versões posteriores são suficientemente diferentes das versões anteriores do IoT Edge para que etapas específicas sejam necessárias para atualizar.

Instale a versão mais recente do IoT Edge e o pacote de serviço de identidade IoT (se ainda não estiver atualizado):

  • 22.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge
    
  • 20.04:

    sudo apt-get update; \
       sudo apt-get install aziot-edge defender-iot-micro-agent-edge
    

O pacote opcional defender-iot-micro-agent-edge inclui o microagente de segurança Microsoft Defender for IoT, que fornece visibilidade de ponto final sobre gerenciamento de postura de segurança, vulnerabilidades, deteção de ameaças, gerenciamento de frota e muito mais para ajudá-lo a proteger seus dispositivos IoT Edge. É recomendável instalar o microagente com o agente Edge para habilitar o monitoramento de segurança e a proteção de seus dispositivos Edge. Para saber mais sobre o Microsoft Defender para IoT, consulte O que é o Microsoft Defender para IoT para construtores de dispositivos.

Provisionar o dispositivo com sua identidade na nuvem

Depois que o tempo de execução for instalado no dispositivo, configure o dispositivo com as informações que ele usa para se conectar ao serviço de provisionamento do dispositivo e ao Hub IoT.

Conheça o seu ID de serviço de provisionamento de dispositivo, o Escopo e o ID de Registro do dispositivo que foram coletados anteriormente.

Crie um arquivo de configuração para seu dispositivo com base em um arquivo de modelo fornecido como parte da instalação do IoT Edge.

sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml

Abra o arquivo de configuração no dispositivo IoT Edge.

sudo nano /etc/aziot/config.toml
  1. Encontre a seção de configurações de provisionamento do arquivo. Descomente as linhas para provisionamento do TPM e certifique-se de que todas as outras linhas de provisionamento sejam comentadas.

    # DPS provisioning with TPM
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "DPS_ID_SCOPE_HERE"
    
    # Uncomment to send a custom payload during DPS registration
    # payload = { uri = "PATH_TO_JSON_FILE" }
    
    [provisioning.attestation]
    method = "tpm"
    registration_id = "REGISTRATION_ID_HERE"
    
    # auto_reprovisioning_mode = Dynamic
    
  2. Atualize os valores de e registration_id com o serviço de provisionamento do dispositivo e as informações do id_scope dispositivo. O scope_id valor é o Escopo de ID da página de visão geral da instância do serviço de provisionamento de dispositivo.

    Para obter mais informações sobre definições de configuração de provisionamento, consulte Definir configurações de dispositivo do IoT Edge.

  3. Opcionalmente, localize a seção do modo de reprovisionamento automático do arquivo. Use o parâmetro para configurar o auto_reprovisioning_mode comportamento de reprovisionamento do dispositivo. Dinâmico - Reprovisionamento quando o dispositivo deteta que pode ter sido movido de um Hub IoT para outro. Esta é a predefinição. AlwaysOnStartup - Reprovisionamento quando o dispositivo é reinicializado ou uma falha faz com que os daemons sejam reiniciados. OnErrorOnly - Nunca acione o reprovisionamento de dispositivos automaticamente. Cada modo tem um fallback de reprovisionamento de dispositivo implícito se o dispositivo não conseguir se conectar ao Hub IoT durante o provisionamento de identidade devido a erros de conectividade. Para obter mais informações, consulte Conceitos de reprovisionamento de dispositivos do Hub IoT.

  4. Opcionalmente, descomente o payload parâmetro para especificar o caminho para um arquivo JSON local. O conteúdo do arquivo é enviado para o DPS como dados adicionais quando o dispositivo se registra. Isso é útil para alocação personalizada. Por exemplo, se você quiser alocar seus dispositivos com base em um ID de modelo IoT Plug and Play sem intervenção humana.

  5. Guarde e feche o ficheiro.

Dê acesso ao IoT Edge ao TPM

O tempo de execução do IoT Edge depende de um serviço TPM que intermedeia o acesso ao TPM de um dispositivo. Esse serviço precisa acessar o TPM para provisionar automaticamente seu dispositivo.

Você pode dar acesso ao TPM substituindo as configurações systemd para que o aziottpm serviço tenha privilégios de raiz. Se você não quiser elevar os privilégios de serviço, também poderá usar as etapas a seguir para fornecer acesso TPM manualmente.

  1. Crie uma nova regra que dê ao tempo de execução do IoT Edge acesso a tpm0 e tpmrm0.

    sudo touch /etc/udev/rules.d/tpmaccess.rules
    
  2. Abra o arquivo de regras.

    sudo nano /etc/udev/rules.d/tpmaccess.rules
    
  3. Copie as seguintes informações de acesso para o arquivo de regras. O tpmrm0 pode não estar presente em dispositivos que usam um kernel anterior à 4.12. Os dispositivos que não têm tpmrm0 ignorarão essa regra com segurança.

    # allow aziottpm access to tpm0 and tpmrm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="aziottpm", MODE="0660"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="aziottpm", MODE="0660"
    
  4. Salve e saia do arquivo.

  5. Acione o udev sistema para avaliar a nova regra.

    /bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
    
  6. Verifique se a regra foi aplicada com êxito.

    ls -l /dev/tpm*
    

    A saída bem-sucedida aparece da seguinte forma:

    crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpm0
    crw-rw---- 1 root aziottpm 10, 224 Jul 20 16:27 /dev/tpmrm0
    

    Se não vir que as permissões corretas foram aplicadas, tente reiniciar a máquina para atualizar udevo .

  7. Aplique as alterações de configuração feitas no dispositivo.

    sudo iotedge config apply
    

Verificar se a instalação foi bem-sucedida

Se ainda não o fez, aplique as alterações de configuração feitas no dispositivo.

sudo iotedge config apply

Verifique se o tempo de execução do IoT Edge está em execução.

sudo iotedge system status

Examine os logs do daemon.

sudo iotedge system logs

Se você vir erros de provisionamento, pode ser que as alterações de configuração ainda não tenham entrado em vigor. Tente reiniciar o daemon do IoT Edge.

sudo systemctl daemon-reload

Ou tente reiniciar sua VM para ver se as alterações entram em vigor em um novo começo.

Se o tempo de execução tiver sido iniciado com êxito, você poderá entrar no hub IoT e ver que o novo dispositivo foi provisionado automaticamente. Agora seu dispositivo está pronto para executar módulos do IoT Edge.

Listar módulos em execução.

iotedge list

Você pode verificar se o registro individual criado no serviço de provisionamento de dispositivo foi usado. Vá para a instância do serviço de provisionamento de dispositivo no portal do Azure. Abra os detalhes de inscrição para o registro individual que você criou. Observe que o status do registro é atribuído e o ID do dispositivo está listado.

Próximos passos

O processo de registro do serviço de provisionamento de dispositivos permite definir a ID do dispositivo e as tags gêmeas do dispositivo ao mesmo tempo em que provisiona o novo dispositivo. Você pode usar esses valores para direcionar dispositivos individuais ou grupos de dispositivos usando o gerenciamento automático de dispositivos.

Saiba como implantar e monitorar módulos do IoT Edge em escala usando o portal do Azure ou a CLI do Azure.