Criar e providenciar IoT Edge dispositivos em escala com um TPM em Linux

Aplica-se a:ícone sim IoT Edge 1.1 Outras versões:IoT Edge 1.3, IoT Edge 1.4

Aplica-se a:IoT Edge IoT Edge de marca de verificação 1.3IoT Edge 1.4 IoT Edge 1.4 Outras versões:IoT Edge 1.1

Este artigo fornece instruções para a autoprovisionação de um IoT Edge Azure para dispositivo Linux utilizando um Módulo de Plataforma Fidedigna (TPM). Pode ser automaticamente prestado IoT Edge dispositivos com o serviço de fornecimento de dispositivos Hub IoT do Azure. Se não estiver familiarizado com o processo de autoprovisionamento, reveja 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:

  • Autoprovisionar um dispositivo Linux com hardware TPM físico. Um exemplo é o Infineon OPTIGA™ TPM SLB 9670.
  • Autoprovisionar uma máquina virtual Linux (VM) com um TPM simulado em execução numa máquina de desenvolvimento Windows com Hiper-V ativado. Recomendamos a utilização desta metodologia apenas como 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.

As tarefas são as seguintes:

  1. Recupere informações de fornecimento para o seu TPM.
  2. Crie uma inscrição individual para o seu dispositivo num caso do serviço de fornecimento de dispositivos Hub IoT.
  3. Instale o tempo de funcionaamento IoT Edge e ligue o dispositivo ao hub IoT.

Pré-requisitos

Recursos em nuvem

  • Um hub IoT ativo
  • Um exemplo do serviço de fornecimento de dispositivos Hub IoT em Azure, ligado ao seu hub IoT
    • Se não tiver uma instância de serviço de fornecimento de dispositivos, pode seguir as instruções do Serviço de Fornecimento de dispositivos Hub IoT eligar o hub IoT e as secções de serviço de fornecimento de dispositivos do Hub IoT dispositivo que fornece o serviço de fornecimento rápido.
    • Depois de ter o serviço de fornecimento do dispositivo em funcionamento, copie o valor do ID Scope na página geral. Usa este valor quando configura o tempo de execução IoT Edge.

Requisitos dos dispositivos

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

Nota

É necessário TPM 2.0 quando utilizar atestado TPM com o serviço de fornecimento de dispositivos.

Só é possível criar inscrições individuais, não de grupo, de fornecimento de dispositivos quando se utiliza um TPM.

Configurar o dispositivo

Se estiver a utilizar um dispositivo Linux físico com um TPM, não existem passos adicionais para configurar o seu dispositivo.

Está pronto para continuar.

Recuperar informações de provisionamento para o seu TPM

Nesta secção, você constrói uma ferramenta que pode usar para recuperar o ID de registo e a chave de endosso para o seu TPM.

  1. Inscreva-se no seu dispositivo e, em seguida, siga os passos em Configurar um ambiente de desenvolvimento Linux para instalar e construir o dispositivo Azure IoT SDK para C.

  2. Executar os seguintes comandos para construir a ferramenta SDK que recupera o seu dispositivo fornecendo informações para o seu 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
    
  3. A janela de saída exibe o ID de registo do dispositivo e a tecla De endosso. Copie estes valores para utilização posterior quando criar uma inscrição individual para o seu dispositivo no serviço de fornecimento de dispositivos.

Dica

Se não quiser utilizar a ferramenta SDK para recuperar a informação, tem de encontrar outra forma de obter as informações de fornecimento. A chave de endosso, que é única em cada chip TPM, é obtida do fabricante de chips TPM associado a ele. Pode obter um ID de registo único para o seu dispositivo TPM. Por exemplo, pode criar um hash SHA-256 da chave de endossamento.

Depois de ter a sua identificação de registo e a chave de apoio, está pronto para continuar.

Criar uma inscrição no serviço de fornecimento de dispositivos

Utilize as informações de fornecimento do seu TPM para criar uma inscrição individual no serviço de fornecimento de dispositivos.

