硬件安全性集成 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

硬件安全性集成

注意

此功能适用于 v2.5.3 及更高版本Greengrass 核心组件.Amazon IoT Greengrass目前在 Windows 核心设备上不支持此功能。

您可以配置Amazon IoT Greengrass通过使用硬件安全模块 (HSM) 的核心软件PKCS #11 接口. 此功能使您能够安全地存储设备的私钥和证书,以便它们不会在软件中暴露或复制。您可以将私钥和证书存储在硬件模块上,例如 HSM 或可信平台模块 (TPM)。

这些区域有:Amazon IoT Greengrass核心软件使用私有密钥和 X.509 证书对与Amazon IoT和Amazon IoT Greengrass服务。这些区域有:Secret Manager 组件使用此私钥安全地加密和解密您部署到 Greengrass 核心设备的秘密。当您将核心设备配置为使用 HSM 时,这些组件将使用存储在 HSM 中的私钥和证书。

这些区域有:Moquette MQTT 经纪商组件还存储本地 MQTT 服务器证书的私钥。此组件将私钥存储在组件的工作文件夹中的设备文件系统上。目前,Amazon IoT Greengrass不支持将此私钥或证书存储在 HSM 中。

要求

您必须满足以下要求才能在 Greengrass 核心设备上使用 HSM:

  • Greengrass 核安装在核心设备上的 v2.5.3 或更高版本。你可以在安装时选择兼容的版本Amazon IoT Greengrass核心设备上的核心软件。

  • 这些区域有:PKCS #11 提供商组件已安装在核心设备上。安装时,您可以下载并安装此组件。Amazon IoT Greengrass核心设备上的核心软件。

  • 支持PKCS #1 v1.5密钥大小(或更大)或 ECC 密钥大小(或更大)的签名方案和 RSA 密钥。RSA-2048

    注意

    要使用带 ECC 密钥的硬件安全模块,必须使用Greengrass 核v2.5.6 或更高版本。

    使用硬件安全模块和Secret Manager,您必须使用带有 RSA 密钥的硬件安全模块。

  • PKCS #11 提供商库Amazon IoT Greengrass核心软件可以在运行时加载(使用 libdl)以调用 PKCS #11 函数。PKCS #11 提供程序库必须实施以下 PKCS #11 API 操作:

    • C_Initialize

    • C_Finalize

    • C_GetSlotList

    • C_GetSlotInfo

    • C_GetTokenInfo

    • C_OpenSession

    • C_GetSessionInfo

    • C_CloseSession

    • C_Login

    • C_Logout

    • C_GetAttributeValue

    • C_FindObjectsInit

    • C_FindObjects

    • C_FindObjectsFinal

    • C_DecryptInit

    • C_Decrypt

    • C_DecryptUpdate

    • C_DecryptFinal

    • C_SignInit

    • C_Sign

    • C_SignUpdate

    • C_SignFinal

    • C_GetMechanismList

    • C_GetMechanismInfo

    • C_GetInfo

    • C_GetFunctionList

  • 硬件模块必须可按槽标签解析,如 PKCS#11 规范所定义。

  • 您必须将私钥和证书存储在同一插槽中的 HSM 中,如果 HSM 支持对象 ID,它们必须使用相同的对象标签和对象 ID。

  • 证书和私有密钥必须由对象标签来解析。

  • 私有密钥必须具有以下权限:

    • sign

    • decrypt

  • (可选)使用Secret Manager 组件,您必须使用 2.1.0 或更高版本,并且私钥必须具有以下权限:

    • unwrap

    • wrap

硬件安全最佳实践

在 Greengrass 核心设备上配置硬件安全性时,请考虑以下最佳实践。

  • 使用内部硬件随机数字生成器直接在 HSM 上生成私有密钥。这种方法比导入您在其他地方生成的私钥更安全,因为私钥保留在 HSM 中。

  • 将私有密钥配置为不可变并禁止导出。

  • 使用 HSM 硬件供应商建议的预配置工具,通过硬件保护的私有密钥生成证书签名请求 (CSR),然后使用Amazon IoT生成客户端证书的控制台或 API。

