Crie e provisione dispositivos IoT Edge em escala com um TPM no Linux
Aplica-se a: IoT Edge 1.1
Importante
A data de fim do suporte do IoT Edge 1.1 foi 13 de dezembro de 2022. Consulte o Ciclo de Vida de Produtos da Microsoft para obter informações sobre como é suportado este produto, serviço, tecnologia ou API. Para obter mais informações sobre como atualizar para a versão mais recente do IoT Edge, consulte Atualizar o 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. Um exemplo é o Infineon OPTIGA™ TPM SLB 9670.
- 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:
- Recupere informações de provisionamento para seu TPM.
- Crie um registro individual para seu dispositivo em uma instância do serviço de provisionamento de dispositivo do Hub IoT.
- 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
Nesta seção, você cria uma ferramenta que pode ser usada para recuperar a ID de registro e a chave de endosso do seu TPM.
Entre no seu dispositivo e siga as etapas em Configurar um ambiente de desenvolvimento Linux para instalar e criar o SDK do dispositivo IoT do Azure para C.
Execute os comandos a seguir para criar a ferramenta SDK que recupera as informações de provisionamento do dispositivo para o TPM.
cd azure-iot-sdk-c/cmake cmake -Duse_prov_client:BOOL=ON .. cd provisioning_client/tools/tpm_device_provision make sudo ./tpm_device_provision
A janela de saída exibe o ID de registro do dispositivo e a chave de endosso. 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.
No portal do Azure, vá para sua instância do serviço de provisionamento de dispositivo do Hub IoT.
Em Configurações, selecione Gerenciar inscrições.
Selecione Adicionar inscrição individual e conclua as seguintes etapas para configurar o registro:
Em Mecanismo, selecione TPM.
Forneça a chave de endosso e a ID de registro que você copiou da sua VM ou dispositivo físico.
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.
Selecione True para declarar que sua VM ou dispositivo físico é um dispositivo IoT Edge.
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.
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.
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 VM 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:
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
18.04:
wget https://packages.microsoft.com/config/ubuntu/18.04/multiarch/packages-microsoft-prod.deb -O packages-microsoft-prod.deb sudo dpkg -i packages-microsoft-prod.deb rm packages-microsoft-prod.deb
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
Depois que o mecanismo Moby for instalado com êxito, configure-o para usar local
o driver de log como o mecanismo de registro. Para saber mais sobre a configuração de log, consulte Lista de verificação de implantação de produção.
Crie ou abra o arquivo de configuração do daemon do Docker em
/etc/docker/daemon.json
.Defina o driver de log padrão para o
local
driver de log, conforme mostrado no exemplo abaixo.{ "log-driver": "local" }
Reinicie o mecanismo de contêiner para que as alterações entrem em vigor.
sudo systemctl restart docker
Gorjeta
Se você receber erros ao instalar o mecanismo de contêiner Moby, verifique se o kernel Linux é compatível com Moby. Alguns fabricantes de dispositivos incorporados enviam imagens de dispositivos que contêm kernels Linux personalizados sem os recursos necessários para a compatibilidade do mecanismo de contêiner. Execute o seguinte comando, que usa o script check-config fornecido pelo Moby, para verificar a configuração do kernel:
curl -ssl https://raw.githubusercontent.com/moby/moby/master/contrib/check-config.sh -o check-config.sh chmod +x check-config.sh ./check-config.sh
Na saída do script, verifique se todos os itens em
Generally Necessary
eNetwork Drivers
estão habilitados. Se você estiver faltando recursos, habilite-os reconstruindo seu kernel a partir do código-fonte e selecionando os módulos associados para inclusão no .config do kernel apropriado. Da mesma forma, se você estiver usando um gerador de configuração do kernel comodefconfig
oumenuconfig
, encontre e habilite os respetivos recursos e reconstrua seu kernel de acordo. Depois de implantar seu kernel recém-modificado, execute o script check-config novamente para verificar se todos os recursos necessários foram habilitados com êxito.
Instalar o runtime do IoT Edge
O daemon de segurança do IoT Edge fornece e mantém padrões de segurança no dispositivo IoT Edge. O daemon é 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 em um dispositivo que tenha 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.
Instale o IoT Edge versão 1.1.* junto com o pacote libiothsm-std :
sudo apt-get update; \
sudo apt-get install iotedge
Nota
O IoT Edge versão 1.1 é o ramo de suporte de longo prazo do IoT Edge. Se você estiver executando uma versão mais antiga, recomendamos instalar ou atualizar para o patch mais recente, pois as versões mais antigas não são mais suportadas.
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.
Abra o arquivo de configuração no dispositivo IoT Edge.
sudo nano /etc/iotedge/config.yaml
Encontre a seção de configuração de provisionamento do arquivo. Descomente as linhas para provisionamento do TPM e certifique-se de que todas as outras linhas de provisionamento sejam comentadas.
A
provisioning:
linha não deve ter espaço em branco anterior e os itens aninhados devem ser recuados por dois espaços.# DPS TPM provisioning configuration provisioning: source: "dps" global_endpoint: "https://global.azure-devices-provisioning.net" scope_id: "SCOPE_ID_HERE" attestation: method: "tpm" registration_id: "REGISTRATION_ID_HERE" # always_reprovision_on_startup: true # dynamic_reprovisioning: false
Atualize os valores de e
registration_id
com o serviço de provisionamento do dispositivo e as informações doscope_id
dispositivo. Oscope_id
valor é o Escopo de ID da página de visão geral da instância do serviço de provisionamento de dispositivo.Opcionalmente, use as linhas ou
dynamic_reprovisioning
para configurar oalways_reprovision_on_startup
comportamento de reprovisionamento do dispositivo. Se um dispositivo estiver definido para reprovisionar na inicialização, ele sempre tentará provisionar com DPS primeiro e, em seguida, voltará para o backup de provisionamento se isso falhar. Se um dispositivo estiver definido para se reprovisionar dinamicamente, o IoT Edge (e todos os módulos) será reiniciado e reprovisionado se um evento de reprovisionamento for detetado, como se o dispositivo for movido de um Hub IoT para outro. Especificamente, o IoT Edge verificabad_credential
device_disabled
erros ou erros do SDK para detetar o evento de reprovisionamento. Para acionar esse evento manualmente, desative o dispositivo no Hub IoT. Para obter mais informações, consulte Conceitos de reprovisionamento de dispositivos do Hub IoT.Guarde e feche o ficheiro.
Dê acesso ao IoT Edge ao TPM
O tempo de execução do IoT Edge precisa acessar o TPM para provisionar automaticamente seu dispositivo.
Você pode conceder ao TPM acesso ao tempo de execução do IoT Edge substituindo as configurações do systemd para que o iotedge
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.
Crie uma nova regra que dará ao tempo de execução do IoT Edge acesso a
tpm0
etpmrm0
.sudo touch /etc/udev/rules.d/tpmaccess.rules
Abra o arquivo de regras.
sudo nano /etc/udev/rules.d/tpmaccess.rules
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êmtpmrm0
ignorarão essa regra com segurança.# allow iotedge access to tpm0 KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="iotedge", MODE="0600" KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="iotedge", MODE="0600"
Salve e saia do arquivo.
Acione o
udev
sistema para avaliar a nova regra./bin/udevadm trigger --subsystem-match=tpm --subsystem-match=tpmrm
Verifique se a regra foi aplicada com êxito.
ls -l /dev/tpm*
A saída bem-sucedida aparece da seguinte forma:
crw------- 1 iotedge root 10, 224 Jul 20 16:27 /dev/tpm0 crw------- 1 iotedge root 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
udev
o .Reinicie o tempo de execução do IoT Edge para que ele retome todas as alterações de configuração feitas no dispositivo.
sudo systemctl restart iotedge
Verificar se a instalação foi bem-sucedida
Se você ainda não o fez, reinicie o tempo de execução do IoT Edge para que ele retome todas as alterações de configuração feitas no dispositivo.
sudo systemctl restart iotedge
Verifique se o tempo de execução do IoT Edge está em execução.
sudo systemctl status iotedge
Examine os logs do daemon.
journalctl -u iotedge --no-pager --no-full
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 novamente.
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.