Quando cria uma inscrição no serviço de fornecimento de dispositivos, tem a oportunidade de declarar um Estado Gémeo do Dispositivo Inicial. No dispositivo twin, pode definir tags para agrupar dispositivos por qualquer métrica utilizada na sua solução, como região, ambiente, localização ou tipo de dispositivo. Estas etiquetas são usadas para criar implementações automáticas.

Dica

Os passos deste artigo são para o portal do Azure, mas também pode criar inscrições individuais utilizando o CLI Azure. Para mais informações, consulte a inscrição de az iot dps. Como parte do comando CLI, utilize a bandeira ativada por arestas para especificar que a inscrição é para um dispositivo IoT Edge.

  1. No portal do Azure, vá ao seu caso do serviço de fornecimento de dispositivos Hub IoT.

  2. Em Definições, selecione Gerir as inscrições.

  3. Selecione Adicionar a inscrição individual e, em seguida, completar os seguintes passos para configurar a inscrição:

    1. Para Mecanismo, selecione TPM.

    2. Forneça a chave de endosso e identificação de registo que copiou do seu VM ou dispositivo físico.

    3. Forneça uma identificação para o seu dispositivo, se quiser. Se não fornecer uma identificação do dispositivo, o ID de registo é usado.

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

    5. Escolha o hub IoT ligado ao qual pretende ligar o seu dispositivo ou selecione Link para novos Hub IoT. 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 etiqueta ao Estado Twin do Dispositivo Inicial , se quiser. Pode utilizar tags para direcionar grupos de dispositivos para a implementação do módulo. Para obter mais informações, consulte IoT Edge módulos em escala.

    7. Selecione Guardar.

Agora que existe uma inscrição para este dispositivo, o tempo de execução IoT Edge pode automaticamente abastecer o dispositivo durante a instalação.

Instalar IoT Edge

Nesta secção, prepare o seu VM Linux ou dispositivo físico para IoT Edge. Depois, instala-IoT Edge.

Primeiro, executar os seguintes comandos para adicionar o repositório de pacotes e, em seguida, adicionar a chave de assinatura do pacote microsoft à sua lista de chaves fidedignas.

A instalação pode ser feita com alguns comandos. Abra um terminal e executar 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

A Azure IoT Edge pacotes de software 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 da licença antes de utilizar uma embalagem. A sua instalação e utilização de um pacote constitui a sua aceitação destes termos. Se não concordar com os termos da licença, não use o pacote.

Instale um motor de contentores

O Azure IoT Edge conta com um tempo de funcionamento do contentor compatível com OCI. Para cenários de produção, recomendamos que utilize o motor Moby. O motor Moby é o único motor de contentores oficialmente suportado com IoT Edge. As imagens do contentor Estivador CE/EE são compatíveis com o tempo de execução da Moby.

Instale o motor Moby.

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

Uma vez instalado com sucesso o motor Moby, configuure-o para utilizar local o controlador de registo como mecanismo de registo. Para saber mais sobre a configuração de registo, consulte a Lista de Verificação de Implementação de Produção.

  • Crie ou abra o ficheiro config do Docker Daemon em /etc/docker/daemon.json.

  • Desatrei o controlador de registo predefinido ao local controlador de registo registador, como mostra o exemplo abaixo.

       {
          "log-driver": "local"
       }
    
  • Reinicie o motor do recipiente para que as alterações entrem em vigor.

    Dica

    Se tiver erros ao instalar o motor de contentor moby, verifique se o seu kernel Linux tem compatibilidade com a Moby. Alguns fabricantes de dispositivos incorporados enviam imagens de dispositivos que contêm núcleos Linux personalizados sem as características necessárias para a compatibilidade do motor do contentor. Executar o seguinte comando, que utiliza o script check-config fornecido pela Moby, para verificar a sua configuração do núcleo:

    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 estão ativados Generally NecessaryNetwork Drivers . Se estiver a perder funcionalidades, ative-as reconstruindo o seu núcleo a partir da fonte e selecionando os módulos associados para inclusão no núcleo apropriado .config. Da mesma forma, se estiver a utilizar um gerador de configuração de núcleo como defconfig ou menuconfig, encontre e ative as respetivas funcionalidades e reconstrua o seu núcleo em conformidade. Depois de ter implantado o seu kernel recentemente modificado, volte a executar o script check-config para verificar se todas as funcionalidades necessárias foram ativadas com sucesso.