注意

在 HSM 上生成私有密钥时,轮换密钥的安全最佳实践并不适用。

安装Amazon IoT Greengrass具有硬件安全的核心软件

当你安装Amazon IoT Greengrass核心软件,您可以将其配置为使用 HSM 中生成的私有密钥。这种方法遵循安全最佳实践在 HSM 中生成私钥,因此私钥保留在 HSM 内。

安装Amazon IoT Greengrass具有硬件安全的核心软件,您可以执行以下操作:

  1. 在 HSM 中生成私钥。

  2. 从私有密钥创建证书签名请求 (CSR)。

  3. 从 CSR 创建证书。您可以创建签名的证书Amazon IoT或由另一个根证书颁发机构 (CA) 发送。有关如何使用另一个根 CA 的更多信息,请参阅创建您自己的客户端证书中的Amazon IoT Core开发人员指南.

  4. 下载Amazon IoT证书并将其导入 HSM。

  5. 安装Amazon IoT Greengrass配置文件中的核心软件,该文件指定使用 HSM 中的 PKCS #11 提供程序组件以及私钥和证书。

您可以选择以下安装选项之一来安装Amazon IoT Greengrass具有硬件安全性的核心软件:

目前,Amazon IoT Greengrass不支持安装Amazon IoT Greengrass具有硬件安全性的核心软件使用自动资源配置安装要么Amazon IoT队列预置.

在现有核心设备上配置硬件安全

您可以将核心设备的私钥和证书导入 HSM 以配置硬件安全性。

注意事项
  • 您必须具有核心设备文件系统的 root 访问权限。

  • 在此过程中,你关闭Amazon IoT Greengrass核心软件,因此在配置硬件安全性时,核心设备处于脱机状态且不可用。

要在现有核心设备上配置硬件安全性,请执行以下操作:

  1. 初始化 HSM。

  2. 部署PKCS #11 提供商组件到核心设备。

  3. 停止Amazon IoT Greengrass核心软件。

  4. 将核心设备的私有密钥和证书导入 HSM。

  5. 更新Amazon IoT Greengrass核心软件的配置文件,用于使用 HSM 中的私钥和证书。

  6. 启动Amazon IoT Greengrass核心软件。

第 1 步:初始化硬件安全模块

完成以下步骤以在核心设备上初始化 HSM。

要初始化硬件安全模块

  • 在 HSM 中初始化 PKCS #11 令牌,然后保存该令牌的插槽 ID 和用户 PIN。查看 HSM 的文档以了解如何初始化令牌。稍后在部署和配置 PKCS #11 提供程序组件时使用插槽 ID 和用户 PIN。

第 2 步:部署 PKCS #11 提供程序组件

完成以下步骤以部署和配置PKCS #11 提供商组件. 您可以将组件部署到一个或多个核心设备上。

  1. Amazon IoT Greengrass控制台选择导航菜单,选择组件.

  2. 在存储库的组件页面上,选择公共组件选择选项卡,然后选择aws.greengrass.crypto.Pkcs11Provider.

  3. 在存储库的aws.greengrass.crypto.Pkcs11Provider页面上,选择部署.

  4. 添加到部署,选择要修订的现有部署,或者选择创建新部署,然后选择下一步.

  5. 如果您选择创建新部署,请选择部署的目标核心设备或事物组。在存储库的指定目标页面,下部署目标,选择核心设备或事物组,然后选择下一步.

  6. 在存储库的选择组件页面,下公共组件中,选择aws.greengrass.crypto.Pkcs11Provider,然后选择下一步.

  7. 在存储库的配置组件页面上,选择aws.greengrass.crypto.Pkcs11Provider,然后执行以下操作:

    1. 选择配置组件.

    2. 配置aws.greengrass.crypto.Pkcs11Provider在下模式配置更新,在要合并的配置,输入以下配置更新。使用目标核心设备的值更新以下配置参数。指定您之前初始化 PKCS #11 令牌的插槽 ID 和用户 PIN。稍后您将私钥和证书导入 HSM 的此插槽中。

      name

      PKCS #11 配置的名称。

      library

      PKCS #11 实施的库的绝对文件路径Amazon IoT Greengrass核心软件可以使用 libdl 加载。

      slot

      包含私钥和设备证书的插槽的 ID。该值与插槽索引或插槽标签不同。

      userPin

      用于访问插槽的用户 PIN 码。

      { "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
    3. 选择确认关闭模式,然后选择下一步.

  8. 在存储库的配置高级设置页面上,保留默认配置设置,然后选择下一步.

  9. Review(检查)页上,选择 Deploy(部署)。

    部署最多需要一分钟才能完成。

要部署 PKCS #11 提供程序组件,请创建一个部署文档,其中包括aws.greengrass.crypto.Pkcs11Provider中的components对象,然后指定组件的配置更新。按照中的说明进创建部署创建新部署或修改现有部署。

以下示例部署文档指定部署和配置 PKCS #11 提供程序组件。使用目标核心设备的值更新以下配置参数。保存插槽 ID 和用户 PIN,以便稍后在将私钥和证书导入 HSM 时使用。

name

PKCS #11 配置的名称。

library

PKCS #11 实施的库的绝对文件路径Amazon IoT Greengrass核心软件可以使用 libdl 加载。

slot

包含私钥和设备证书的插槽的 ID。该值与插槽索引或插槽标签不同。

userPin

用于访问插槽的用户 PIN 码。

{ "name": "softhsm_pkcs11", "library": "/usr/lib/softhsm/libsofthsm2.so", "slot": 1, "userPin": "1234" }
{ ..., "components": { ..., "aws.greengrass.crypto.Pkcs11Provider": { "componentVersion": "2.0.0", "configurationUpdate": { "merge": "{\"name\":\"softhsm_pkcs11\",\"library\":\"/usr/lib/softhsm/libsofthsm2.so\",\"slot\":1,\"userPin\":\"1234\"}" } } } }

部署可能需要几分钟才能完成。您可以使用Amazon IoT Greengrass检查部署的状态。你可以查看Amazon IoT Greengrass核心软件日志,用于验证 PKCS #11 提供程序组件是否成功部署。有关更多信息,请参阅下列内容:

如果部署失败,您可以对每个核心设备上的部署进行故障排除。有关更多信息,请参阅 排除 Amazon IoT Greengrass V2 的故障

第 3 步:更新核心设备上的配置

这些区域有:Amazon IoT Greengrass核心软件使用指定设备运行方式的配置文件。此配置文件包括在何处查找设备用于连接到Amazon Web Services 云. 完成以下步骤,将核心设备的私钥和证书导入 HSM 并更新配置文件以使用 HSM。

更新核心设备上的配置以使用硬件安全

  1. 停止Amazon IoT Greengrass核心软件。如果您已配置Amazon IoT Greengrass核心软件即系统服务使用 systemd,您可以运行以下命令来停止软件。

    sudo systemctl stop greengrass.service
  2. 查找核心设备的私钥和证书文件。

    • 如果你安装了Amazon IoT Greengrass使用核心软件自动预置要么队列预置,私有密钥存在于/greengrass/v2/privKey.key,并且证书存在于/greengrass/v2/thingCert.crt.

    • 如果你安装了Amazon IoT Greengrass使用核心软件手动预置,私有密钥存在于/greengrass/v2/private.pem.key默认情况下,证书存在于/greengrass/v2/device.pem.crt默认情况下。

    您也可以查看system.privateKeyPathsystem.certificateFilePath中的属性/greengrass/v2/config/effectiveConfig.yaml找到这些文件的位置。

  3. 将私钥和证书导入 HSM。查看 HSM 的文档以了解如何将私钥和证书导入其中。使用先前初始化 PKCS #11 令牌的插槽 ID 和用户 PIN 导入私钥和证书。私钥和证书必须使用相同的对象标签和对象 ID。保存导入每个文件时指定的对象标签。您稍后在更新Amazon IoT Greengrass使用 HSM 中的私钥和证书的核心软件配置。

  4. 更新Amazon IoT Greengrass使用 HSM 中的私钥和证书的核心配置。要更新配置,您需要修改Amazon IoT Greengrass核心配置文件然后运行Amazon IoT Greengrass具有更新的配置文件的核心软件以应用新配置。

    执行以下操作:

    1. 创建备份Amazon IoT Greengrass核心配置文件。如果在配置硬件安全性时遇到问题,可以使用此备份来还原核心设备。

      sudo cp /greengrass/v2/config/effectiveConfig.yaml ~/ggc-config-backup.yaml
    2. 打开Amazon IoT Greengrass文本编辑器中的核心配置文件。例如,您可以运行以下命令来使用 GNU nano 编辑文件。Replace/绿草/v2使用 Greengrass 根文件夹的路径。

      sudo nano /greengrass/v2/config/effectiveConfig.yaml
    3. 将值替换system.privateKeyPath使用 HSM 中的私钥的 PKCS #11 URI。Replaceiotdevicekey使用您之前导入私钥和证书的对象标签。

      pkcs11:object=iotdevicekey;type=private
    4. 将值替换system.certificateFilePath使用 HSM 中证书的 PKCS #11 URI。Replaceiotdevicekey使用您之前导入私钥和证书的对象标签。

      pkcs11:object=iotdevicekey;type=cert

    完成这些步骤后,system中的财产Amazon IoT Greengrass核心配置文件应类似于以下示例。

    system: certificateFilePath: "pkcs11:object=iotdevicekey;type=cert" privateKeyPath: "pkcs11:object=iotdevicekey;type=private" rootCaPath: "/greengrass/v2/rootCA.pem" rootpath: "/greengrass/v2" thingName: "MyGreengrassCore"
  5. 在更新的中应用配置effectiveConfig.yaml文件。运行Greengrass.jar使用--init-config用于应用配置的参数effectiveConfig.yaml. Replace/绿草/v2使用 Greengrass 根文件夹的路径。

    sudo java -Droot="/greengrass/v2" \ -jar /greengrass/v2/alts/current/distro/lib/Greengrass.jar \ --start false \ --init-config /greengrass/v2/config/effectiveConfig.yaml
  6. 启动Amazon IoT Greengrass核心软件。如果您已配置Amazon IoT Greengrass核心软件即系统服务使用 systemd,您可以运行以下命令启动软件。

    sudo systemctl start greengrass.service

    有关更多信息,请参阅 运行Amazon IoT GreengrassCore 软件

  7. 检查Amazon IoT Greengrass核心软件日志,用于验证软件是否启动并连接到Amazon Web Services 云. 这些区域有:Amazon IoT Greengrass核心软件使用私钥和证书连接到Amazon IoT和Amazon IoT Greengrass服务。

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

    以下信息级日志消息表明Amazon IoT Greengrass核心软件成功连接到Amazon IoT和Amazon IoT Greengrass服务。

    2021-12-06T22:47:53.702Z [INFO] (Thread-3) com.aws.greengrass.mqttclient.AwsIotMqttClient: Successfully connected to AWS IoT Core. {clientId=MyGreengrassCore5, sessionPresent=false}
  8. (可选)在验证Amazon IoT Greengrass核心软件与 HSM 中的私钥和证书配合使用,从设备的文件系统中删除私钥和证书文件。运行以下命令,然后用私钥和证书文件的路径替换文件路径。

    sudo rm /greengrass/v2/privKey.key sudo rm /greengrass/v2/thingCert.crt

使用没有 PKCS #11 支持的硬件

PKCS#11 库通常由硬件供应商提供或是开源软件。例如,对于符合标准的硬件(如 TPM1.2),可能会使用现有的开源软件。但是,如果您的硬件没有相应的 PKCS #11 库实施,或如果您想要编写自定义 PKCS #11 提供程序,请联系您的 Amazon Web Services 企业 Support 代表,咨询与集成相关的问题。

另请参阅