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

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

将客户端设备连接到核心设备

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

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

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

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

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

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

    • 在客户端设备、Greengrass 组件和Amazon IoT Core云服务。

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

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

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

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

要求

要将客户端设备连接到核心设备,您必须具有:

  • 核心设备必须运行Greengrass 核心v2.0 或更高版本。

  • Greengrass 服务角色Amazon IoT Greengrass为您的Amazon Web Services 账户中的Amazon核心设备运行的区域。有关更多信息,请参阅 配置 Greengrass 服务角色

  • 核心设备Amazon IoT策略必须提供以下权限:

    • greengrass:PutCertificateAuthorities

    • greengrass:VerifyClientDeviceIdentity

    • greengrass:VerifyClientDeviceIoTCertificateAssociation

    • greengrass:GetConnectivityInfo

    • greengrass:UpdateConnectivityInfo—(可选)需要此权限才能使用IP 探测器组件,它将核心设备的网络连接信息报告给Amazon IoT Greengrass云服务。

    • iot:GetThingShadowiot:UpdateThingShadow, 和iot:DeleteThingShadow—(可选)使用需要这些权限影子管理器组件将客户端设备影子与同步Amazon IoT Core. 该功能需要使用版本Greengrass 核心v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本,以及MQTTv2.0 或更高版本。

    有关更多信息,请参阅 配置Amazon IoT事物策略

    注意

    如果你使用了默认值Amazon IoT保单当你已安装Amazon IoT GreengrassCore 软件,核心设备具有Amazon IoT允许访问所有内容的策略Amazon IoT Greengrass动作 (greengrass:*)。

  • Amazon IoT可以作为客户端设备连接的东西。有关更多信息,请参阅 。CreateAmazon IoT资源中的Amazon IoT Core开发人员指南.

  • 每台客户端设备的Amazon IoT策略必须允许greengrass:Discover权限。有关更多信息,请参阅 最低Amazon IoT客户端设备的策略

配置 Greengrass 服务角色

Greengrass 服务角色是Amazon Identity and Access Management(IAM) 服务角色Amazon IoT Greengrass访问来自的资源Amazon代表您提供的服务。这个角色使得有可能Amazon IoT Greengrass验证客户端设备的身份并管理核心设备连接信息。

如果您之前没有设置Greengrass 服务角色在此区域中,您必须将 Greengrass 服务角色与Amazon IoT Greengrass为您的Amazon Web Services 账户在这个区域。

当您将配置核心设备发现页中的Amazon IoT Greengrass控制台、Amazon IoT Greengrass为您设置 Greengrass 服务角色。否则,您可以使用Amazon IoT控制台要么Amazon IoT GreengrassAPI。

