Integração de segurança de hardware - AWS IoT Greengrass

O AWS IoT Greengrass Version 1 entrou na fase de vida útil prolongada em 30 de junho de 2023. Para obter mais informações, consulte política de manutenção do AWS IoT Greengrass V1. Após essa data, o AWS IoT Greengrass V1 não lançará atualizações que forneçam recursos, aprimoramentos, correções de erros ou patches de segurança. Os dispositivos que funcionam com o AWS IoT Greengrass V1 não serão interrompidos e continuarão operando e se conectando à nuvem. É altamente recomendável que você migre para AWS IoT Greengrass Version 2, o que adicionará novos recursos significativos e suporte para plataformas adicionais.

Integração de segurança de hardware

Esse atributo está disponível para o AWS IoT Greengrass Core v1.7 e posterior.

O AWS IoT Greengrass é compatível com o uso de módulos de segurança de hardware (HSM) por meio da interface PKCS#11 para armazenamento seguro e descarregamento de chaves privadas. Isso impede que as chaves sejam expostas ou duplicados no software. As chaves privadas podem ser armazenados de forma segura em módulos de hardware, como HSMs, módulos de plataforma confiáveis (TPM, Trusted Platform Module), ou outros elementos de criptografia.

Pesquise dispositivos qualificados para esse atributo no Catálogo de dispositivos AWS Partner.

O diagrama a seguir mostra a arquitetura de segurança de hardware para um núcleo AWS IoT Greengrass.

AWS IoT Greengrass Core architecture with hardware security and message routing to AWS IoT Core and local devices.

Em uma instalação padrão, o AWS IoT Greengrass usa duas chaves privadas. Uma chave é usada pelo componente do cliente da AWS IoT (cliente da IoT) durante o handshake do Transport Layer Security (TLS) quando um núcleo do Greengrass se conecta ao AWS IoT Core. (Essa chave também é conhecida como chave privada do núcleo.) A outra chave é usada pelo servidor MQTT local, o que permite que os Dispositivos Greengrass se comuniquem com o núcleo do Greengrass. Se você quiser usar a segurança de hardware para ambos os componentes, você pode usar uma chave privada compartilhado ou chaves privadas distintas. Para ter mais informações, consulte Práticas de provisionamento para segurança de hardware do AWS IoT Greengrass.

nota

Em uma instalação padrão, o gerenciador de segredos local também usa a chave cliente da IoT para o processo de criptografia, mas você pode usar sua própria chave privada. Ela deve ser uma chave RSA com tamanho mínimo de 2048 bits. Para ter mais informações, consulte Especificar a chave privada para criptografia de segredos.

Requisitos

Antes de configurar a segurança de hardware para um núcleo do Greengrass, é necessário ter o seguinte:

  • Um módulo de segurança de hardware (HSM) que ofereça suporte à configuração de chave privada alvo para o cliente da IoT, servidor MQTT local e componentes do secrets manager. A configuração pode incluir um, dois ou três chaves privadas com base em hardware, dependendo da configuração dos componentes para compartilhar chaves. Para obter mais informações sobre a chave privada compatível, consulte Entidades principais de segurança do núcleo do AWS IoT Greengrass.

    • Para chaves RSA: um tamanho RSA-2048 (ou maior) e esquema de assinatura PKCS # 1 v1.5.

    • Para chaves EC: uma curva NIST P-256 ou NIST P-384.

    nota

    Pesquise dispositivos qualificados para esse atributo no Catálogo de dispositivos AWS Partner.

  • Uma biblioteca do provedor PKCS#11 carregável em tempo de execução (usando libdl) e que fornece funções PKCS#11.

  • O módulo de hardware deve ser solucionado pelo rótulo do slot, conforme definido na especificação PKCS#11.

  • A chave privada deve ser gerada e carregada no HSM usando as ferramentas de provisionamento fornecidas pelo fornecedor.

  • A chave privada deve ser solucionada pelo rótulo do objeto.

  • O certificado de dispositivo de núcleo. Este é um certificado de cliente da IoT que corresponde à chave privada.

  • Se você estiver usando o atendente de atualização OTA do Greengrass, a biblioteca wrapper PKCS#11 do OpenSSL libp11 deve ser instalada. Para ter mais informações, consulte Configurar suporte para atualizações OTA (over-the-air).

