将密钥部署到 Amazon IoT Greengrass 核心 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

您正在查看Amazon IoT Greengrass Version 1.Amazon IoT Greengrass Version 2是最新的主要版本Amazon IoT Greengrass. 有关使用Amazon IoT Greengrass V2,请参阅Amazon IoT Greengrass Version 2开发人员指南.

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

将密钥部署到 Amazon IoT Greengrass 核心

此功能适用于Amazon IoT Greengrass核心 v1.7 及更高版本。

通过 Amazon IoT Greengrass,您可以从 Greengrass 设备对服务和应用程序进行身份验证,而无需对密码、令牌或其他密钥进行硬编码。

Amazon Secrets Manager是一项可用于在云中安全存储和管理密钥的服务。Amazon IoT Greengrass将 Secrets Manager 扩展到 Greengrass 的核心设备,因此您的连接器和 Lambda 函数可以使用本地密钥与服务和应用程序交互。例如,Twilio Notifications 使用本地存储的身份验证令牌。

要将密钥集成到 Greengrass 组中,您需要创建一个引用 Secrets Manager 密钥的组资源。此密钥资源引用云密钥 ARN。要了解如何创建、管理和使用私有资源,请参阅使用密钥资源

Amazon IoT Greengrass 对传输中的密钥和静态密钥进行加密。在组部署期间,Amazon IoT Greengrass从密钥管理器中提取密钥并在 Greengrass 核心上创建本地加密副本。在密钥管理器中轮换您的云密钥后,重新部署组,将更新后的值传播到核心。

下图显示了将密钥部署到核心的简要过程。传输和静态中的密钥均经过加密。


            Amazon IoT Greengrass获取一个秘密Amazon Secrets Manager并将其作为密钥资源部署到核心设备,其中,密钥资源可供连接器和 Lambda 函数使用。

通过 Amazon IoT Greengrass 将密钥存储在本地具有以下优势:

  • 通过代码解耦(而非硬编码)。 这支持集中管理的凭证,并帮助保护敏感数据免受入侵的风险。

  • 适用于离线场景。 连接器和函数可以在 Internet 连接断开的情况下安全访问本地服务和软件。

  • 受控密钥访问。 只有组中经过授权的连接器和函数才可以访问您的密钥。Amazon IoT Greengrass 使用私有密钥加密来保护您的密钥。传输和静态中的密钥均经过加密。有关更多信息,请参阅 密钥加密

  • 受控轮换。 在密钥管理器中轮换密钥后,重新部署 Greengrass 组,以更新密钥的本地副本。有关更多信息,请参阅 创建和管理密钥

    重要

    在轮换云版本后,Amazon IoT Greengrass 不会自动更新本地密钥的值。要更新本地值,必须重新部署组。

密钥加密

Amazon IoT Greengrass 对传输和静态中的密钥进行加密。

重要

确保您的用户定义的 Lambda 函数安全地处理密钥,并且不记录任何存储在秘密中的敏感数据。有关更多信息,请参阅 。降低记录和调试 Lambda 函数的风险中的Amazon Secrets Manager用户指南. 虽然本文档特别提到了旋转函数,但该建议也适用于 Greengrass Lambda 函数。

传输中加密

Amazon IoT Greengrass 使用传输层安全性 (TLS) 来加密通过 Internet 和本地网络进行的所有通信。这样可以在传输中保护密钥,从密钥 Secrets Manager 检索密钥并将其部署到核心时会发生此类情况。有关支持的 TLS 密码套件,请参阅TLS 密码套件支持

静态加密

Amazon IoT Greengrass 使用在 config.json 中指定的私有密钥对存储在核心中的密钥进行加密。因此,私有密钥的安全存储对于保护本地密钥至关重要。在 Amazon 责任共担模式中,客户有责任保证私有密钥在核心设备上的安全存储。

Amazon IoT Greengrass 支持两种私有密钥存储:

  • 使用硬件安全模块。有关更多信息,请参阅 硬件安全性集成

    注意

    目前,Amazon IoT Greengrass仅支持PKCS #1 v1.5填充机制,用于在使用基于硬件的私钥时对本地机密进行加密和解密。如果您按照供应商提供的说明手动生成基于硬件的私钥,请确保选择 PKCS #1 v1.5。Amazon IoT Greengrass不支持最佳非对称加密填充 (OAEP)。

  • 使用文件系统权限(默认)。

私有密钥用于保护数据密钥,数据密钥用于加密本地密钥。数据密钥随每次组部署进行轮换。

这些区域有:Amazon IoT Greengrass核心是唯一有权访问私有密钥的实体。与密钥资源关联的 Greengrass 连接器或 Lambda 函数从核心获取密钥值。

Requirements

