本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将客户端设备连接到核心设备
您可以配置云发现以将客户端设备连接到核心设备。配置云发现时,客户端设备可以连接到Amazon IoT Greengrass云服务以检索有关它们可以连接的核心设备的信息。然后,客户端设备可以尝试连接到每台核心设备,直到成功连接。
要使用云发现,您必须执行以下操作:
-
将客户端设备关联到它们可以连接的核心设备。
-
指定客户端设备可以连接到每台核心设备的 MQTT 代理终端节点。
-
将组件部署到支持客户端设备的核心设备。
您也可以部署可选组件来执行以下操作:
-
在客户端设备、Greengrass 组件和Amazon IoT Core云服务之间中继消息。
-
自动为您管理核心设备 MQTT 代理终端节点。
-
管理本地客户端设备影子并将影子与Amazon IoT Core云服务同步。
-
您还必须查看和更新核心设备的Amazon IoT策略,以验证其是否具有连接客户端设备所需的权限。有关更多信息,请参阅要求:
配置云发现后,您可以测试客户端设备和核心设备之间的通信。有关更多信息,请参阅测试客户端设备通信:
主题
要求
要将客户端设备连接到核心设备,必须具备以下条件:
-
核心设备必须运行 Greengrass nucleus v2.2.0 或更高版本。
-
在核心设备运行的Amazon地区Amazon IoT Greengrass为你Amazon Web Services 账户提供的 Greengrass 服务角色。有关更多信息,请参阅配置 Greengrass 服务角色:
-
核心设备的Amazon IoT策略必须允许以下权限:
-
greengrass:PutCertificateAuthorities
-
greengrass:VerifyClientDeviceIdentity
-
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
greengrass:GetConnectivityInfo
-
greengrass:UpdateConnectivityInfo
—(可选)需要此权限才能使用 IP 检测器组件,该组件向Amazon IoT Greengrass云服务报告核心设备的网络连接信息。 -
iot:GetThingShadow
iot:UpdateThingShadow
、和iot:DeleteThingShadow
—(可选)这些权限是使用影子管理器组件与客户端设备影子同步所必需的Amazon IoT Core。此功能需要 Greengrass nucleus v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本以及 MQTT bridge v2.2.0 或更高版本。
有关更多信息,请参阅配置Amazon IoT事物策略:
注意 如果您在安装Amazon IoT Greengrass核心软件时使用了默认Amazon IoT策略,则核心设备具有允许访问所有Amazon IoT Greengrass操作的Amazon IoT策略 (
greengrass:*
)。 -
-
Amazon IoT你可以作为客户端设备连接的东西。有关更多信息,请参阅《Amazon IoT Core开发者指南》中的创建Amazon IoT资源。
-
每台客户端设备的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 GreengrassAmazon Web Services 账户
当您在Amazon IoT Greengrass控制台
在本部分中,您将检查 Greengrass 服务角色是否已设置。如果未设置,则可以在该区域创建一个新的 Greengrass 服务角色Amazon IoT GreengrassAmazon Web Services 账户以与之关联。
-
检查您在该地区的 Greengrass 服务角色是否Amazon Web Services 账户与Amazon IoT Greengrass您相关联。执行以下操作:
-
导航到 Amazon IoT 控制台
。 -
在导航窗格中,选择 Settings (设置)。
-
在 Greengrass 服务角色部分中,找到当前服务角色以查看 Greengrass 服务角色是否关联。
如果您关联了 Greengrass 服务角色,则您满足了使用 IP 探测器组件的要求。跳至配置Amazon IoT事物策略。
-
-
如果您在该地区的 Greengrass 服务角色与Amazon IoT Greengrass您Amazon Web Services 账户无关,请创建一个 Greengrass 服务角色并将其关联。执行以下操作:
-
导航到 IAM 控制台
。 -
选择 Roles (角色)。
-
选择 Create role(创建角色)。
-
在 Create role(创建角色)页面上,执行以下操作:
-
在 “可信实体类型” 下,选择Amazon Web Service。
-
在 “用例”、“其他用例” 下Amazon Web Services,选择 Greengrass,选择 Greengrass。此选项指定添加为可以Amazon IoT Greengrass担任此角色的可信实体。
-
选择 Next(下一步)。
-
在 “权限策略” 下,选择AWSGreengrassResourceAccessRolePolicy要附加到角色的。
-
选择 Next(下一步)。
-
在角色名称中,输入角色的名称,例如
Greengrass_ServiceRole
。 -
选择 Create role(创建角色)。
-
-
导航到 Amazon IoT 控制台
。 -
在导航窗格中,选择 Settings (设置)。
-
在 Greengrass 服务角色部分中,选择附加角色。
-
在更新 Greengrass 服务角色模式中,选择您创建的 IAM 角色,然后选择附加角色。
-
-
检查您在该地区的 Greengrass 服务角色是否Amazon Web Services 账户与Amazon IoT Greengrass您相关联。
aws greengrassv2 get-service-role-for-account
如果关联 Greengrass 服务角色,则该操作会返回包含有关该角色信息的响应。
如果您关联了 Greengrass 服务角色,则您满足了使用 IP 探测器组件的要求。跳至配置Amazon IoT事物策略。
-
如果您在该地区的 Greengrass 服务角色与Amazon IoT Greengrass您Amazon Web Services 账户无关,请创建一个 Greengrass 服务角色并将其关联。执行以下操作:
-
使用允许 Amazon IoT Greengrass 代入该角色的信任策略创建角色。此示例将创建一个名为
Greengrass_ServiceRole
的角色,但您也可以使用其他名称。我们建议您在信任策略中还包括aws:SourceArn
和aws:SourceAccount
全局条件上下文密钥,以帮助防止出现混乱的副手安全问题。条件上下文密钥限制访问权限,仅允许来自指定帐户和 Greengrass 工作区的请求。有关混淆代理人问题的更多信息,请参阅防止跨服务混淆代理。 -
从输出中的角色元数据复制角色 ARN。使用该 ARN 将角色与您的账户关联。
-
将
AWSGreengrassResourceAccessRolePolicy
策略附加到该角色。aws iam attach-role-policy --role-name Greengrass_ServiceRole --policy-arn arn:aws:iam::aws:policy/service-role/AWSGreengrassResourceAccessRolePolicy
-
将 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策略必须允许以下权限:
-
greengrass:PutCertificateAuthorities
-
greengrass:VerifyClientDeviceIdentity
-
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
greengrass:GetConnectivityInfo
-
greengrass:UpdateConnectivityInfo
—(可选)需要此权限才能使用 IP 检测器组件,该组件向Amazon IoT Greengrass云服务报告核心设备的网络连接信息。 -
iot:GetThingShadow
iot:UpdateThingShadow
、和iot:DeleteThingShadow
—(可选)这些权限是使用影子管理器组件与客户端设备影子同步所必需的Amazon IoT Core。此功能需要 Greengrass nucleus v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本以及 MQTT bridge v2.2.0 或更高版本。
在本部分中,您将查看核心设备的Amazon IoT策略并添加所有缺失的必需权限。如果您使用Amazon IoT Greengrass核心软件安装程序来配置资源,则您的核心设备具有允许访问所有Amazon IoT Greengrass操作的Amazon IoT策略 (greengrass:*
)。在这种情况下,只有在计划部署影子管理器组件以与同步设备影子时,才必须更新Amazon IoT策略Amazon IoT Core。否则,您可以跳过此部分。
-
在Amazon IoT Greengrass控制台
导航菜单中,选择 Core 设备。 -
在核心设备页面上,选择要更新的核心设备。
-
在核心设备详细信息页面上,选择指向核心设备的 Thing 的链接。此链接将在Amazon IoT控制台中打开事物详细信息页面。
-
在事物详细信息页面上,选择证书。
-
在 “证书” 选项卡中,选择事物的活动证书。
-
在证书详细信息页面上,选择策略。
-
在 “策略” 选项卡中,选择要查看和更新的Amazon IoT策略。您可以为附加到核心设备的活动证书的任何策略添加所需的权限。
注意 如果您使用Amazon IoT Greengrass核心软件安装程序来配置资源,则有两个Amazon IoT策略。我们建议您选择名为GreengrassV2IoTThingPolicy的策略(如果存在)。默认情况下,您使用快速安装程序创建的核心设备使用此策略名称。如果您向此策略添加权限,则还将这些权限授予使用此策略的其他核心设备。
-
在策略概览中,选择编辑活跃版本。
-
查看政策以了解所需权限,然后添加所有缺失的必需权限。
-
greengrass:PutCertificateAuthorities
-
greengrass:VerifyClientDeviceIdentity
-
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
greengrass:GetConnectivityInfo
-
greengrass:UpdateConnectivityInfo
—(可选)需要此权限才能使用 IP 检测器组件,该组件向Amazon IoT Greengrass云服务报告核心设备的网络连接信息。 -
iot:GetThingShadow
iot:UpdateThingShadow
、和iot:DeleteThingShadow
—(可选)这些权限是使用影子管理器组件与客户端设备影子同步所必需的Amazon IoT Core。此功能需要 Greengrass nucleus v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本以及 MQTT bridge v2.2.0 或更高版本。
-
-
(可选)要允许核心设备与进行阴影同步Amazon IoT Core,请在策略中添加以下语句。如果您计划与客户端设备影子进行交互,但不与之同步Amazon IoT Core,请跳过此步骤。用您使用的
区域
和您的Amazon Web Services 账户号码替换区域和账户 ID
。-
此示例语句允许访问所有设备的影子。要遵循最佳安全实践,您可以限制仅访问核心设备和连接到核心设备的客户端设备。有关更多信息,请参阅支持客户端设备的最低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/*" ] } ] } -
-
要将新策略版本设置为活动版本,请在策略版本状态下选择将编辑后的版本设置为该策略的活动版本。
-
选择 “另存为新版本”。
-
列出核心设备的原Amazon IoT理。事物主体可以是 X.509 设备证书或其他标识。运行以下命令,并
MyGreengrassCore
替换为核心设备的名称。aws iot list-thing-principals --thing-name
MyGreengrassCore
该操作会返回一个响应,其中列出了核心设备的事物主体。
{ "principals": [ "arn:aws:iot:us-west-2:123456789012:cert/
certificateId
" ] } -
识别核心设备的有效证书。运行以下命令,将 certcert
ificate
Id 替换为上一步中每个证书的 ID,直到找到有效证书。证书 ID 是证书 ARN 末尾的十六进制字符串。该--query
参数指定仅输出证书的状态。aws iot describe-certificate --certificate-id
certificateId
--query 'certificateDescription.status'该操作以字符串形式返回证书状态。例如,如果证书处于活动状态,则此操作将输出
"ACTIVE"
。 -
列出附加到证书的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" } ] }
-
选择要查看和更新的政策。
注意 如果您使用Amazon IoT Greengrass核心软件安装程序来配置资源,则有两个Amazon IoT策略。我们建议您选择名为GreengrassV2IoTThingPolicy的策略(如果存在)。默认情况下,您使用快速安装程序创建的核心设备使用此策略名称。如果您向此策略添加权限,则还将这些权限授予使用此策略的其他核心设备。
-
获取策略文档。运行以下命令,然后将
GreenGrassv2IoTThingPolicy
替换为策略的名称。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" }
-
使用在线转换器或其他工具将策略文档字符串转换为 JSON 对象,然后将其保存到名为的文件中
iot-policy.json
。例如,如果您安装了 jq
工具,则可以运行以下命令来获取策略文档,将其转换为 JSON 对象,然后将策略文档另存为 JSON 对象。 aws iot get-policy --policy-name
GreengrassV2IoTThingPolicy
--query 'policyDocument' | jq fromjson >> iot-policy.json -
查看政策以了解所需权限,然后添加所有缺失的必需权限。
例如,在基于 Linux 的系统上,您可以运行以下命令来使用 GNU nano 打开文件。
nano iot-policy.json
-
greengrass:PutCertificateAuthorities
-
greengrass:VerifyClientDeviceIdentity
-
greengrass:VerifyClientDeviceIoTCertificateAssociation
-
greengrass:GetConnectivityInfo
-
greengrass:UpdateConnectivityInfo
—(可选)需要此权限才能使用 IP 检测器组件,该组件向Amazon IoT Greengrass云服务报告核心设备的网络连接信息。 -
iot:GetThingShadow
iot:UpdateThingShadow
、和iot:DeleteThingShadow
—(可选)这些权限是使用影子管理器组件与客户端设备影子同步所必需的Amazon IoT Core。此功能需要 Greengrass nucleus v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本以及 MQTT bridge v2.2.0 或更高版本。
-
-
将更改另存为策略的新版本。运行以下命令,然后将
GreenGrassv2IoTThingPolicy
替换为策略的名称。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 nucleus v2.2.0 或更高版本才能支持客户端设备。
要使客户端设备能够与核心设备连接和通信,您需要将以下 Greengrass 组件部署到核心设备:
-
客户机设备auth (
aws.greengrass.clientdevices.Auth
)部署客户端设备身份验证组件以对客户端设备进行身份验证并授权客户端设备操作。此组件允许Amazon IoT您的设备连接到核心设备。
此组件需要一些配置才能使用。您必须指定客户端设备组以及每个组有权执行的操作,例如通过 MQTT 进行连接和通信。有关更多信息,请参阅 Client 设备身份验证组件配置。
-
MQTT 3.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 nucleus v2.6.0 或更高版本以及客户端设备身份验证 v2.2.0 或更高版本。
部署 EMQX MQTT 代理组件,在客户端设备和核心设备之间的通信中使用 MQTT 5.0 功能。EMQX MQTT 代理符合 MQTT 5.0,包括对会话和消息到期间隔、用户属性、共享订阅、主题别名等的支持。
您无需配置此组件即可使用它。但是,您可以配置此组件运行 MQTT 代理的端口。默认情况下,它使用端口 8883。
-
MQT 桥 (
aws.greengrass.clientdevices.mqtt.Bridge
)(可选)部署 MQTT 桥接组件以在客户端设备(本地 MQTT)、本地发布/订阅和Amazon IoT Core MQTT 之间中继消息。配置此组件,使客户端设备与 Greengrass 组件中的客户端设备同步Amazon IoT Core并与之交互。
此组件需要配置才能使用。您必须指定此组件中继消息的主题映射。有关更多信息,请参阅 MQTT 桥接组件配置。
-
IP 探测器 (
aws.greengrass.clientdevices.IPDetector
)(可选)部署 IP 检测器组件以自动向Amazon IoT Greengrass云服务报告核心设备的 MQTT 代理端点。如果您的网络设置很复杂,例如路由器将 MQTT 代理端口转发到核心设备,则无法使用此组件。
您无需配置此组件即可使用它。
-
影子经理 (
aws.greengrass.ShadowManager
)注意 要管理客户端设备影子,必须使用 Greengrass nucleus v2.6.0 或更高版本、影子管理器 v2.2.0 或更高版本以及 MQTT bridge v2.2.0 或更高版本。
(可选)部署影子管理器组件以管理核心设备上的客户端设备影子。Greengrass 组件可以获取、更新和删除客户端设备影子,以便与客户端设备进行交互。您还可以配置影子管理器组件以将客户端设备影子与Amazon IoT Core云服务同步。
要将此组件用于客户端设备影子,必须配置 MQTT bridge 组件以在客户端设备和使用本地发布/订阅的影子管理器之间中继消息。否则,此组件不需要配置即可使用,但需要进行配置才能同步设备影子。
配置云发现(控制台)
您可以使用Amazon IoT Greengrass控制台关联客户端设备、管理核心设备端点以及部署组件以启用客户端设备支持。有关更多信息,请参阅步骤 2:启用客户端设备支持:
配置云发现 (Amazon CLI)
您可以使用Amazon Command Line Interface (Amazon CLI) 关联客户端设备、管理核心设备端点以及部署组件以启用客户端设备支持。有关更多信息,请参阅下列内容: