Connect 客户端设备与核心设备连接 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Connect 客户端设备与核心设备连接

您可以将云发现配置为将客户端设备连接到核心设备。配置云发现时,客户端设备可以连接到Amazon IoT Greengrass云服务,以检索有关其可以连接的核心设备的信息。然后,客户端设备可以尝试连接到每台核心设备,直到它们成功连接。

要使用云发现,您必须执行以下操作:

  • 将客户端设备与它们可以连接的核心设备相关联。

  • 指定客户端设备可以连接到每个核心设备的 MQTT 代理端点。

  • 将组件部署到支持客户端设备的核心设备。

    您也可以部署可选组件来执行以下操作:

    • 在客户端设备、Greengrass 组件和云服务之间中继消息。Amazon IoT Core

    • 自动为您管理核心设备 MQTT 代理端点。

    • 管理本地客户端设备阴影并将阴影与Amazon IoT Core云服务同步。

您还必须查看并更新核心设备的Amazon IoT策略,以验证其是否具有连接客户端设备所需的权限。有关更多信息,请参阅 要求

配置云发现后,您可以测试客户端设备和核心设备之间的通信。有关更多信息,请参阅 测试客户端设备通信

要求

要将客户端设备连接到核心设备,必须具备以下条件:

配置 Greengrass 服务角色

Greengrass 服务角色是一种 Amazon Identity and Access Management (IAM) 服务角色,用于向 Amazon IoT Greengrass 授权代表您访问 Amazon 服务中的资源。此角色Amazon IoT Greengrass使验证客户端设备的身份和管理核心设备的连接信息成为可能。

如果您之前未在该区域设置 Greengrass 服务角色,则必须将该区域的 Green grass 服务角色与您的服务角色相关联。Amazon IoT Greengrass Amazon Web Services 账户

Amazon IoT Greengrass控制台中使用配置核心设备发现页面时,请为您Amazon IoT Greengrass设置 Greengrass 服务角色。否则,您可以使用Amazon IoT控制台或 Amazon IoT Greengrass API 进行手动设置。

在本节中,您将检查 Greengrass 服务角色是否已设置。如果未设置,则可以在该区域为您创建一个新的 Greengrass 服务角色Amazon IoT Greengrass进行关联。Amazon Web Services 账户

  1. 检查该区域中是否与您的 Greengrass 服务角色相关Amazon IoT Greengrass联。Amazon Web Services 账户执行以下操作:

    1. 导航到 Amazon IoT 控制台

    2. 在导航窗格中,选择设置

    3. Greengrass 服务角色部分,找到当前服务角色以查看是否关联了 Greengrass 服务角色。

      如果您关联了 Greengrass 服务角色,则可以满足使用 IP 检测器组件的要求。跳至配置Amazon IoT事物策略

  2. 如果该区域中没有Amazon IoT Greengrass与您的 Greengrass 服务角色关联,Amazon Web Services 账户请创建一个 Greengrass 服务角色并将其关联。执行以下操作:

    1. 导航到 IAM 控制台

    2. 选择角色

    3. 选择创建角色

    4. 创建角色页面上,执行以下操作:

      1. 在 “可信实体类型” 下,选择Amazon Web Service

      2. 在 “用例” 下,选择 “其他用例”,选择 GreengrassAmazon Web Services,选择 Greengrass此选项指定添加为可以Amazon IoT Greengrass担任此角色的可信实体。

      3. 请选择 Next(下一步)

      4. 在 “权限策略” 下,选择AWSGreengrassResourceAccessRolePolicy要附加到角色的。

      5. 请选择 Next(下一步)

      6. 角色名称中,输入角色的名称,例如Greengrass_ServiceRole

      7. 选择创建角色

    5. 导航到 Amazon IoT 控制台

    6. 在导航窗格中,选择设置

    7. Greengrass 服务角色部分,选择附加角色。

    8. 更新 Greengrass 服务角色模式中,选择您创建的 IAM 角色,然后选择附加角色。

  1. 检查该区域中是否与您的 Greengrass 服务角色相关Amazon IoT Greengrass联。Amazon Web Services 账户

    aws greengrassv2 get-service-role-for-account

    如果关联了 Greengrass 服务角色,则该操作会返回包含有关该角色的信息的响应。

    如果您关联了 Greengrass 服务角色,则可以满足使用 IP 检测器组件的要求。跳至配置Amazon IoT事物策略

  2. 如果该区域中没有Amazon IoT Greengrass与您的 Greengrass 服务角色关联,Amazon Web Services 账户请创建一个 Greengrass 服务角色并将其关联。执行以下操作:

    1. 使用允许 Amazon IoT Greengrass 代入该角色的信任策略创建角色。此示例将创建一个名为 Greengrass_ServiceRole 的角色,但您也可以使用其他名称。我们建议您在信任策略中加入 aws:SourceArnaws:SourceAccount 全局条件上下文键,以帮助防止出现混淆代理人安全问题。条件上下文键可限制访问权限,仅允许来自指定账户和 Greengrass 工作空间的请求。有关混淆代理人问题的更多信息,请参阅 防止跨服务混淆代理

      Linux or Unix
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "greengrass.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:greengrass:region:account-id:*" }, "StringEquals": { "aws:SourceAccount": "account-id" } } } ] }'
      Windows Command Prompt (CMD)
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document "{\\"Version\\":\\"2012-10-17\\",\\"Statement\\":[{\\"Effect\\":\\"Allow\\",\\"Principal\\":{\\"Service\\":\\"greengrass.amazonaws.com\\"},\\"Action\\":\\"sts:AssumeRole\\",\\"Condition\\":{\\"ArnLike\\":{\\"aws:SourceArn\\":\\"arn:aws:greengrass:region:account-id:*\\"},\\"StringEquals\\":{\\"aws:SourceAccount\\":\\"account-id\\"}}}]}"
      PowerShell
      aws iam create-role --role-name Greengrass_ServiceRole --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "greengrass.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:greengrass:region:account-id:*" }, "StringEquals": { "aws:SourceAccount": "account-id" } } } ] }'
    2. 从输出中的角色元数据复制角色 ARN。使用该 ARN 将角色与您的账户关联。

    3. AWSGreengrassResourceAccessRolePolicy 策略附加到该角色。

      aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
    4. 将 Greengrass 服务角色与您的服务角色相关联。Amazon IoT Greengrass Amazon Web Services 账户将 role-arn 替换为服务角色的 ARN。

      aws greengrassv2 associate-service-role-to-account --role-arn role-arn

      如果操作成功,则返回以下响应。

      { "associatedAt": "timestamp" }

配置Amazon IoT事物策略

核心设备使用 X.509 设备证书来授权连接。Amazon您可以将Amazon IoT策略附加到设备证书以定义核心设备的权限。有关更多信息,请参阅 数据层面操作的 Amazon IoT 策略支持客户端设备的最低Amazon IoT政策

要将客户端设备连接到核心设备,核心设备的Amazon IoT策略必须允许以下权限:

在本节中,您将查看核心设备的Amazon IoT策略并添加缺少的所有必需权限。如果您使用Amazon IoT Greengrass核心软件安装程序来配置资源,则您的核心设备具有允许访问所有Amazon IoT Greengrass操作的Amazon IoT策略(greengrass:*)。在这种情况下,只有当您计划部署影子管理器组件来同步设备影子时,才必须更新Amazon IoT策略Amazon IoT Core。否则,你可以跳过本节。

  1. Amazon IoT Greengrass控制台导航菜单中,选择核心设备

  2. 核心设备页面上,选择要更新的核心设备。

  3. 在核心设备详细信息页面上,选择指向核心设备的 Thin g 的链接。此链接可在Amazon IoT控制台中打开事物详细信息页面。

  4. 在事物详细信息页面上,选择证书

  5. 在 “证书” 选项卡中,选择事物的有效证书。

  6. 在证书详细信息页面上,选择策略

  7. 在 “策略” 选项卡中,选择要查看和更新的Amazon IoT策略。您可以向附加到核心设备活动证书的任何策略添加所需的权限。

    注意

    如果您使用Amazon IoT Greengrass核心软件安装程序来配置资源,则有两个Amazon IoT策略。我们建议您选择名为GreengrassV2IoTThingPolicy的策略(如果存在)。默认情况下,使用快速安装程序创建的核心设备使用此策略名称。如果您向此策略添加权限,则也将这些权限授予使用此策略的其他核心设备。

  8. 在策略概述中,选择编辑活动版本

  9. 查看策略以获取所需权限,然后添加缺少的所有必需权限。

  10. (可选)要允许核心设备与其同步阴影Amazon IoT Core,请在策略中添加以下声明。如果您计划与客户端设备影子进行交互,但不打算与之同步Amazon IoT Core,请跳过此步骤。将地区账户 ID 替换为您使用的地区和您的Amazon Web Services 账户号码。

    • 此示例语句允许访问所有事物的设备影子。要遵循最佳安全实践,您可以限制仅访问核心设备和连接到核心设备的客户端设备。有关更多信息,请参阅 支持客户端设备的最低Amazon IoT政策

    { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:region:account-id:thing/*" ] }

    添加此语句后,策略文档可能与以下示例类似。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect", "iot:Publish", "iot:Subscribe", "iot:Receive", "greengrass:*" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iot:GetThingShadow", "iot:UpdateThingShadow", "iot:DeleteThingShadow" ], "Resource": [ "arn:aws:iot:region:account-id:thing/*" ] } ] }
  11. 要将新的策略版本设置为活动版本,请在策略版本状态下,选择将编辑后的版本设置为该策略的活动版本

  12. 选择另存为新版本

  1. 列出核心设备的原理Amazon IoT。事物主体可以是 X.509 设备证书或其他标识。运行以下命令,并MyGreengrassCore替换为核心设备的名称。

    aws iot list-thing-principals --thing-name MyGreengrassCore

    该操作返回一个响应,其中列出了核心设备的事物主体。

    { "principals": [ "arn:aws:iot:us-west-2:123456789012:cert/certificateId" ] }
  2. 识别核心设备的活动证书。运行以下命令,将 cert i ficateID 替换为上一步中每个证书的 ID,直到找到活动证书。证书 ID 是证书 ARN 末尾的十六进制字符串。该--query参数指定仅输出证书的状态。

    aws iot describe-certificate --certificate-id certificateId --query 'certificateDescription.status'

    该操作以字符串形式返回证书状态。例如,如果证书处于活动状态,则此操作会输出"ACTIVE"

  3. 列出附加到证书的Amazon IoT策略。运行以下命令,并将证书 ARN 替换为证书的 ARN。

    aws iot list-principal-policies --principal arn:aws:iot:us-west-2:123456789012:cert/certificateId

    该操作返回一个响应,其中列出了附加到证书的Amazon IoT策略。

    { "policies": [ { "policyName": "GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassTESCertificatePolicyMyGreengrassCoreTokenExchangeRoleAlias" }, { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy" } ] }
  4. 选择要查看和更新的策略。

    注意

    如果您使用Amazon IoT Greengrass核心软件安装程序来配置资源,则有两个Amazon IoT策略。我们建议您选择名为GreengrassV2IoTThingPolicy的策略(如果存在)。默认情况下,使用快速安装程序创建的核心设备使用此策略名称。如果您向此策略添加权限,则也将这些权限授予使用此策略的其他核心设备。

  5. 获取保单文件。运行以下命令,将 GreenGrassv2IoT 替换为策略ThingPolicy的名称

    aws iot get-policy --policy-name GreengrassV2IoTThingPolicy

    该操作会返回一个响应,其中包含策略的文档和有关该策略的其他信息。策略文档是一个序列化为字符串的 JSON 对象。

    { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\ \\"Version\\": \\"2012-10-17\\",\ \\"Statement\\": [\ {\ \\"Effect\\": \\"Allow\\",\ \\"Action\\": [\ \\"iot:Connect\\",\ \\"iot:Publish\\",\ \\"iot:Subscribe\\",\ \\"iot:Receive\\",\ \\"greengrass:*\\"\ ],\ \\"Resource\\": \\"*\\"\ }\ ]\ }", "defaultVersionId": "1", "creationDate": "2021-02-05T16:03:14.098000-08:00", "lastModifiedDate": "2021-02-05T16:03:14.098000-08:00", "generationId": "f19144b798534f52c619d44f771a354f1b957dfa2b850625d9f1d0fde530e75f" }
  6. 使用在线转换器或其他工具将策略文档字符串转换为 JSON 对象,然后将其保存到名为的文件中iot-policy.json

    例如,如果您安装了 jq 工具,则可以运行以下命令来获取策略文档,将其转换为 JSON 对象,然后将策略文档另存为 JSON 对象。

    aws iot get-policy --policy-name GreengrassV2IoTThingPolicy --query 'policyDocument' | jq fromjson >> iot-policy.json
  7. 查看策略以获取所需权限,然后添加缺少的所有必需权限。

    例如,在基于 Linux 的系统上,你可以运行以下命令来使用 GNU nano 打开文件。

    nano iot-policy.json
  8. 将更改另存为新版本的策略。运行以下命令,将 GreenGrassv2IoT 替换为策略ThingPolicy的名称

    aws iot create-policy-version --policy-name GreengrassV2IoTThingPolicy --policy-document file://iot-policy.json --set-as-default

    如果操作成功,则返回类似于以下示例的响应。

    { "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\ \\"Version\\": \\"2012-10-17\\",\ \\"Statement\\": [\ {\ \\"Effect\\": \\"Allow\\",\ \\"Action\\": [\ \\t\\t\\"iot:Connect\\",\ \\t\\t\\"iot:Publish\\",\ \\t\\t\\"iot:Subscribe\\",\ \\t\\t\\"iot:Receive\\",\ \\t\\t\\"greengrass:*\\"\ ],\ \\"Resource\\": \\"*\\"\ }\ ]\ }", "policyVersionId": "2", "isDefaultVersion": true }

用于支持客户端设备的 Greengrass 组件

重要

核心设备必须运行 Greengrass nucleus v2.0 或更高版本才能支持客户端设备。

要使客户端设备能够与核心设备连接和通信,您需要将以下 Greengrass 组件部署到核心设备:

  • 客户端设备身份验证 (aws.greengrass.clientdevices.Auth)

    部署客户端设备身份验证组件以对客户端设备进行身份验证并授权客户端设备操作。这个组件允许你的Amazon IoT东西连接到核心设备。

    此组件需要一些配置才能使用。您必须指定客户端设备组以及每个组有权执行的操作,例如通过 MQTT 进行连接和通信。有关更多信息,请参阅客户端设备身份验证组件配置

  • MQTT 3.1.1 经纪商 (Moquette) (aws.greengrass.clientdevices.mqtt.Moquette)

    部署 Moquette MQTT 代理组件来运行轻量级 MQTT 代理。Moquette MQTT 代理符合 MQTT 3.1.1,包括对 QoS 0、QoS 1、QoS 2、保留消息、最后遗嘱消息和永久订阅的本地支持。

    您无需配置此组件即可使用它。但是,您可以配置此组件运行 MQTT 代理的端口。默认情况下,它使用端口 8883。

  • MQTT 5 经纪商 (EMQX) (aws.greengrass.clientdevices.mqtt.EMQX)

    注意

    要使用 EMQX MQTT 5 代理,必须使用 Greengrass n ucleus v2.6.0 或更高版本以及客户端设备身份验证 v2. 2.0 或更高版本。

    部署 EMQX MQTT 代理组件,以便在客户端设备和核心设备之间的通信中使用 MQTT 5.0 功能。EMQX MQTT 代理符合 MQTT 5.0,包括对会话和消息过期间隔、用户属性、共享订阅、主题别名等的支持。

    您无需配置此组件即可使用它。但是,您可以配置此组件运行 MQTT 代理的端口。默认情况下,它使用端口 8883。

  • MQTT 网桥 (aws.greengrass.clientdevices.mqtt.Bridge)

    (可选)部署 MQTT 桥接组件,以便在客户端设备(本地 MQTT)、本地发布/订阅和 MQTT 之间中继消息。Amazon IoT Core将此组件配置为与 Greengrass 组件中的客户端设备同步Amazon IoT Core并与客户端设备进行交互。

    此组件需要配置才能使用。您必须指定此组件中继消息的主题映射。有关更多信息,请参阅 MQTT 网桥组件配置

  • IP 探测器 (aws.greengrass.clientdevices.IPDetector)

    (可选)部署 IP 检测器组件,自动向Amazon IoT Greengrass云服务报告核心设备的 MQTT 代理端点。如果您的网络设置很复杂,例如路由器将 MQTT 代理端口转发到核心设备的网络设置,则无法使用此组件。

    您无需配置此组件即可使用它。

  • 影子经理 (aws.greengrass.ShadowManager)

    (可选)部署影子管理器组件以管理核心设备上的客户端设备影子。Greengrass 组件可以获取、更新和删除客户端设备影子,以便与客户端设备进行交互。您也可以将影子管理器组件配置为将客户端设备影子与Amazon IoT Core云服务同步。

    要将此组件用于客户端设备影子,必须将 MQTT 桥接组件配置为在客户端设备和影子管理器之间中继消息,后者使用本地发布/订阅。否则,此组件不需要配置即可使用,但需要配置才能同步设备影子。

注意

我们建议您仅部署一个 MQTT 代理组件。MQTT 网桥IP 检测器组件一次只能使用一个 MQTT 代理组件。如果您部署多个 MQTT 代理组件,则必须将它们配置为使用不同的端口。

配置云发现(控制台)

您可以使用Amazon IoT Greengrass控制台关联客户端设备、管理核心设备端点和部署组件以启用客户端设备支持。有关更多信息,请参阅 步骤 2:启用客户端设备支持

配置云发现 (Amazon CLI)

您可以使用 Amazon Command Line Interface (Amazon CLI) 关联客户端设备、管理核心设备端点和部署组件以启用客户端设备支持。有关更多信息,请参阅下列内容: