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

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

硬件安全性集成

注意

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

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

CAmazon IoT Greengrass ore 软件使用私钥和 X.509 证书对与Amazon IoT和Amazon IoT Greengrass服务的连接进行身份验证。密钥管理器组件使用此私钥来安全地加密和解密您部署到 Greengrass 核心设备的机密。当您将核心设备配置为使用 HSM 时,这些组件使用您存储在 HSM 中的私钥和证书。

M oquette MQTT 代理组件还存储其本地 MQTT 服务器证书的私钥。此组件将私钥存储在设备文件系统上的组件工作文件夹中。目前,Amazon IoT Greengrass不支持将此私钥或证书存储在 HSM 中。

要求

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

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

  • 安装在核心设备上的 PKCS #11 提供商组件。在Amazon IoT Greengrass核心设备上安装 Core 软件时,可以下载并安装此组件。

  • 支持 PKCS #1 v1.5 签名方案和具有 RSA-2048 密钥大小(或更大)或 ECC 密钥的 RSA 密钥的硬件安全模块。

    注意

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

    要使用硬件安全模块和密钥管理器,必须使用带有 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 支持对象 ID,则必须将私钥和证书存储在 HSM 中的同一插槽中,并且它们必须使用相同的对象标签和对象 ID。

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

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

    • sign

    • decrypt

  • (可选)要使用密钥管理器组件,必须使用 2.1.0 或更高版本,并且私钥必须具有以下权限:

    • unwrap

    • wrap

硬件安全最佳实践

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

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

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

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

注意

在 HSM 上生成私钥时,轮换密钥的安全最佳做法不适用。

安装具有硬件安全性的Amazon IoT Greengrass Core 软件

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

要安装具有硬件安全性的Amazon IoT Greengrass Core 软件,请执行以下操作:

  1. 在 HSM 中生成私钥。

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

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

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

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

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

目前,当您使用自动资源配置或Amazon IoT队列配置进行安装时,Amazon IoT Greengrass不支持安装具有硬件安全性的Amazon IoT Greengrass核心软件。

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

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

注意事项
  • 您必须拥有核心设备文件系统的超级用户访问权限。

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

要在现有核心设备上配置硬件安全,您需要执行以下任务:

  1. 初始化 HSM。

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

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

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

  5. 更新 CAmazon IoT Greengrass ore 软件的配置文件以使用 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

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

      slot

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

      userPin

      用于访问插槽的用户 PIN。

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

  8. 在 “配置高级设置” 页面上,保留默认配置设置,然后选择 “下一步”。

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

    部署可能需要一分钟的时间才能完成。

要部署 PKCS #11 provider 组件,请创建包含aws.greengrass.crypto.Pkcs11Providercomponents对象中的部署文档,并指定该组件的配置更新。按照中的创建部署说明创建新部署或修改现有部署。

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

name

PKCS #11 配置的名称。

library

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

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:更新核心设备上的配置

CAmazon IoT Greengrass ore 软件使用配置文件来指定设备的运行方式。此配置文件包括在哪里可以找到设备用来连接的私钥和证书Amazon Web Services 云。完成以下步骤,将核心设备的私钥和证书导入 HSM,然后更新配置文件以使用 HSM。

更新核心设备上的配置以使用硬件安全
  1. 停止Amazon IoT Greengrass核心软件。如果您使用 systemd 将Amazon IoT Greengrass Core 软件配置为系统服务,则可以运行以下命令来停止该软件。

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

    • 如果您安装了带有自动配置或队列配置的Amazon IoT Greengrass核心软件,则私钥存在于/greengrass/v2/privKey.key,证书存在于/greengrass/v2/thingCert.crt

    • 如果您安装了手动配置的Amazon IoT Greengrass Core 软件,则/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 Core 软件配置以使用 HSM 中的私钥和证书时,您可以使用此标签。

  4. 更新Amazon IoT Greengrass核心配置以使用 HSM 中的私钥和证书。要更新配置,请修改Amazon IoT Greengrass Core 配置文件并使用更新的配置文件运行Amazon IoT Greengrass Core 软件以应用新配置。

    执行以下操作:

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

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

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

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

      pkcs11:object=iotdevicekey;type=cert

    完成这些步骤后,Amazon IoT GreengrassCore 配置文件中的system属性应类似于以下示例。

    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。将 /greengrass/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核心软件。如果您使用 systemd 将Amazon IoT Greengrass Core 软件配置为系统服务,则可以运行以下命令来启动该软件。

    sudo systemctl start greengrass.service

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

  7. 检查 CAmazon IoT Greengrass ore 软件日志,验证软件是否已启动并连接到Amazon Web Services 云。CAmazon IoT Greengrass ore 软件使用私钥和证书连接到Amazon IoT和Amazon IoT Greengrass服务。

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

    以下信息级别的日志消息表明 CAmazon IoT Greengrass ore 软件成功连接到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 代表,询问与集成相关的问题。

另请参阅