Tutorial: Proteja AWS IoT Greengrass 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 AWS IoT Greengrass com o Trusted Platform Module (TPM)

Este tutorial 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á acostumadoCriar o certificado do objeto.

Este tutorial mostra como aprimorar a segurança do dispositivo configurando o software AWS IoT Greengrass Core 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 em dispositivos Greengrass, consulte. Segurança em AWS IoT Greengrass

Pré-requisitos

Para concluir este tutorial, você precisará do seguinte:

  • Um dispositivo compatível com Linux com hardware ou firmware TPM 2.0 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

    • Crie e gerencie funções e políticas do IAM

  • Java Runtime Environment (JRE) versão 8 ou posterior instalado em seu dispositivo.

  • Os seguintes pacotes de software instalados no seu dispositivo:

    • curl

    • jarro

  • 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: Inicializar a loja PKCS #11 e criar 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 da loja, 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 disponíveis são as seguintes:

    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 autenticaçã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 da loja. Se especificado, o diretório deve existir. Se não for especificado, ele executa uma pesquisa observando a variável de ambienteTPM2_PKCS11_STORE. Se essa variável de ambiente não estiver definida, ela será examinada/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: criar um token e uma chave

  1. Crie um token PKCS #11.

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

    As opções disponíveis são as seguintes:

    --pid PID

    O ID do objeto principal a ser associado a esse token.

    --sopin SOPIN

    O pin do administrador. Esse pino é usado para recuperação de objetos.

    --userpin USERPIN

    O pin do usuário. Esse pino é usado para autenticação para uso de objetos.

    --label LABEL

    Uma etiqueta exclusiva para identificar o perfil em uso deve ser exclusiva.

    --hierarchy-auth HIERARCHY_AUTH

  2. Crie um objeto-chave ECC.

    sudo tpm2_ptool addkey —algorithm=ecc256 —label=greengrass —userpin=****** —key-label=greenkey
    --label LABEL

    O rótulo de 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 é 8 bytes aleatórios de hexadecimal.

    --attr-always-authenticate

    Define o atributo CKA_ALWAYS_AUTHENTICATE como CK_TRUE.

    --hierarchy-auth HIERARCHY_AUTH

    A 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 do TSS.

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

Etapa 4: Gerar 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 sua 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, você pode 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: criar o certificado da coisa

Crie um certificado de AWS IoT coisa. Para obter mais informações sobre como criar um certificado de coisa, consulteCriar o certificado do objeto.

Etapa 6: importar o certificado do item 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 disponíveis são as seguintes:

    --help

    Mostre essa mensagem de ajuda e saia.

    --label LABEL

    A etiqueta do perfil a ser removida.

    --key-label KEY_LABEL

    O rótulo de chave privada associado.

    --key-id KEY_ID

    A chave privada associada está em hexadecimal.

    cert

    O certificado x509 PEM a ser adicionado.

Etapa 7: Capturar o URL do objeto 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 do Greengrass.

    TOKEN=sudo p11tool --list-token-urls | grep "token=greengrass"
  2. Obtenha o objeto URLs para o token Greengrass. Use o mesmo pino 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 Configurar o 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 PKCS #11 no local 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, você pode 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 núcleo do Greengrass 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 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 aws.greengrass.crypto.Pkcs11Provider configuração, 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: Verificar a 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 AWS IoT console.

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

    2. Em Gerenciar, expanda os dispositivos Greengrass e escolha Dispositivos principais.

    3. Confirme se seu dispositivo está conectado. O status do dispositivo mostrará HEALTHY se ele está 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 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 seguinte comando

    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 em dispositivos Greengrass, consulte. Segurança em AWS IoT Greengrass