Tutorial: Proteja o Greengrass Nucleus com o Trusted Platform Module (TPM) - AWS IoT Greengrass

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)

nota

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.

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 no AWS IoT Greengrass.

Pré-requisitos

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.

  • 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

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
  2. 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

  1. Crie um diretório para armazenar dados.

    sudo mkdir -p /etc/tpm2_pkcs11
  2. Defina o local de armazenamento como uma variável de ambiente. Para obter mais informações sobre a hierarquia de armazenamento, consulte Inicialização.

    export TPM2_PKCS11_STORE=/etc/tpm2_store
  3. 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

  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

  2. 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.

  3. 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 ou pública.

  4. 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)

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.

  2. 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

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.

Etapa 6: importação do certificado de coisa para o TPM

  1. Copie o certificado da coisa para o dispositivo.

  2. 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

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"
  2. 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
  3. Capture o URL do objeto para a chave privada e o certificado.

Etapa 8: Configurar e instalar o Greengrass com suporte TPM2

  1. Configure o certificado da coisa Para obter mais informações, consulte Configuração do certificado da coisa.

  2. 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 software AWS IoT Greengrass Core Em seguida, use as etapas a seguir para configurar sua instalação para ser aproveitada TPM2 por meio da interface PKCS #11.

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

  4. 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
  5. 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"
  6. 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.

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

    3. 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.

  7. Conclua as etapas de instalação do Greengrass em Instale o software AWS IoT Greengrass Core.

Etapa 9: verificação da instalação

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
  2. Veja os registros do Greengrass para garantir que não haja erros.

    sudo tail -f /greengrass/v2/logs/greengrass.log
  3. Verifique se o dispositivo aparece como conectado no console de AWS IoT.

    1. Faça login no console do AWS IoT Greengrass.

    2. Em Gerenciar, expanda Dispositivos do Greengrass e selecione Dispositivos principais.

    3. 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.

Solução de problemas

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

Agora que você integrou com sucesso seu dispositivo principal do Greengrass TPM2, você pode:

Para obter mais informações sobre segurança nos dispositivos Greengrass, consulte Segurança no AWS IoT Greengrass.