在本节中,您将检查是否设置了 Greengrass 服务角色。如果未设置,则创建一个要与之关联的新 Greengrass 服务角色Amazon IoT Greengrass为您的Amazon Web Services 账户在这个区域。

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

    1. 导航到 Amazon IoT 控制台

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

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

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

  2. 如果 Greengrass 服务角色未与相关联Amazon IoT Greengrass为您的Amazon Web Services 账户在此区域中,创建 Greengrass 服务角色并将其关联。执行以下操作:

    1. 导航到 IAM 控制台

    2. 选择 Roles (角色)

    3. 选择Create role(创建角色)

    4. 在存储库的创建角色页中,请执行以下操作:

      1. UNDER可信任的实体类型,选择Amazon Web Service.

      2. UNDER使用案例其他的使用案例Amazon Web Services,选择Greengrass,选择Greengrass. 此选项指定要添加Amazon IoT Greengrass作为代入此角色的可信实体。

      3. 选择 Next(下一步)。

      4. UNDER权限策略,选择AWSGreengrassResourceAccessRolePolicy附加到角色。

      5. 选择 Next(下一步)。

      6. InRole name (角色名称),输入此角色的名称,例如Greengrass_ServiceRole.

      7. 选择Create role(创建角色)

    5. 导航到 Amazon IoT 控制台

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

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

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

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

    aws greengrassv2 get-service-role-for-account

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

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

  2. 如果 Greengrass 服务角色未与相关联Amazon IoT 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 账户. Replacerole-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策略必须提供以下权限:

  • greengrass:PutCertificateAuthorities

  • greengrass:VerifyClientDeviceIdentity

  • greengrass:VerifyClientDeviceIoTCertificateAssociation

  • greengrass:GetConnectivityInfo

  • greengrass:UpdateConnectivityInfo—(可选)需要此权限才能使用IP 探测器组件,它将核心设备的网络连接信息报告给Amazon IoT Greengrass云服务。

  • iot:GetThingShadowiot:UpdateThingShadow, 和iot:DeleteThingShadow—(可选)使用需要这些权限影子管理器组件将客户端设备影子与同步Amazon IoT Core. 该功能需要使用版本Greengrass 核心v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本,以及MQTTv2.0 或更高版本。

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

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

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

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

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

  5. 证书选项卡上,选择事物的活动证书。

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

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

    注意

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

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

  9. 查看策略以获取所需权限,并添加任何缺少的必需权限。

    • greengrass:PutCertificateAuthorities

    • greengrass:VerifyClientDeviceIdentity

    • greengrass:VerifyClientDeviceIoTCertificateAssociation

    • greengrass:GetConnectivityInfo

    • greengrass:UpdateConnectivityInfo—(可选)需要此权限才能使用IP 探测器组件,它将核心设备的网络连接信息报告给Amazon IoT Greengrass云服务。

    • iot:GetThingShadowiot:UpdateThingShadow, 和iot:DeleteThingShadow—(可选)使用需要这些权限影子管理器组件将客户端设备影子与同步Amazon IoT Core. 该功能需要使用版本Greengrass 核心v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本,以及MQTTv2.0 或更高版本。

  10. (可选)允许核心设备与同步阴影Amazon IoT Core,将以下语句添加到策略中。如果您计划与客户端设备影子进行交互,但不打算将其与同步Amazon IoT Core,请跳过此步骤。Replace领域account-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 IoTthing 事物主体可以是 X.509 设备证书或其他标识符。运行以下命令,然后替换MyGreengrassCore使用核心设备的名称。

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

    此操作将返回列出核心设备的事物主体的响应。

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

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

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

  3. LISTTAmazon 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. 获取策略的文档。运行以下命令,然后替换Greengrassv2IoThingPolicy使用策略的名称。

    aws iot get-policy --policy-name GreengrassV2IoTThingPolicy

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

    { "policyName": "GreengrassV2IoTThingPolicy", "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy", "policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Connect\",\n \"iot:Publish\",\n \"iot:Subscribe\",\n \"iot:Receive\",\n \"greengrass:*\"\n],\n \"Resource\": \"*\"\n }\n ]\n}", "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
    • greengrass:PutCertificateAuthorities

    • greengrass:VerifyClientDeviceIdentity

    • greengrass:VerifyClientDeviceIoTCertificateAssociation

    • greengrass:GetConnectivityInfo

    • greengrass:UpdateConnectivityInfo—(可选)需要此权限才能使用IP 探测器组件,它将核心设备的网络连接信息报告给Amazon IoT Greengrass云服务。

    • iot:GetThingShadowiot:UpdateThingShadow, 和iot:DeleteThingShadow—(可选)使用需要这些权限影子管理器组件将客户端设备影子与同步Amazon IoT Core. 该功能需要使用版本Greengrass 核心v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本,以及MQTTv2.0 或更高版本。

  8. 将更改另存为策略的新版本。运行以下命令,然后替换Greengrassv2IoThingPolicy使用策略的名称。

    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": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n\t\t\"iot:Connect\",\n\t\t\"iot:Publish\",\n\t\t\"iot:Subscribe\",\n\t\t\"iot:Receive\",\n\t\t\"greengrass:*\"\n ],\n \"Resource\": \"*\"\n }\n ]\n}", "policyVersionId": "2", "isDefaultVersion": true }

支持客户端设备的 Greengrass 组件

重要

核心设备必须运行Greengrass 核心v2.2.0 或更高版本来支持客户端设备。

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

  • Clifiguration (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 核心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)、本地发布/订阅和Amazon IoT CoreMQTT. 将此组件配置为与同步客户端设备Amazon IoT Core并与来自 Greengrass 组件的客户端设备进行交互。

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

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

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

    不要求您配置此组件以使用它。

  • Shadow (aws.greengrass.ShadowManager)

    注意

    要管理客户端设备影子,必须使用Greengrass 核心v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本,以及MQTTv2.0 或更高版本。

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

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

注意

我们建议您仅部署一个 MQTT 代理组件。这些区域有:MQTTIP探测器组件一次只能使用一个 MQTT 代理组件。如果您部署了多个 MQTT 代理组件,则必须将它们配置为使用不同的端口。

配置云发现(控制台)

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

配置云发现 (Amazon CLI)

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