Além disso, certifique-se de que as seguintes condições sejam atendidas:

  • Os certificados de cliente da IoT associados à chave privada são registrados na AWS IoT e ativados. Você pode verificar isso no console do AWS IoT em Gerenciar, expandir Todos os dispositivos, selecionar Coisas e escolher a guia Certificados para a coisa do núcleo.

  • O software AWS IoT Greengrass Core v1.7 ou posterior é instalado no dispositivo principal, conforme descrito no Módulo 2 do tutorial Conceitos básicos. É necessário ter a versão 1.9 ou posteriior para usar uma chave EC para o servidor MQTT.

  • Os certificados são anexados ao núcleo do Greengrass. Você pode verificar isso na página Gerenciar para a coisa principal no console do AWS IoT.

nota

Atualmente, o AWS IoT Greengrass não oferece suporte ao carregamento do certificado CA ou do certificado de cliente da IoT diretamente do HSM. Os certificados devem ser carregados como arquivos de texto simples no sistema de arquivos em um local que possa ser lido pelo Greengrass.

Configuração de segurança do hardware para um núcleo do AWS IoT Greengrass

A segurança do hardware é configurada no arquivo de configuração do Greengrass. Este é o arquivo config.json localizado no diretório /greengrass-root/config.

nota

Para analisar o processo de definição da configuração de um HSM usando uma implementação de software puro, consulte Módulo 7: Simular a integração de segurança de hardware.

Importante

A configuração simulada no exemplo não fornece nenhum benefício de segurança. O objetivo é permitir que você saiba mais sobre a especificação PKCS#11 e faça testes iniciais do seu software se, futuramente, você planejar usar um HSM com base em hardware.

Para configurar a segurança de hardware no AWS IoT Greengrass, edite o objeto crypto em config.json.

Ao usar a segurança de hardware, o objeto crypto é usado para especificar caminhos a certificados, chaves privadas e ativos para a biblioteca do provedor PKCS # 11 no núcleo, conforme exibido no exemplo a seguir.