Instalar o runtime do IoT Edge

O IoT Edge daemon de segurança fornece e mantém os padrões de segurança no dispositivo IoT Edge. O daemon começa em cada bota e botas armadilhas do dispositivo iniciando o resto do tempo de execução IoT Edge.

Os passos nesta secção representam o processo típico para instalar a versão mais recente num dispositivo que tem ligação à Internet. Se precisar de instalar uma versão específica, como uma versão pré-lançamento, ou precisar de ser instalada offline, siga os passos de instalação offline ou de versão específica mais tarde neste artigo.

Instale IoT Edge versão 1.1.* juntamente com o pacote de sedos de libiothsm:

sudo apt-get update; \
  sudo apt-get install iotedge

Nota

IoT Edge versão 1.1 é o ramo de suporte a longo prazo da IoT Edge. Se estiver a executar uma versão mais antiga, recomendamos a instalação ou atualização para o patch mais recente, uma vez que as versões mais antigas já não são suportadas.

O serviço IoT Edge fornece e mantém padrões de segurança no dispositivo IoT Edge. O serviço começa em todas as botas e botas do dispositivo iniciando o resto do tempo de execução IoT Edge.

A partir da versão 1.2, o serviço de identidade IoT trata do fornecimento e gestão de identidade para IoT Edge e para outros componentes do dispositivo que precisam de comunicar com Hub IoT.

Os passos nesta secção representam o processo típico para instalar a versão mais recente num dispositivo que tem ligação à Internet. Se precisar de instalar uma versão específica, como uma versão pré-lançamento, ou precisar de ser instalada offline, siga os passos de instalação offline ou de versão específica mais tarde neste artigo.

Nota

Os passos desta secção mostram-lhe como instalar a versão mais recente IoT Edge.

Se já tem um dispositivo IoT Edge a executar uma versão mais antiga e pretende fazer o upgrade para a versão mais recente, utilize os passos em Atualizar o IoT Edge segurança e tempo de execução. Versões posteriores são suficientemente diferentes das versões anteriores de IoT Edge que são necessárias medidas específicas para atualizar.

Instale a versão mais recente do IoT Edge e o pacote de serviço de identidade IoT:

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

O pacote defender-iot-micro-agente-edge inclui o Microsoft Defender para o micro-agente de segurança IoT que fornece visibilidade de ponta na gestão da postura de segurança, vulnerabilidades, deteção de ameaças, gestão de frotas e muito mais para ajudá-lo a proteger os seus dispositivos IoT Edge. Recomenda-se instalar o micro-agente com o agente Edge para permitir a monitorização e endurecimento de segurança dos seus dispositivos Edge. Para saber mais sobre o Microsoft Defender para IoT, consulte o Que é o Microsoft Defender para IoT para os construtores de dispositivos.

Fornecimento do dispositivo com a sua identidade em nuvem