以下是本地密钥支持的要求:

  • 您必须使用Amazon IoT Greengrass核心 v1.7 或更高版本。

  • 要获取本地机密的值,用户定义的 Lambda 函数必须使用Amazon IoT Greengrass核心 SDK v1.3.0 或更高版本。

  • 用于本地密钥加密的私有密钥必须在 Greengrass 配置文件中指定。默认情况下,Amazon IoT Greengrass 使用存储在文件系统中的核心私有密钥。要提供您自己的私有密钥,请参阅指定用于密钥加密的私有密钥。仅支持 RSA 密钥类型。

    注意

    目前,Amazon IoT Greengrass仅支持PKCS #1 v1.5填充机制,用于在使用基于硬件的私钥时对本地机密进行加密和解密。如果您按照供应商提供的说明手动生成基于硬件的私钥,请确保选择 PKCS #1 v1.5。Amazon IoT Greengrass不支持最佳非对称加密填充 (OAEP)。

  • 必须为 Amazon IoT Greengrass 授予权限才能获取您的密钥值。这样,Amazon IoT Greengrass 可以在组部署期间提取值。如果使用的是默认 Greengrass 服务角色,则 Amazon IoT Greengrass 已经有权访问名称以 greengrass- 开头的密钥。要自定义访问权限,请参阅允许 Amazon IoT Greengrass 获取密钥值

    注意

    我们建议您使用此命名约定来标识允许 Amazon IoT Greengrass 访问的密钥,即使您自定义权限也是如此。控制台使用不同的权限来读取您的密钥,以便您在控制台中选择 Amazon IoT Greengrass 无权提取的密钥。使用命名约定有助于避免权限冲突,这会导致部署错误。

指定用于密钥加密的私有密钥

在此过程中,您将提供用于本地秘密加密的私有密钥的路径。这必须是最小长度为 2048 位 RSA 密钥。有关上使用的私有密钥的更多信息Amazon IoT Greengrass核心,请参阅Amazon IoT Greengrass 核心安全委托人.

Amazon IoT Greengrass 支持两种模式的私有密钥存储:基于硬件或基于文件系统(默认)。有关更多信息,请参阅 密钥加密

请仅在您想更改默认配置(其使用文件系统中的核心私有密钥)时,此按照此过程操作。我们在编写这些步骤时假设您创建了组和核心,如入门教程中的模块 2 所述。

  1. 打开 config.json 文件(位于 /greengrass-root/config 目录中)。

    注意

    greengrass-root 表示在您的设备上安装 Amazon IoT Greengrass 核心软件的路径。通常,这是 /greengrass 目录。

  2. crypto.principals.SecretsManager 对象中,对于 privateKeyPath 属性,输入私有密钥的路径:

    • 如果您的私有密钥存储在文件系统中,请指定该密钥的绝对路径。例如:

      "SecretsManager" : { "privateKeyPath" : "file:///somepath/hash.private.key" }
    • 如果私有密钥存储在硬件安全模块 (HSM) 中,请使用 RFC 7512 PKCS#11 URI 方案指定路径:例如:

      "SecretsManager" : { "privateKeyPath" : "pkcs11:object=private-key-label;type=private" }

      有关更多信息,请参阅 Amazon IoT Greengrass 核心的硬件安全性配置

      注意

      目前,Amazon IoT Greengrass仅支持PKCS #1 v1.5填充机制,用于在使用基于硬件的私钥时对本地机密进行加密和解密。如果您按照供应商提供的说明手动生成基于硬件的私钥,请确保选择 PKCS #1 v1.5。Amazon IoT Greengrass不支持最佳非对称加密填充 (OAEP)。

允许 Amazon IoT Greengrass 获取密钥值

在此过程中,您将为允许 Amazon IoT Greengrass 获取密钥值的 Greengrass 服务角色添加内联策略。

仅执行此过程如果你想授予Amazon IoT Greengrass自定义权限,或者如果您的 Greengrass 服务角色不包含AWSGreengrassResourceAccessRolePolicy托管策略。AWSGreengrassResourceAccessRolePolicy授予访问名称以Greengrass.

  1. 运行以下 CLI 命令以获取 Greengrass 服务角色的 ARN:

    aws greengrass get-service-role-for-account --region region

    返回的 ARN 包含角色名称。

    { "AssociatedAt": "time-stamp", "RoleArn": "arn:aws:iam::account-id:role/service-role/role-name" }

    您将在以下步骤中使用 ARN 或名称。

  2. 添加允许 secretsmanager:GetSecretValue 操作的内联策略。有关说明,请参阅添加和删除 IAM 策略中的IAM 用户指南.

    您可以明确列出密钥或使用通配符 * 命名方案来授予细粒度访问权限,也可以授予对受版本控制或标记的密钥的有条件访问权限。例如,以下策略允许 Amazon IoT Greengrass 仅读取指定的密钥。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:account-id:secret:greengrass-SecretA-abc", "arn:aws:secretsmanager:region:account-id:secret:greengrass-SecretB-xyz" ] } ] }
    注意

    如果使用客户管理的 Amazon KMS 密钥来加密密钥,则 Greengrass 服务角色还必须允许 kms:Decrypt 操作。

有关密钥管理器的 IAM 策略的更多信息,请参阅的身份验证和访问控制Amazon Secrets Manager您可以在 IAM 策略或秘密策略中使用的操作、资源和上下文密钥Amazon Secrets Manager中的Amazon Secrets Manager用户指南.

另请参阅