"crypto": { "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, "principals" : { "IoTCertificate" : { "privateKeyPath" : "pkcs11:object=core-private-key-label;type=private", "certificatePath" : "file:///path-to-core-device-certificate" }, "MQTTServerCertificate" : { "privateKeyPath" : "pkcs11:object=server-private-key-label;type=private" }, "SecretsManager" : { "privateKeyPath": "pkcs11:object=core-private-key-label;type=private" } }, "caPath" : "file:///path-to-root-ca"

O objeto crypto contém as seguintes propriedades:

Campo Descrição Observações
caPath

O caminho absoluto para o CA raiz da AWS IoT.

Deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Opcional. O caminho absoluto para o arquivo .so do mecanismo OpenSSL para habilitar o suporte PKCS#11 no OpenSSL.

Deve ser um caminho para o arquivo no sistema de arquivos.

Esta propriedade será necessária se você estiver usando o atendente de atualizações OTA do Greengrass com segurança de hardware. Para ter mais informações, consulte Configurar suporte para atualizações OTA (over-the-air).

P11Provider

O caminho absoluto para a biblioteca carregável libdl da implementação PKCS#11.

Deve ser um caminho para o arquivo no sistema de arquivos.

slotLabel

O rótulo de slot usado para identificar o módulo de hardware.

Deve estar em conformidade com as especificações de rótulo PKCS#11.

slotUserPin

O PIN do usuário usado para autenticar o núcleo do Greengrass no módulo.

É necessário ter permissões suficientes para executar C_Sign com as chaves privadas configuradas.

principals
IoTCertificate The certificate and private key that the core uses to make requests to AWS IoT.
IoTCertificate  .privateKeyPath

O caminho para a chave privada do núcleo.

Para o armazenamento do sistema de arquivos, deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

Para o armazenamento HSM, deve ser um caminho RFC 7512 PKCS#11 que especifica o rótulo do objeto.

IoTCertificate  .certificatePath

O caminho absoluto para o certificado do dispositivo do núcleo.

Deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

MQTTServerCertificate

Opcional. A chave privada que o núcleo usa em combinação com o certificado para atuar como um gateway ou servidor MQTT.

MQTTServerCertificate  .privateKeyPath

O caminho para a chave privada do servidor MQTT local.

Use esse valor para especificar sua própria chave privada para o servidor MQTT local.

Para o armazenamento do sistema de arquivos, deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

Para o armazenamento HSM, deve ser um caminho RFC 7512 PKCS#11 que especifica o rótulo do objeto.

Se essa propriedade é omitida, o AWS IoT Greengrass gira a chave com base em suas configurações de rotação. Se especificado, o cliente será responsável por girar a chave.

SecretsManager The private key that secures the data key used for encryption. For more information, see Implantar segredos no núcleo do AWS IoT Greengrass.
SecretsManager  .privateKeyPath

O caminho para a chave privada do secrets manager local.

Somente uma chave RSA é compatível.

Para o armazenamento do sistema de arquivos, deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

Para o armazenamento HSM, deve ser um caminho RFC 7512 PKCS#11 que especifica o rótulo do objeto. A chave privada deve ser gerada usando o mecanismo de preenchimento PKCS#1 v1.5.

Campo Descrição Observações
caPath

O caminho absoluto para o CA raiz da AWS IoT.

Deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Opcional. O caminho absoluto para o arquivo .so do mecanismo OpenSSL para habilitar o suporte PKCS#11 no OpenSSL.

Deve ser um caminho para o arquivo no sistema de arquivos.

Esta propriedade será necessária se você estiver usando o atendente de atualizações OTA do Greengrass com segurança de hardware. Para ter mais informações, consulte Configurar suporte para atualizações OTA (over-the-air).

P11Provider

O caminho absoluto para a biblioteca carregável libdl da implementação PKCS#11.

Deve ser um caminho para o arquivo no sistema de arquivos.

slotLabel

O rótulo de slot usado para identificar o módulo de hardware.

Deve estar em conformidade com as especificações de rótulo PKCS#11.

slotUserPin

O PIN do usuário usado para autenticar o núcleo do Greengrass no módulo.

É necessário ter permissões suficientes para executar C_Sign com as chaves privadas configuradas.

principals
IoTCertificate The certificate and private key that the core uses to make requests to AWS IoT.
IoTCertificate  .privateKeyPath

O caminho para a chave privada do núcleo.

Para o armazenamento do sistema de arquivos, deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

Para o armazenamento HSM, deve ser um caminho RFC 7512 PKCS#11 que especifica o rótulo do objeto.

IoTCertificate  .certificatePath

O caminho absoluto para o certificado do dispositivo do núcleo.

Deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

MQTTServerCertificate

Opcional. A chave privada que o núcleo usa em combinação com o certificado para atuar como um gateway ou servidor MQTT.

MQTTServerCertificate  .privateKeyPath

O caminho para a chave privada do servidor MQTT local.

Use esse valor para especificar sua própria chave privada para o servidor MQTT local.

Para o armazenamento do sistema de arquivos, deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

Para o armazenamento HSM, deve ser um caminho RFC 7512 PKCS#11 que especifica o rótulo do objeto.

Se essa propriedade é omitida, o AWS IoT Greengrass gira a chave com base em suas configurações de rotação. Se especificado, o cliente será responsável por girar a chave.

SecretsManager The private key that secures the data key used for encryption. For more information, see Implantar segredos no núcleo do AWS IoT Greengrass.
SecretsManager  .privateKeyPath

O caminho para a chave privada do secrets manager local.

Somente uma chave RSA é compatível.

Para o armazenamento do sistema de arquivos, deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

Para o armazenamento HSM, deve ser um caminho RFC 7512 PKCS#11 que especifica o rótulo do objeto. A chave privada deve ser gerada usando o mecanismo de preenchimento PKCS#1 v1.5.

Campo Descrição Observações
caPath

O caminho absoluto para o CA raiz da AWS IoT.

Deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

PKCS11
OpenSSLEngine

Opcional. O caminho absoluto para o arquivo .so do mecanismo OpenSSL para habilitar o suporte PKCS#11 no OpenSSL.

Deve ser um caminho para o arquivo no sistema de arquivos.

Esta propriedade será necessária se você estiver usando o atendente de atualizações OTA do Greengrass com segurança de hardware. Para ter mais informações, consulte Configurar suporte para atualizações OTA (over-the-air).

P11Provider

O caminho absoluto para a biblioteca carregável libdl da implementação PKCS#11.

Deve ser um caminho para o arquivo no sistema de arquivos.

slotLabel

O rótulo de slot usado para identificar o módulo de hardware.

Deve estar em conformidade com as especificações de rótulo PKCS#11.

slotUserPin

O PIN do usuário usado para autenticar o núcleo do Greengrass no módulo.

É necessário ter permissões suficientes para executar C_Sign com as chaves privadas configuradas.

principals
IoTCertificate The certificate and private key that the core uses to make requests to AWS IoT.
IoTCertificate  .privateKeyPath

O caminho para a chave privada do núcleo.

Para o armazenamento do sistema de arquivos, deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

Para o armazenamento HSM, deve ser um caminho RFC 7512 PKCS#11 que especifica o rótulo do objeto.

IoTCertificate  .certificatePath

O caminho absoluto para o certificado do dispositivo do núcleo.

Deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

MQTTServerCertificate

Opcional. A chave privada que o núcleo usa em combinação com o certificado para atuar como um gateway ou servidor MQTT.

MQTTServerCertificate  .privateKeyPath

O caminho para a chave privada do servidor MQTT local.

Use esse valor para especificar sua própria chave privada para o servidor MQTT local.

Para o armazenamento do sistema de arquivos, deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

Para o armazenamento HSM, deve ser um caminho RFC 7512 PKCS#11 que especifica o rótulo do objeto.

Se essa propriedade é omitida, o AWS IoT Greengrass gira a chave com base em suas configurações de rotação. Se especificado, o cliente será responsável por girar a chave.

SecretsManager The private key that secures the data key used for encryption. For more information, see Implantar segredos no núcleo do AWS IoT Greengrass.
SecretsManager  .privateKeyPath

O caminho para a chave privada do secrets manager local.

Somente uma chave RSA é compatível.

Para o armazenamento do sistema de arquivos, deve ser um URI de arquivo no formato: file:///absolute/path/to/file.

Para o armazenamento HSM, deve ser um caminho RFC 7512 PKCS#11 que especifica o rótulo do objeto. A chave privada deve ser gerada usando o mecanismo de preenchimento PKCS#1 v1.5.

Práticas de provisionamento para segurança de hardware do AWS IoT Greengrass

Estas são práticas de provisionamento relacionadas ao desempenho e à segurança.

Segurança

  • Gerar chaves privadas diretamente no HSM usando o hardware interno gerador de número aleatório.

    nota

    Se você configurar chaves privadas para uso com esse atributo (seguindo as instruções fornecidas pelo fornecedor de hardware), lembre-se de que o AWS IoT Greengrass atualmente é compatível somente com o mecanismo de preenchimento PKCS1 v1.5 para a criptografia e a descriptografia de segredos locais. O AWS IoT Greengrass não é compatível com Preenchimento da criptografia assimétrica ideal (OAEP).

  • Configurar chaves privadas para proibir a exportação.

  • Use a ferramenta de provisionamento fornecida pelo fornecedor de hardware para gerar uma solicitação de assinatura de certificado (CSR) usando a chave privada protegida por hardware, em seguida, use o console do AWS IoT para gerar um certificado de cliente.

nota

A prática de alternar chaves não se aplica quando as chaves privadas são geradas em HSM.

Desempenho

O diagrama a seguir mostra o componente de cliente da IoT e o servidor MQTT local no núcleo AWS IoT Greengrass. Se você quiser usar uma configuração HSM para ambos os componentes, você pode usar a mesma chave privada ou chaves privadas distintas. Se você usar chaves separadas, elas precisam ser armazenados no mesmo slot.

nota

O AWS IoT Greengrass não impõe limites para o número de chaves que você armazena no HSM, então, você pode armazenar chaves privadas para o cliente da IoT, o servidor MQTT e componentes do secrets manager. No entanto, alguns fornecedores do HSM podem impor limites para o número de chaves que você pode armazenar em um slot.

IoT client and MQTT server interacting with AWS IoT Greengrass Core and AWS IoT Core.

Em geral, a chave de cliente da IoT não é usada com frequência, pois o software do núcleo do AWS IoT Greengrass mantém conexões de longa duração com a nuvem. No entanto, a chave do servidor MQTT é usada toda vez que um dispositivo do Greengrass se conecta ao núcleo. Essas interações afetam diretamente o desempenho.

Quando a chave do servidor MQTT é armazenada no HSM, a taxa na qual os dispositivos podem se conectar depende do número de operações de assinatura RSA por segundo que o HSM pode realizar. Por exemplo, se o HSM leva 300 milissegundos para realizar uma assinatura RSASSA-PKCS1-v1.5 em uma chave privada RSA-2048, apenas três dispositivos podem se conectar ao núcleo do Greengrass por segundo. Depois que as conexões são feitas, o HSM não é mais usado e o padrão de cotas do AWS IoT Greengrass é aplicado.

Para atenuar gargalos de desempenho, você pode armazenar a chave privada para o servidor MQTT no sistema de arquivos, e não no HSM. Com essa configuração, o servidor MQTT se comporta como se a segurança de hardware não estivesse habilitada.

O AWS IoT Greengrass oferece suporte a várias configurações de armazenamento de chaves para componentes do cliente da IoT e servidor MQTT para que você possa otimizar os requisitos de segurança e desempenho. A tabela a seguir inclui exemplos de configurações.

Configuração Chave da IoT Chave MQTT Performance
Chave compartilhada do HSM HSM: chave A HSM: chave A Limitada pelo HSM ou pela CPU
Chaves distintas do HSM HSM: chave A HSM: chave B Limitada pelo HSM ou pela CPU
HSM apenas para IoT HSM: chave A Sistema de arquivos: chave B Limitada pela CPU
Legado Sistema de arquivos: chave A Sistema de arquivos: chave B Limitada pela CPU

Para configurar o núcleo do Greengrass de modo a usar chaves com base no sistema de arquivos para o servidor MQTT, omita a seção principals.MQTTServerCertificate do config.json (ou especifique um caminho baseado em arquivo para a chave se você não estiver usando a chave padrão gerada pelo AWS IoT Greengrass). O objeto resultante crypto é semelhante a:

"crypto": { "PKCS11": { "OpenSSLEngine": "...", "P11Provider": "...", "slotLabel": "...", "slotUserPin": "..." }, "principals": { "IoTCertificate": { "privateKeyPath": "...", "certificatePath": "..." }, "SecretsManager": { "privateKeyPath": "..." } }, "caPath" : "..." }

Pacotes de criptografia compatíveis com a integração de segurança de hardware

O AWS IoT Greengrass oferece suporte a um conjunto de pacotes de criptografia quando o núcleo é configurado para segurança do hardware. Este é um subconjunto de pacotes de criptografia compatíveis quando o núcleo é configurado para usar segurança baseada em arquivos. Para ter mais informações, consulte Suporte a pacotes de criptografia TLS.

nota

Quando estiver conectando ao núcleo do Greengrass em Dispositivos Greengrass em uma rede local, certifique-se de usar um dos pacotes de criptografia compatíveis para a conexão TLS.

Configurar suporte para atualizações OTA (over-the-air)

Para habilitar as atualizações over-the-air (OTA) do software do núcleo do AWS IoT Greengrass ao usar segurança de hardware, você deve instalar a biblioteca wrapper PKCS#11 do OpenSC libp11 e editar o arquivo de configuração do Greengrass. Para obter mais informações sobre atualizações OTA, consulte Atualizações OTA do software do AWS IoT Greengrass Core.

  1. Pare o daemon do Greengrass.

    cd /greengrass-root/ggc/core/ sudo ./greengrassd stop
    nota

    greengrass-root representa o caminho no qual o software de núcleo do AWS IoT Greengrass é instalado no dispositivo. Normalmente, esse é o diretório /greengrass.

  2. Instale o mecanismo OpenSSL. OpenSSL 1.0 ou 1.1 é compatível.

    sudo apt-get install libengine-pkcs11-openssl
  3. Encontre o caminho para o mecanismo OpenSSL (libpkcs11.so) no seu sistema:

    1. Obtenha a lista de pacotes instalados para a biblioteca.

      sudo dpkg -L libengine-pkcs11-openssl

      O arquivo libpkcs11.so está localizado no diretório engines.

    2. Copiar o caminho completo para o arquivo (por exemplo, /usr/lib/ssl/engines/libpkcs11.so).

  4. Abra o arquivo de configuração do Greengrass. Este é o arquivo config.json no diretório /greengrass-root/config.

  5. Para a propriedade OpenSSLEngine, insira o caminho para o arquivo libpkcs11.so.

    { "crypto": { "caPath" : "file:///path-to-root-ca", "PKCS11" : { "OpenSSLEngine" : "/path-to-p11-openssl-engine", "P11Provider" : "/path-to-pkcs11-provider-so", "slotLabel" : "crypto-token-name", "slotUserPin" : "crypto-token-user-pin" }, ... } ... }
    nota

    Se a propriedade OpenSSLEngine não existir no objeto PKCS11, adicione-a.

  6. Inicie o daemon do Greengrass.

    cd /greengrass-root/ggc/core/ sudo ./greengrassd start

Compatibilidade retroativa com versões anteriores do software de núcleo do AWS IoT Greengrass

O software do núcleo do AWS IoT Greengrass com suporte à segurança de hardware é totalmente compatível com as versões anteriores de arquivos config.json gerados para v1.6 e anteriores. Se o objeto crypto não estiver presente no arquivo de configuração config.json, o AWS IoT Greengrass usará propriedades coreThing.certPath, coreThing.keyPath e coreThing.caPath baseadas em arquivo. Essa compatibilidade com versões anteriores se aplica às atualizações OTA do Greengrass que não substituem uma configuração baseada em arquivo especificada em config.json.

Hardware sem suporte a PKCS#11

Em geral, a biblioteca PKCS#11 é fornecida pelo fornecedor de hardware ou é de código aberto. Por exemplo, com hardware compatível com os padrões (como TPM1.2), pode ser possível usar software de código aberto existente. No entanto, se o hardware não tem uma implementação de biblioteca PKCS#11 correspondente, ou se você deseja gravar um provedor de PKCS#11 personalizada, você deve entrar em contato com seu representante do AWS Enterprise Support com perguntas relacionadas com a integração.

Consulte também