Depois de instalado o tempo de funcionamento no seu dispositivo, configuure o dispositivo com as informações que utiliza para ligar ao serviço de fornecimento do dispositivo e Hub IoT.

  1. Conheça o seu dispositivo de fornecimento de ID Scope e iD de registo do dispositivo que foram recolhidos anteriormente.

  2. Abra o ficheiro de configuração no seu dispositivo IoT Edge.

    sudo nano /etc/iotedge/config.yaml
    
  3. Encontre a secção de configuração de provisionamento do ficheiro. Descompromessar as linhas para o provisionamento de TPM, e certifique-se de que quaisquer outras linhas de provisionamento são comentadas.

    A provisioning: linha não deve ter espaço branco anterior, e os itens aninhados devem ser recortados 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
    
  4. Atualize os valores de scope_id e registration_id com o seu dispositivo de fornecimento de informações de serviço e dispositivo. O scope_id valor é o ID Scope da página geral do serviço de fornecimento de dispositivos.

  5. Opcionalmente, utilize as always_reprovision_on_startup linhas ou dynamic_reprovisioning linhas para configurar o comportamento de reprovisionamento do seu dispositivo. Se um dispositivo estiver definido para reprovisionar no arranque, tentará sempre fornecer com DPS primeiro e depois voltar para a cópia de segurança de provisionamento se isso falhar. Se um dispositivo estiver definido para se reprovisionar dinamicamente, IoT Edge (e todos os módulos) reiniciarão e reprovisionarão se for detetado um evento de reprovisionamento, como se o dispositivo for deslocado de um Hub IoT para outro. Especificamente, IoT Edge verifica ou bad_credentialdevice_disabled erros do SDK para detetar o evento de reprovisionamento. Para ativar este evento manualmente, desative o dispositivo em Hub IoT. Para mais informações, consulte Hub IoT conceitos de reprovisionamento do dispositivo.

  6. Guarde e feche o ficheiro.

  1. Conheça o seu dispositivo de fornecimento de ID Scope e iD de registo do dispositivo que foram recolhidos anteriormente.

  2. Crie um ficheiro de configuração para o seu dispositivo com base num ficheiro de modelo fornecido como parte da instalação IoT Edge.

    sudo cp /etc/aziot/config.toml.edge.template /etc/aziot/config.toml
    
  3. Abra o ficheiro de configuração no dispositivo IoT Edge.

    sudo nano /etc/aziot/config.toml
    
  4. Encontre a secção de configurações de provisionamento do ficheiro. Descompromessar as linhas para o provisionamento de TPM, e certifique-se de que quaisquer outras linhas de provisionamento são comentadas.

    # DPS provisioning with TPM
    [provisioning]
    source = "dps"
    global_endpoint = "https://global.azure-devices-provisioning.net"
    id_scope = "SCOPE_ID_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
    
  5. Atualize os valores de id_scope e registration_id com o seu dispositivo de fornecimento de informações de serviço e dispositivo. O scope_id valor é o ID Scope da página geral do serviço de fornecimento de dispositivos.

  6. Opcionalmente, encontre a secção de modo de reprovisionamento automático do ficheiro. Utilize o auto_reprovisioning_mode parâmetro para configurar o comportamento de reprovisionamento do seu dispositivo. Dinâmica - Reprovisionar quando o dispositivo detetar que pode ter sido movido de um Hub IoT para outro. Esta é a predefinição. AlwaysOnStartup - Reprovision quando o dispositivo for reiniciado ou uma falha faz com que o ouso(s) daemon(s) reinicie. OnErrorOnly - Nunca desencadeie a reprovisionamento do dispositivo automaticamente. Cada modo tem um reprovisionamento implícito do dispositivo se o dispositivo não conseguir ligar-se a Hub IoT durante o fornecimento de identidade devido a erros de conectividade. Para mais informações, consulte Hub IoT conceitos de reprovisionamento do dispositivo.

  1. Opcionalmente, descoduir o payload parâmetro para especificar o caminho para um ficheiro JSON local. O conteúdo do ficheiro será enviado para dPS como dados adicionais quando o dispositivo se registar. Isto é útil para alocação personalizada. Por exemplo, se quiser alocar os seus dispositivos com base num IoT Plug and Play ID do modelo sem intervenção humana.
  1. Guarde e feche o ficheiro.

Dar IoT Edge acesso ao TPM

O tempo de execução IoT Edge precisa de aceder ao TPM para abastecer automaticamente o seu dispositivo.

Pode dar acesso ao TPM ao tempo de execução IoT Edge, ultrapassando as definições sistematadas de modo a que o iotedge serviço tenha privilégios de raiz. Se não quiser elevar os privilégios de serviço, também pode usar os seguintes passos para fornecer manualmente acesso a TPM.

  1. Crie uma nova regra que dê à IoT Edge acesso ao tempo de execução 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 ficheiro de regras. Pode tpmrm0 não estar presente em dispositivos que utilizem um núcleo anterior a 4.12. Dispositivos que não têm tpmrm0 vão ignorar com segurança esta regra.

    # allow iotedge access to tpm0
    KERNEL=="tpm0", SUBSYSTEM=="tpm", OWNER="iotedge", MODE="0600"
    KERNEL=="tpmrm0", SUBSYSTEM=="tpmrm", OWNER="iotedge", MODE="0600"
    
  4. Guarde e saia do ficheiro.

  5. Desencadeie 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 sucesso.

    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 foram aplicadas as permissões corretas, tente reiniciar a sua máquina para se refrescar udev.

  7. Reinicie o tempo de funcionamento IoT Edge para que detete todas as alterações de configuração que fez no dispositivo.

    sudo systemctl restart iotedge
    

O tempo de execução IoT Edge conta com um serviço TPM que os corretores acedem ao TPM de um dispositivo. Este serviço precisa de aceder ao TPM para abastecer automaticamente o seu dispositivo.

Pode dar acesso ao TPM, sobrepondo-se às definições sistematadas para que o aziottpm serviço tenha privilégios de raiz. Se não quiser elevar os privilégios de serviço, também pode usar os seguintes passos para fornecer manualmente acesso a TPM.

  1. Crie uma nova regra que dê à IoT Edge acesso ao tempo de execução 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 ficheiro de regras. Pode tpmrm0 não estar presente em dispositivos que utilizem um núcleo anterior a 4.12. Dispositivos que não têm tpmrm0 vão ignorar com segurança esta regra.

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

  5. Desencadeie 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 sucesso.

    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 foram aplicadas as permissões corretas, tente reiniciar a sua máquina para se refrescar udev.

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

    sudo iotedge config apply
    

Verifique a instalação bem sucedida

Caso já não o tenha feito, reinicie o tempo de execução IoT Edge para que ele apanhe todas as alterações de configuração que fez no dispositivo.

sudo systemctl restart iotedge

Verifique se o tempo de execução IoT Edge está a decorrer.

sudo systemctl status iotedge

Examine os registos de daemon.

journalctl -u iotedge --no-pager --no-full

Se vir erros de provisão, pode ser que as alterações de configuração ainda não tenham feito efeito. Tente reiniciar o IoT Edge daemon de novo.

sudo systemctl daemon-reload

Ou tente reiniciar o seu VM para ver se as alterações fazem efeito num novo começo.

Caso já não o tenha feito, aplique as alterações de configuração que e fez no dispositivo.

sudo iotedge config apply

Verifique se o tempo de execução IoT Edge está a decorrer.

sudo iotedge system status

Examine os registos de daemon.

sudo iotedge system logs

Se vir erros de provisão, pode ser que as alterações de configuração ainda não tenham feito efeito. Tente reiniciar o IoT Edge daemon.

sudo systemctl daemon-reload

Ou tente reiniciar o seu VM para ver se as alterações fazem efeito num novo começo.

Se o tempo de funcionaamento tiver começado com sucesso, pode entrar no seu hub IoT e ver se o seu novo dispositivo foi automaticamente a provisionado. Agora o seu dispositivo está pronto para funcionar IoT Edge módulos.

Listar módulos de execução.

iotedge list

Pode verificar se foi utilizada a inscrição individual que criou no serviço de fornecimento de dispositivos. Vá ao seu dispositivo de prestação de serviços na portal do Azure. Abra os detalhes das inscrições para a inscrição individual que criou. Note que o estado da inscrição é atribuído e o ID do dispositivo está listado.

Passos seguintes

O processo de inscrição do serviço de fornecimento de dispositivo permite-lhe definir o ID do dispositivo e as etiquetas gémeas do dispositivo ao mesmo tempo que fornece o novo dispositivo. Pode utilizar esses valores para direcionar dispositivos individuais ou grupos de dispositivos utilizando a gestão automática do dispositivo.

Aprenda a implantar e monitorizar IoT Edge módulos em escala utilizando o portal do Azure ou o CLI Azure.