

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Tutorial: Proteja o Greengrass Nucleus com o Trusted Platform Module (TPM)
<a name="gg-with-tpm-tutorial"></a>

**nota**  
Há suporte para o mecanismo deste tutorial somente com [Instalar AWS IoT Greengrass Software básico com provisionamento manual de recursos](manual-installation.md).

Esses tutoriais contêm instruções sobre como usar o TPM2 chip como um módulo de segurança de hardware (HSM) para criar uma chave privada e CSR. O que está acostumado a [Criar o certificado do objeto](manual-installation.md#create-thing-certificate).

Esses tutoriais mostram como aprimorar a segurança do dispositivo configurando o software AWS IoT Greengrass Core (Greengrass Nucleus) com um Trusted Platform Module (TPM) usando a interface PKCS \#11. Essa integração do TPM garante que as chaves privadas e os certificados usados para identificação e conexão do dispositivo AWS IoT Core sejam armazenados com segurança em hardware inviolável, impedindo a extração por falsificação de identidade ou outras atividades maliciosas.

Quando você concluir essa integração, seu dispositivo principal do Greengrass usará chaves privadas protegidas por TPM para sua identidade e comunicação com os serviços. AWS IoT 

Para obter mais informações sobre segurança nos dispositivos Greengrass, consulte [Segurança em AWS IoT Greengrass](security.md).

## Pré-requisitos
<a name="prerequisites"></a>

Para concluir este tutorial, você precisará do seguinte:
+ Um dispositivo compatível com Linux com hardware TPM 2.0 ou firmware do TPM 2.0.
+ As instruções neste tutorial são definidas para o Ubuntu 24.04 LTS.
  + Qualquer distribuição Linux que suporte o [Linux TPM2 Software Stack](https://tpm2-software.github.io/) pode suportar esse mecanismo.
+ Uma máquina de desenvolvedor AWS CLI instalada e configurada com permissões para:
  + Crie e gerencie AWS IoT recursos
  + Criação e atualização de perfis e políticas do IAM
+ Ambiente de Execução Java (JRE) versão 8 ou posterior instalada no dispositivo.
+ Os pacotes de software a seguir instalados no seu dispositivo:
  + curl
  + jq
+ Privilégios de root ou sudo no dispositivo.

## Etapa 1: instalar TPM2 ferramentas e dependências
<a name="tpm_step1"></a>

Nesta etapa, você instala as ferramentas e bibliotecas de TPM2 software necessárias.

1. Atualize seu gerenciador de pacotes e instale as TPM2 ferramentas e dependências executando o comando a seguir.

   ```
   sudo apt-get update && sudo apt-get install tpm2-tools \
   tpm2-abrmd \
   tpm2-tss-engine-tools \
   gnutls-bin \
   libtpm2-pkcs11-1 \
   libtpm2-pkcs11-tools \
   libtpm2-pkcs11-1-dev \
   python3-tpm2-pkcs11-tools \
   libengine-pkcs11-openssl \
   libtss2-tcti-tabrmd0
   ```

1. Instale os pacotes do provedor TPM2 OpenSSL no Ubuntu 24.04 que usam o mecanismo OpenSSL 3.

   ```
   sudo apt-get install tpm2-openssl
   ```

## Etapa 2: inicialização do armazenamento do PKCS \#11 e criação de um slot
<a name="tpm_step2"></a>

1. Crie um diretório para armazenar dados.

   ```
   sudo mkdir -p /etc/tpm2_pkcs11
   ```

1. Defina o local de armazenamento como uma variável de ambiente. Para obter mais informações sobre a hierarquia de armazenamento, consulte [Inicialização](https://github.com/tpm2-software/tpm2-pkcs11/blob/master/docs/INITIALIZING.md#initialization).

   ```
   export TPM2_PKCS11_STORE=/etc/tpm2_store
   ```

1. Inicialize o TPM2 token com o objeto principal.

   ```
   sudo tpm2_ptool init
   ```

   As opções a seguir estão disponíveis:  
`hierarchy-auth HIERARCHY_AUTH`  
A senha de autorização para adicionar um objeto principal à hierarquia.  
`primary-auth PRIMARY_AUTH`  
Valor de autorização para o objeto de chave primária existente.  
O padrão é um valor de autorização vazio.  
`primary-handle [PRIMARY_HANDLE]`  
Use um objeto de chave primária existente.  
Padrão: `0x81000001`  
`transient-parents`  
Use um objeto primário transitório de um determinado modelo.  
Valores:`tpm2-tools-default`,`tpm2-tools-ecc-default`, `tss2-engine-key`  
`path PATH`  
A localização do diretório do armazenamento. Se especificado, o diretório deverá existir. Se não especificado, ele executará uma pesquisa consultando a variável de ambiente `TPM2_PKCS11_STORE`. Se essa variável de ambiente não estiver definida, ele pesquisará em `/etc/tpm2_pkcs11`. Se esse diretório não for encontrado ou não puder ser criado, o padrão será o diretório de trabalho atual.

## Etapa 3: criação de um token e de uma chave
<a name="tpm_step3"></a>

1. Crie um token do PKCS \#11.

   ```
   sudo tpm2_ptool addtoken —pid=1 —userpin={{USERPIN}} —sopin={{SOPIN}} —label=greengrass
   ```

   As opções a seguir estão disponíveis:  
`--pid PID`  
O ID do objeto principal a ser associado a esse token.  
`--sopin SOPIN`  
O PIN do administrador. Esse PIN é usado para a recuperação de objetos.  
`--userpin USERPIN`  
O PIN do usuário. Esse PIN é usado para autenticação para uso de objetos.  
`--label LABEL`  
Um rótulo exclusivo para identificar o perfil em uso. Deve ser exclusivo.  
`--hierarchy-auth HIERARCHY_AUTH`  


1. Crie um objeto de chave do ECC.

   ```
   sudo tpm2_ptool addkey —algorithm=ecc256 —label=greengrass —userpin=****** —key-label=greenkey
   ```  
`--label LABEL`  
O rótulo dos tokens para importar a chave também.  
`--key-label KEY_LABEL`  
O rótulo da chave importada. O padrão é um valor inteiro.  
`--id ID`  
O ID da chave. O padrão é de 8 bytes aleatórios de hexadecimal.  
`--attr-always-authenticate`  
Define o atributo CKA\_ALWAYS\_AUTHENTICATE como CK\_TRUE.  
`--hierarchy-auth HIERARCHY_AUTH`  
A autorização de hierarquia, necessária para objetos transitórios.  
`--sopin SOPIN`  
O PIN do administrador.  
`--userpin USERPIN`  
O PIN do usuário.  
`--algorithm`  
{rsa1024,rsa2048,rsa3072,rsa4096,aes128,aes256,ecc224,ecc256,ecc384,ecc521,hmac:sha1,hmac:sha256,hmac:sha384,hmac:sha512}  
 O tipo da chave.

1. Exporte o objeto TPM2 -TSS do token para capturar os dados de autenticação.

   ```
   yaml_ecc0=$(sudo tpm2_ptool export —label="greengrass" —key-label="greenkey" —userpin="******")
   ```

   Resultado do exemplo:

   ```
   > echo $yaml_ecc0
   object-auth: 706c1cad8a5238871b30149705255926
   primary-object:
     auth: ''
     hierarchy: owner
     is_transient: false
   ```
**nota**  
Você também encontrará um arquivo chamado `greenkey.pem`, que é a chave TSS2 privada no diretório em que você executou esse comando. Use isso para gerar a CSR com o provedor openssl tpm2. O arquivo de CHAVE TSS2 PRIVADA é protegido pelo TPM e não pode ser usado em outra máquina. Para obter mais informações sobre TSS2 chaves com o OpenSSL, [consulte Armazenando a chave privada](https://github.com/tpm2-software/tpm2-openssl/blob/master/docs/keys.md#storing-the-private-or-a-public-key) ou pública.

1. Capture os dados de autenticação da chave privada TSS.

   ```
   auth_ecc0=$(echo "$yaml_ecc0" | grep "object-auth" | cut -d' ' -f2-)
   ```

## Etapa 4: geração de uma solicitação de assinatura de certificado (CSR)
<a name="step4"></a>

Nesta etapa, você usará a chave privada TPM2 protegida para gerar uma CSR.

1. Gere uma CSR usando o TPM2 provedor.

   ```
   sudo openssl req -new -provider tpm2 -provider base -key greenkey.pem -passin "pass:$auth_ecc0" -out "$H"$HOSTNAME".csr
   ```

   Quando solicitado, forneça as informações necessárias para a CSR, incluindo:
   + Nome do país (código de 2 letras)
   + Nome do estado ou província
   + Nome da localidade
   + Nome da organização
   + Nome da unidade organizacional
   + Nome comum
   + Endereço de e-mail

   Como alternativa, é possível fornecer um arquivo de configuração do OpenSSL para geração autônoma. Para obter mais informações, consulte a [documentação do OpenSSL](https://docs.openssl.org/3.0/man1/openssl-req/#standard-commands).

1. Se você não estiver gerando a CSR na mesma máquina, copie a CSR gerada para uma máquina que tenha AWS credenciais configuradas.

## Etapa 5: criação do certificado da coisa
<a name="step5"></a>

Crie um certificado de AWS IoT coisa. Para obter mais informações sobre como criar um certificado de coisa, consulte [Criar o certificado do objeto](manual-installation.md#create-thing-certificate).

## Etapa 6: importação do certificado de coisa para o TPM
<a name="step6"></a>

1. Copie o certificado da coisa para o dispositivo.

1. Adicione o certificado da coisa ao token do Greengrass.

   ```
   sudo tpm2_ptool addcert --label=greengrass --key-label=greenkey device.pem.crt
   ```

   As opções a seguir estão disponíveis:  
`--help`  
Mostre esta mensagem de ajuda e saia.  
`--label LABEL`  
O rótulo do perfil a ser removida.  
`--key-label KEY_LABEL`  
O rótulo de chave privada associado.  
`--key-id KEY_ID`  
O ID da chave privada associada está em hexadecimal.  
`cert`  
Os certificados PEM x509 a adicionar.

## Etapa 7: captura do URL do objeto do PKCS \#11
<a name="step7"></a>

Usaremos o `p11tool` fornecido no `gnutls-bin` pacote para obter o URL e o objeto URLs do token PKCS \#11.

1. Capture a URL do token para o token do Greengrass.

   ```
   TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
   ```

1. Obtenha o objeto URLs para o token Greengrass. Use o mesmo PIN usado na Etapa 3.

   ```
   sudo p11tool --login --list-all "${TOKEN}"
   ```

   Resultado do exemplo:

   ```
   Token 'greengrass' with URL 'pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass' requires user PIN
   Enter PIN:
   WARNING: Needed CKA_VALUE but didn't find encrypted blob
   Object 0:
           URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=private
           Type: Private key (EC/ECDSA-SECP256R1)
           Label: greenkey
           Flags: CKA_PRIVATE; CKA_NEVER_EXTRACTABLE; CKA_SENSITIVE;
           ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31
   
   Object 1:
           URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=public
           Type: Public key (EC/ECDSA-SECP256R1)
           Label: greenkey
           ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31
   
   Object 2:
           URL: pkcs11:model=SLB9672%00%00%00%00%00%00%00%00%00;manufacturer=Infineon;serial=0000000000000000;token=greengrass;id=%39%32%37%65%61%64%61%39%31%32%35%31%61%35%37%31;object=greenkey;type=cert
           Type: X.509 Certificate (EC/ECDSA-SECP256R1)
           Expires: Fri Dec 31 18:59:59 2049
           Label: greenkey
           ID: 39:32:37:65:61:64:61:39:31:32:35:31:61:35:37:31
   ```

1. Capture o URL do objeto para a chave privada e o certificado.

## Etapa 8: Configurar e instalar o Greengrass com suporte TPM2
<a name="step8"></a>

1. Configure o certificado da coisa Para obter mais informações, consulte [Configuração do certificado da coisa](https://docs.aws.amazon.com/greengrass/v2/developerguide/manual-installation.html#configure-thing-certificate).

1. Conclua as instruções para instalar o software AWS IoT Greengrass Core com a chave privada e o certificado em uma entrada HSM. [Instale o   AWS IoT Greengrass Software principal](manual-installation.md#run-greengrass-core-v2-installer-manual) Em seguida, use as etapas a seguir para configurar sua instalação para ser aproveitada TPM2 por meio da interface PKCS \#11.

1. Verifique se você baixou e salvou o componente do provedor de PKCS \#11 na localização do seu instalador do Greengrass.

1. Use um editor de texto para criar um arquivo de configuração chamado `config.yaml` para fornecer ao instalador. Por exemplo, em um sistema baseado em Linux, é possível executar o comando a seguir para usar o GNU `nano` para criar o arquivo.

   ```
   nano GreengrassInstaller/config.yaml
   ```

1. Copie o seguinte conteúdo YAML para o arquivo. Esse arquivo de configuração parcial especifica os parâmetros do sistema, os parâmetros do Greengrass nucleus e os parâmetros do provedor PKCS\#11.

   ```
   ---
   system:
     certificateFilePath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=cert"
     privateKeyPath: "pkcs11:model=SW%20%20%20TPM%00%00%00%00%00%00%00%00;manufacturer=IBM;serial=0000000000000000;token=greengrass;id=%34%35;object=greenkey;type=private"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "myThing"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.14.0"
       configuration:
         awsRegion: "us-east-1"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
     aws.greengrass.crypto.Pkcs11Provider:
       configuration:
         name: "tpm2_pkcs11"
         library: "/usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so"
         slot: 1
         userPin: "123456"
   ```

1. Edite o arquivo com os parâmetros específicos para a sua instalação.

   1. Atualize certificateFilePath e privateKeyPath com a atualização certificateFilePath e privateKeyPath com a URL PKCS \#11 capturada na Etapa 7.

   1. Atualize seu iotDataEndpoint e iotCredEndpoint com base em seu AWS IoT endpoint.

   1. Na configuração `aws.greengrass.crypto.Pkcs11Provider`, atualize a biblioteca com base na sua plataforma.
**nota**  
O exemplo mostrado é para X86\_64. O caminho do arquivo será semelhante para o ARM64 dispositivo.

1. Conclua as etapas de instalação do Greengrass em [Instale o   AWS IoT Greengrass Software principal](manual-installation.md#run-greengrass-core-v2-installer-manual).

## Etapa 9: verificação da instalação
<a name="step9"></a>

Nesta etapa, você verificará se o Greengrass está funcionando corretamente com TPM2 a integração.

1. Verifique o status do serviço Greengrass.

   ```
   sudo systemctl status greengrass.service
   ```

1. Veja os registros do Greengrass para garantir que não haja erros.

   ```
   sudo tail -f /greengrass/v2/logs/greengrass.log
   ```

1. Verifique se o dispositivo aparece como conectado no [console de AWS IoT](https://console.aws.amazon.com/iot).

   1. Faça login no [console do AWS IoT Greengrass](https://console.aws.amazon.com/greengrass).

   1. Em **Gerenciar**, expanda **Dispositivos do Greengrass** e selecione **Dispositivos principais**.

   1. Confirme se seu dispositivo está conectado. O status do dispositivo indicará `HEALTHY` se ele estiver conectado. Para obter mais informações, consulte [Verificar o status do dispositivo principal do Greengrass](device-status.md).

## Solução de problemas
<a name="troubleshoot"></a>

Se você encontrar problemas durante a configuração ou operação do seu dispositivo Greengrass TPM2 habilitado, tente as seguintes etapas de solução de problemas.
+ Verifique o arquivo de log principal do Greengrass.

  ```
  sudo tail -f /greengrass/v2/logs/greengrass.log
  ```
+ Verifique a configuração do provedor de PKCS \#11.

  ```
  sudo cat /greengrass/v2/config/effectiveConfig.yaml
  ```
+ Verifique se o TPM2 serviço está em execução.

  ```
  sudo systemctl status tpm2-abrmd.service
  ```
+ Verifique se a TPM2 chave está acessível.

  ```
  sudo pkcs11-tool —module /usr/lib/x86_64-linux-gnu/pkcs11/libtpm2_pkcs11.so -l -p 123456 —list-objects
  ```
+ Se seu sistema operacional estiver configurado com criptografia de disco total com chaves raiz TPM2 de armazenamento, como Clevis ou systemd-cryptenroll, verifique se você não está usando o mesmo identificador persistente usado por essas ferramentas. Usar o mesmo identificador persistente pode afetar seu mecanismo de criptografia de disco. Para verificar todos os identificadores persistentes criados e usados, execute o comando a seguir

  ```
  sudo tpm2_getcap handles-persistent
  ```

## Próximas etapas
<a name="next-steps"></a>

Agora que você integrou com sucesso seu dispositivo principal do Greengrass TPM2, você pode:
+ Implantar componentes em seu dispositivo do Greengrass seguro Para obter mais informações, consulte [Implemente AWS IoT Greengrass componentes em dispositivos](manage-deployments.md).
+ Configure dispositivos Greengrass adicionais com TPM2 integração.

Para obter mais informações sobre segurança nos dispositivos Greengrass, consulte [Segurança em AWS IoT Greengrass](security.md).