教程:使用可信平台模 AWS IoT 块 (TPM) 保护 Greengrass Nucleus Lite - AWS IoT Greengrass

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:使用可信平台模 AWS IoT 块 (TPM) 保护 Greengrass Nucleus Lite

本教程介绍如何启用和配置 nu AWS IoT Greengrass cleus lite 的可信平台模块 (TPM) 支持。TPM 为安全密钥存储提供基于硬件的信任根。此安全功能可保护加密操作和敏感凭证,从而增强设备的安全性和完整性。

完成此集成后,您的 AWS IoT Greengrass 核心设备将使用受 TPM 保护的私钥进行身份识别和与服务的通信。 AWS IoT

有关 AWS IoT Greengrass 设备安全的更多信息,请参阅AWS IoT Greengrass 中的安全性

重要

只有通过手动资源配置安装 n AWS IoT Greengrass ucleus lite 时,才支持此机制。

先决条件

要完成本教程,您需要:

本教程包含有关如何使用 TPM2 芯片作为硬件安全模块 (HSM) 来创建私钥和用于创建 AWS IoT 事物证书的 CSR 的说明。

第 1 步:设置 NitroTPM 实例

  1. 设置一个 NitrotPM 实例。有关更多信息,请参阅 nitroT PM。

  2. 使用在上一步中创建的自定义 AMI 启动最终实例。

    重要

    使用 SSH 连接时,请使用ubuntu用户代替root

  3. 运行以下命令,检查 TPM 设备是否存在且工作正常:

    ls -la /dev/tpm*

    你应该看到/dev/tpm0/dev/tpmrm0设备。

第 2 步:安装和配置 TPM 工具

  1. 通过运行以下命令安装所需的软件包:

    sudo apt update sudo apt install tpm2-openssl tpm2-tools tpm2-abrmd libtss2-tcti-tabrmd0
  2. 运行以下命令验证 TPM 设备的权限:

    ls -l /dev/tpm0 # Should be owned by tss:root with permissions 0660 ls -l /dev/tpmrm0 # Should be owned by tss:tss with permissions 0660

第 3 步:配置 OpenSSL TPM2 提供程序

  1. 编辑 OpenSSL 配置文件:

    sudo vi /etc/ssl/openssl.cnf
  2. 添加以下配置:

    [openssl_init] providers = provider_sect [provider_sect] default = default_sect tpm2 = tpm2_sect [default_sect] activate = 1 [tpm2_sect] identity = tpm2 module = /usr/local/lib64/tpm2.so activate = 1
  3. 根据需要调整模块路径。你可以使用以下方法找到正确的路径:

    find /usr -name "tpm2.so"

步骤 4:生成永久性 TPM 密钥

  1. 通过运行以下命令创建主键:

    sudo tpm2_createprimary -C o -c primary.ctx
  2. 通过运行以下命令创建 ECC 密钥对象:

    sudo tpm2_create -C primary.ctx -g sha256 -G ecc256 -r device.priv -u device.pub
  3. 通过运行以下命令加载密钥:

    sudo tpm2_load -C primary.ctx -r device.priv -u device.pub -c device.ctx
  4. 通过运行以下命令使密钥永久化:

    sudo tpm2_evictcontrol -C o -c device.ctx 0x81000002

    这将创建一个带有手柄的永久密钥(比如0x81000002)。

步骤 5:生成证书签名请求 (CSR)

在此步骤中,您将使用 TPM2受保护的私钥生成证书签名请求 (CSR)。

  1. 使用 TPM 密钥生成 CSR:

    openssl req -new -provider tpm2 -key "handle:0x81000002" \ -out device.csr \ -subj "/CN=TPMThing"
  2. 0x81000002替换为你选择的手柄值和TPMThing你想要的事物名称。

步骤 6:从 CSR 创建证书

  1. 在您的开发计算机上,创建一个文件夹,用于下载该 AWS IoT 事物的证书。

    mkdir greengrass-v2-certs
  2. 使用 CSR 文件创建 AWS IoT 事物的证书并将其下载到您的开发计算机。

    aws iot create-certificate-from-csr \ --set-as-active \ --certificate-signing-request file://path_to_device.csr \ --certificate-pem-outfile greengrass-v2-certs/device.pem.crt

    如果请求成功,将返回与以下示例类似的响应:

    { "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4", "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4", "certificatePem": "-----BEGIN CERTIFICATE----- MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w 0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5 jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw 3rrszlaEXAMPLE= -----END CERTIFICATE-----" }

第 7 步:设置支持 TPM 的 Greengrass Nucleus Lite

要在 Greengrass Nucleus Lite 中启用 TPM 支持,请进行以下更改:

  1. 通过将用户添加到 TPM 访问tss群组来配置ggcore用户权限:

    sudo usermod -a -G tss ggcore
  2. 完成以下步骤以更新凭证目录:

    • 从凭证目录中删除私钥文件。

      • 由于我们使用的是永久性 TPM 密钥,因此无需复制私钥文件。

    • 将新的证书复制device.pem.crt到该凭据目录中。

  3. config.yaml使用以下 TPM 特定的配置进行编辑:

    system: privateKeyPath: "handle:0x81000002" # Use your chosen handle certificateFilePath: "" # Replace with the path of device.pem.crt ...
  4. 运行以下命令重启你的 Greengrass Nucleus Lite:

    systemctl restart greengrass-lite.target

故障排查

如果您在设置或操作 TPM2启用该功能的 AWS IoT Greengrass 设备时遇到问题,请尝试以下故障排除步骤:

找不到 TPM 设备(使用 NitrotPM 时)

如果/dev/tpm0不存在,请执行以下步骤:

  1. 确认您使用的是受 NitrotPM 支持的实例类型。

  2. 确保 AMI 是用创建的--tpm-support v2.0

  3. 确认该实例是从自定义 AMI 启动的。

权限被拒绝错误

如果您遇到 TPM 访问错误,请执行以下操作:

  1. 验证用户是否在tss群组中:groups $USER

  2. 使用以下命令检查 TPM 设备的权限:

    ls -l /dev/tpm*
  3. 加入tss群组后,请确认您已注销并重新登录。

OpenSSL 提供程序问题

如果找不到 TPM 提供商,请执行以下操作:

  1. 验证中的tpm2.so路径/etc/ssl/openssl.cnf

  2. 运行以下命令检查提供商安装情况:

    openssl list -providers
  3. 验证tpm2-openssl软件包是否已正确安装。

后续步骤

现在,您已成功将 AWS IoT Greengrass 核心设备与集成 TPM2,您可以:

  • 将组件部署到您的安全 AWS IoT Greengrass 设备

  • 通过 TPM2 集成设置其他 AWS IoT Greengrass 设备

有关 AWS IoT Greengrass 设备安全的更多信息,请参阅AWS IoT Greengrass 中的安全性