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

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

客户机设备auth

客户端设备身份验证组件 (aws.greengrass.clientdevices.Auth) 对客户端设备进行身份验证并授权客户端设备操作。

注意

客户端设备是连接到 Greengrass 核心设备以发送 MQTT 消息和数据进行处理的本地 IoT 设备。有关更多信息,请参阅与本地 IoT 设备互动

版本

此组件有以下版本:

注意

客户端设备身份验证版本 2.3.0。强烈建议您升级到客户端设备身份验证版本 2.3.1。

  • 2.3.x

  • 2.2.x

  • 2.1.x

  • 2.0.x

类型

这个组件是一个插件组件 (aws.greengrass.plugin)。Greengrass 核心在与核心相同的 Java 虚拟机 (JVM) 中运行此组件。当您在核心设备上更改此组件的版本时,nucleus 会重新启动。

此组件使用与 Greengrass 核相同的日志文件。有关更多信息,请参阅监控Amazon IoT Greengrass日志

有关更多信息,请参阅组件类型

操作系统

此组件可以安装在运行以下操作系统的核心设备上:

  • Linux

  • Windows

要求

此组件具有以下要求:

  • Greengrass 服务角色必须与您关联Amazon Web Services 账户并允许该iot:DescribeCertificate权限。

  • 核心设备的Amazon IoT策略必须允许以下权限:

    • greengrass:GetConnectivityInfo,其中资源包括运行此组件的核心设备的 ARN

    • greengrass:VerifyClientDeviceIoTCertificateAssociation,其中资源包括连接到核心设备的各个客户端设备的 Amazon Resource Name (ARN)

    • greengrass:VerifyClientDeviceIdentity

    • greengrass:PutCertificateAuthorities

    • iot:Publish,其中资源包括以下 MQTT 主题的 ARN:

      • $aws/things/coreDeviceThingName*-gci/shadow/get

    • iot:Subscribe,其中资源包括以下 MQTT 主题过滤器的 ARN:

      • $aws/things/coreDeviceThingName*-gci/shadow/update/delta

      • $aws/things/coreDeviceThingName*-gci/shadow/get/accepted

    • iot:Receive,其中资源包括以下 MQTT 主题的 ARN:

      • $aws/things/coreDeviceThingName*-gci/shadow/update/delta

      • $aws/things/coreDeviceThingName*-gci/shadow/get/accepted

    有关更多信息,请参阅 数据层面操作的 Amazon IoT 策略支持客户端设备的最低Amazon IoT策略

  • (可选)要使用离线身份验证,Amazon IoT Greengrass服务使用的Amazon Identity and Access Management (IAM) 角色必须包含以下权限:

    • greengrass:ListClientDevicesAssociatedWithCoreDevice使核心设备能够列出用于脱机身份验证的客户端。

端点和端口

除了基本操作所需的端点和端口外,此组件还必须能够向以下端点和端口执行出站请求。有关更多信息,请参阅允许设备流量通过代理或防火墙

Endpoint 端口 必填 描述

iot.region.amazonaws.com

443

用于获取有关Amazon IoT事物证书的信息。

附属物

部署组件时,Amazon IoT Greengrass还会部署其依赖项的兼容版本。这意味着您必须满足组件及其所有依赖项的要求才能成功部署该组件。本节列出了此组件已发布版本的依赖关系以及为每个依赖项定义组件版本的语义版本约束。您还可以在Amazon IoT Greengrass控制台中查看每个版本组件的依赖关系。在组件详细信息页面上,查找 “依赖关系” 列表。

2.3.1

下表列出了此组件 2.3.1 版的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.6.0 <0 软性
2.3.0

下表列出了此组件 2.3.0 版的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.6.0 <0 软性
2.2.3

下表列出了此组件版本 2.2.3 的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.6.0 <=2.9.0 软性
2.2.2

下表列出了此组件 2.2.2 版的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.6.0 <0 软性
2.2.1

下表列出了此组件版本 2.2.1 的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.6.0 <0 软性
2.2.0

下表列出了此组件 2.2.0 版的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.6.0 <0 软性
2.1.0

下表列出了此组件 2.1.0 版的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.0 <2.0 软性
2.0.4

下表列出了此组件 2.0.4 版的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.0 <2.0 软性
2.0.2 and 2.0.3

下表列出了此组件版本 2.0.2 和 2.0.3 的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.0 <2.0 软性
2.0.1

下表列出了此组件版本 2.0.1 的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.0 <2.0 软性
2.0.0

下表列出了此组件 2.0.0 版的依赖关系。

依赖关系 兼容的版本 依赖关系类型
Greengrass 核 >=2.0 <2.0 软性

有关组件依赖关系的更多信息,请参阅组件配方参考

配置

此组件提供以下配置参数,您可以在部署组件时对其进行自定义。

v2.3.x
deviceGroups

设备组是有权与核心设备连接和通信的客户端设备组。使用选择规则来识别客户端设备组,并定义客户端设备授权策略,为每个设备组指定权限。

此对象包含以下信息:

formatVersion

此配置对象的格式版本。

从以下选项中进行选择:

  • 2021-03-05

definitions

此核心设备的设备组。每个定义都指定了用于评估客户端设备是否为组成员的选择规则。每个定义还指定了应用于与选择规则匹配的客户端设备的权限策略。如果客户端设备是多个设备组的成员,则该设备的权限由每个组的权限策略组成。

此对象包含以下信息:

groupNameKey

该设备组的名称。groupNameKey替换为可帮助您识别此设备组的名称。

此对象包含以下信息:

selectionRule

用于指定哪些客户端设备是该设备组成员的查询。当客户端设备连接时,核心设备会评估此选择规则,以确定该客户端设备是否是该设备组的成员。如果客户端设备是成员,则核心设备使用该设备组的策略来授权客户端设备的操作。

每个选择规则至少包含一个选择规则子句,该子句是可以匹配客户端设备的单个表达式查询。选择规则使用与Amazon IoT队列索引相同的查询语法。有关选择规则语法的更多信息,请参阅《Amazon IoT Core开发者指南》中的Amazon IoT队列索引查询语法

使用*通配符将多个客户端设备与一个选择规则子句进行匹配。您可以在事物名称的末尾使用此通配符来匹配名称以您指定的字符串开头的客户端设备。您也可以使用此通配符匹配所有客户端设备。

注意

要选择包含冒号字符 (:) 的值,请使用反斜线字符 (\) 对冒号进行转义。在 JSON 等格式中,必须对反斜线字符进行转义,因此在冒号字符之前输入两个反斜线字符。例如,指定thingName: MyTeam\\:ClientDevice1选择名称为的事物MyTeam:ClientDevice1

您可以指定以下选择器:

  • thingName— 客户端设备的Amazon IoT名称。

例 选择规则示例

以下选择规则匹配名称为MyClientDevice1或的客户端设备MyClientDevice2

thingName: MyClientDevice1 OR thingName: MyClientDevice2
例 选择规则示例(使用通配符)

以下选择规则匹配名称以开头的客户端设备MyClientDevice

thingName: MyClientDevice*
例 选择规则示例(匹配所有设备)

以下选择规则匹配所有客户端设备。

thingName: *
policyName

适用于该设备组中客户端设备的权限策略。指定您在policies对象中定义的策略的名称。

policies

连接到核心设备的客户端设备的客户端设备授权策略。每个授权策略都指定了一组操作以及客户端设备可以执行这些操作的资源。

此对象包含以下信息:

policyNameKey

此授权策略的名称。policyNameKey替换为可帮助您识别此授权策略的名称。您可以使用此策略名称来定义哪个策略适用于设备组。

此对象包含以下信息:

statementNameKey

此策略声明的名称。statementNameKey替换为可帮助您识别此政策声明的名称。

此对象包含以下信息:

operations

允许使用此策略中的资源的操作列表。

您可以包括以下任一操作:

  • mqtt:connect— 授予连接到核心设备的权限。客户端设备必须具有此权限才能连接到核心设备。

    此操作支持以下资源:

    • mqtt:clientId:deviceClientId— 根据客户端设备用于连接到核心设备的 MQTT 代理的客户端 ID 来限制访问权限。deviceClientId替换为要使用的客户端 ID。

  • mqtt:publish— 授予向主题发布 MQTT 消息的权限。

    此操作支持以下资源:

    • mqtt:topic:mqttTopic— 根据客户端设备发布消息的 MQTT 主题限制访问权限。将 mqttTo pic 替换为要使用的主题。

      此资源不支持 MQTT 主题通配符。

  • mqtt:subscribe— 授予订阅 MQTT 主题过滤器以接收消息的权限。

    此操作支持以下资源:

    • mqtt:topicfilter:mqttTopicFilter— 根据客户端设备可以订阅消息的 MQTT 主题限制访问权限。mqttTopicFilter替换为要使用的主题过滤器。

      此资源支持+# MQTT 主题通配符。有关更多信息,请参阅《Amazon IoT Core开发者指南》中的 MQTT 主题

      客户端设备可以订阅您允许的确切主题过滤器。例如,如果您允许客户端设备订阅mqtt:topicfilter:client/+/status资源,则客户端设备可以订阅,client/+/status但不能订阅client/client1/status

您可以指定通*配符以允许访问所有操作。

resources

允许执行本策略中操作的资源列表。指定与该策略中的操作相对应的资源。例如,您可以在指定mqtt:publish操作的策略中指定 MQTT 主题资源列表 (mqtt:topic:mqttTopic)。

您可以指定通*配符以允许访问所有资源。您不能使用*通配符来匹配部分资源标识符。例如,您可以指"resources": "*""resources": "mqtt:clientId:*"

statementDescription

(可选)此政策声明的描述。

certificates

(可选)此核心设备的证书配置选项。此对象包含以下信息:

serverCertificateValiditySeconds

(可选)本地 MQTT 服务器证书过期的时长(以秒为单位)。您可以配置此选项以自定义客户端设备断开连接和重新连接到核心设备的频率。

此组件在本地 MQTT 服务器证书到期前 24 小时轮换该证书。MQTT 代理,例如 M oquette MQTT 代理组件,会生成新证书并重新启动。发生这种情况时,连接到该核心设备的所有客户端设备都将断开连接。客户端设备可以在短时间后重新连接到核心设备。

原定设置:604800(7 天)

最小值:172800(2 天)

最大值:864000(10 天)

performance

(可选)此核心设备的性能配置选项。此对象包含以下信息:

maxActiveAuthTokens

(可选)活动客户端设备授权令牌的最大数量。您可以增加此数字,使更多的客户端设备无需重新验证即可连接到单核设备。

默认值:2500

cloudRequestQueueSize

(可选)此组件拒绝Amazon Web Services 云请求前排队的最大请求数。

默认值:100

maxConcurrentCloudRequests

(可选)发送给的最大并发请求数Amazon Web Services 云。您可以增加此数值以提高连接大量客户端设备的核心设备上的身份验证性能。

默认值:1

certificateAuthority

(可选)证书颁发机构配置选项,用您自己的中间证书颁发机构替换核心设备中间颁发机构。此对象包含以下信息。

证书 URI

证书的位置。它可以是文件系统 URI,也可以是指向存储在硬件安全模块中的证书的 URI。

certificateChainUri

核心设备 CA 的证书链的位置。这应该是回到您的根 CA 的完整证书链。它可以是文件系统 URI,也可以是指向存储在硬件安全模块中的证书链的 URI。

privateKeyUri

核心设备私钥的位置。这可以是文件系统 URI,也可以是指向存储在硬件安全模块中的证书私钥的 URI。

security

(可选)此核心设备的安全配置选项。此对象包含以下信息。

clientDeviceTrustDurationMinutes

在要求客户端设备向核心设备重新进行身份验证之前,可以信任客户端设备的身份验证信息的持续时间(以分钟为单位)。默认值为 1。

例 示例:配置合并更新(使用限制性策略)

以下示例配置指定允许名称以开头的MyClientDevice客户端设备连接并发布/订阅所有主题。

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyDeviceGroup": { "selectionRule": "thingName: MyClientDevice*", "policyName": "MyRestrictivePolicy" } }, "policies": { "MyRestrictivePolicy": { "AllowConnect": { "statementDescription": "Allow client devices to connect.", "operations": [ "mqtt:connect" ], "resources": [ "*" ] }, "AllowPublish": { "statementDescription": "Allow client devices to publish on test/topic.", "operations": [ "mqtt:publish" ], "resources": [ "mqtt:topic:test/topic" ] }, "AllowSubscribe": { "statementDescription": "Allow client devices to subscribe to test/topic/response.", "operations": [ "mqtt:subscribe" ], "resources": [ "mqtt:topicfilter:test/topic/response" ] } } } } }
例 示例:配置合并更新(使用许可策略)

以下示例配置指定允许所有客户端设备连接并发布/订阅所有主题。

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyPermissiveDeviceGroup": { "selectionRule": "thingName: *", "policyName": "MyPermissivePolicy" } }, "policies": { "MyPermissivePolicy": { "AllowAll": { "statementDescription": "Allow client devices to perform all actions.", "operations": [ "*" ], "resources": [ "*" ] } } } } }
v2.2.x
deviceGroups

设备组是有权与核心设备连接和通信的客户端设备组。使用选择规则来识别客户端设备组,并定义客户端设备授权策略,为每个设备组指定权限。

此对象包含以下信息:

formatVersion

此配置对象的格式版本。

从以下选项中进行选择:

  • 2021-03-05

definitions

此核心设备的设备组。每个定义都指定了用于评估客户端设备是否为组成员的选择规则。每个定义还指定了应用于与选择规则匹配的客户端设备的权限策略。如果客户端设备是多个设备组的成员,则该设备的权限由每个组的权限策略组成。

此对象包含以下信息:

groupNameKey

该设备组的名称。groupNameKey替换为可帮助您识别此设备组的名称。

此对象包含以下信息:

selectionRule

用于指定哪些客户端设备是该设备组成员的查询。当客户端设备连接时,核心设备会评估此选择规则,以确定该客户端设备是否是该设备组的成员。如果客户端设备是成员,则核心设备使用该设备组的策略来授权客户端设备的操作。

每个选择规则至少包含一个选择规则子句,该子句是可以匹配客户端设备的单个表达式查询。选择规则使用与Amazon IoT队列索引相同的查询语法。有关选择规则语法的更多信息,请参阅《Amazon IoT Core开发者指南》中的Amazon IoT队列索引查询语法

使用*通配符将多个客户端设备与一个选择规则子句进行匹配。您可以在事物名称的末尾使用此通配符来匹配名称以您指定的字符串开头的客户端设备。您也可以使用此通配符匹配所有客户端设备。

注意

要选择包含冒号字符 (:) 的值,请使用反斜线字符 (\) 对冒号进行转义。在 JSON 等格式中,必须对反斜线字符进行转义,因此在冒号字符之前输入两个反斜线字符。例如,指定thingName: MyTeam\\:ClientDevice1选择名称为的事物MyTeam:ClientDevice1

您可以指定以下选择器:

  • thingName— 客户端设备的Amazon IoT名称。

例 选择规则示例

以下选择规则匹配名称为MyClientDevice1或的客户端设备MyClientDevice2

thingName: MyClientDevice1 OR thingName: MyClientDevice2
例 选择规则示例(使用通配符)

以下选择规则匹配名称以开头的客户端设备MyClientDevice

thingName: MyClientDevice*
例 选择规则示例(匹配所有设备)

以下选择规则匹配所有客户端设备。

thingName: *
policyName

适用于该设备组中客户端设备的权限策略。指定您在policies对象中定义的策略的名称。

policies

连接到核心设备的客户端设备的客户端设备授权策略。每个授权策略都指定了一组操作以及客户端设备可以执行这些操作的资源。

此对象包含以下信息:

policyNameKey

此授权策略的名称。policyNameKey替换为可帮助您识别此授权策略的名称。您可以使用此策略名称来定义哪个策略适用于设备组。

此对象包含以下信息:

statementNameKey

此策略声明的名称。statementNameKey替换为可帮助您识别此政策声明的名称。

此对象包含以下信息:

operations

允许使用此策略中的资源的操作列表。

您可以包括以下任一操作:

  • mqtt:connect— 授予连接到核心设备的权限。客户端设备必须具有此权限才能连接到核心设备。

    此操作支持以下资源:

    • mqtt:clientId:deviceClientId— 根据客户端设备用于连接到核心设备的 MQTT 代理的客户端 ID 来限制访问权限。deviceClientId替换为要使用的客户端 ID。

  • mqtt:publish— 授予向主题发布 MQTT 消息的权限。

    此操作支持以下资源:

    • mqtt:topic:mqttTopic— 根据客户端设备发布消息的 MQTT 主题限制访问权限。将 mqttTo pic 替换为要使用的主题。

      此资源不支持 MQTT 主题通配符。

  • mqtt:subscribe— 授予订阅 MQTT 主题过滤器以接收消息的权限。

    此操作支持以下资源:

    • mqtt:topicfilter:mqttTopicFilter— 根据客户端设备可以订阅消息的 MQTT 主题限制访问权限。mqttTopicFilter替换为要使用的主题过滤器。

      此资源支持+# MQTT 主题通配符。有关更多信息,请参阅《Amazon IoT Core开发者指南》中的 MQTT 主题

      客户端设备可以订阅您允许的确切主题过滤器。例如,如果您允许客户端设备订阅mqtt:topicfilter:client/+/status资源,则客户端设备可以订阅,client/+/status但不能订阅client/client1/status

您可以指定通*配符以允许访问所有操作。

resources

允许执行本策略中操作的资源列表。指定与该策略中的操作相对应的资源。例如,您可以在指定mqtt:publish操作的策略中指定 MQTT 主题资源列表 (mqtt:topic:mqttTopic)。

您可以指定通*配符以允许访问所有资源。您不能使用*通配符来匹配部分资源标识符。例如,您可以指"resources": "*""resources": "mqtt:clientId:*"

statementDescription

(可选)此政策声明的描述。

certificates

(可选)此核心设备的证书配置选项。此对象包含以下信息:

serverCertificateValiditySeconds

(可选)本地 MQTT 服务器证书过期的时长(以秒为单位)。您可以配置此选项以自定义客户端设备断开连接和重新连接到核心设备的频率。

此组件在本地 MQTT 服务器证书到期前 24 小时轮换该证书。MQTT 代理,例如 M oquette MQTT 代理组件,会生成新证书并重新启动。发生这种情况时,连接到该核心设备的所有客户端设备都将断开连接。客户端设备可以在短时间后重新连接到核心设备。

原定设置:604800(7 天)

最小值:172800(2 天)

最大值:864000(10 天)

performance

(可选)此核心设备的性能配置选项。此对象包含以下信息:

maxActiveAuthTokens

(可选)活动客户端设备授权令牌的最大数量。您可以增加此数字,使更多的客户端设备无需重新验证即可连接到单核设备。

默认值:2500

cloudRequestQueueSize

(可选)此组件拒绝Amazon Web Services 云请求前排队的最大请求数。

默认值:100

maxConcurrentCloudRequests

(可选)发送给的最大并发请求数Amazon Web Services 云。您可以增加此数值以提高连接大量客户端设备的核心设备上的身份验证性能。

默认值:1

例 示例:配置合并更新(使用限制性策略)

以下示例配置指定允许名称以开头的MyClientDevice客户端设备连接并发布/订阅所有主题。

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyDeviceGroup": { "selectionRule": "thingName: MyClientDevice*", "policyName": "MyRestrictivePolicy" } }, "policies": { "MyRestrictivePolicy": { "AllowConnect": { "statementDescription": "Allow client devices to connect.", "operations": [ "mqtt:connect" ], "resources": [ "*" ] }, "AllowPublish": { "statementDescription": "Allow client devices to publish on test/topic.", "operations": [ "mqtt:publish" ], "resources": [ "mqtt:topic:test/topic" ] }, "AllowSubscribe": { "statementDescription": "Allow client devices to subscribe to test/topic/response.", "operations": [ "mqtt:subscribe" ], "resources": [ "mqtt:topicfilter:test/topic/response" ] } } } } }
例 示例:配置合并更新(使用许可策略)

以下示例配置指定允许所有客户端设备连接并发布/订阅所有主题。

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyPermissiveDeviceGroup": { "selectionRule": "thingName: *", "policyName": "MyPermissivePolicy" } }, "policies": { "MyPermissivePolicy": { "AllowAll": { "statementDescription": "Allow client devices to perform all actions.", "operations": [ "*" ], "resources": [ "*" ] } } } } }
v2.1.x
deviceGroups

设备组是有权与核心设备连接和通信的客户端设备组。使用选择规则来识别客户端设备组,并定义客户端设备授权策略,为每个设备组指定权限。

此对象包含以下信息:

formatVersion

此配置对象的格式版本。

从以下选项中进行选择:

  • 2021-03-05

definitions

此核心设备的设备组。每个定义都指定了用于评估客户端设备是否为组成员的选择规则。每个定义还指定了应用于与选择规则匹配的客户端设备的权限策略。如果客户端设备是多个设备组的成员,则该设备的权限由每个组的权限策略组成。

此对象包含以下信息:

groupNameKey

该设备组的名称。groupNameKey替换为可帮助您识别此设备组的名称。

此对象包含以下信息:

selectionRule

用于指定哪些客户端设备是该设备组成员的查询。当客户端设备连接时,核心设备会评估此选择规则,以确定该客户端设备是否是该设备组的成员。如果客户端设备是成员,则核心设备使用该设备组的策略来授权客户端设备的操作。

每个选择规则至少包含一个选择规则子句,该子句是可以匹配客户端设备的单个表达式查询。选择规则使用与Amazon IoT队列索引相同的查询语法。有关选择规则语法的更多信息,请参阅《Amazon IoT Core开发者指南》中的Amazon IoT队列索引查询语法

使用*通配符将多个客户端设备与一个选择规则子句进行匹配。您可以在事物名称的末尾使用此通配符来匹配名称以您指定的字符串开头的客户端设备。您也可以使用此通配符匹配所有客户端设备。

注意

要选择包含冒号字符 (:) 的值,请使用反斜线字符 (\) 对冒号进行转义。在 JSON 等格式中,必须对反斜线字符进行转义,因此在冒号字符之前输入两个反斜线字符。例如,指定thingName: MyTeam\\:ClientDevice1选择名称为的事物MyTeam:ClientDevice1

您可以指定以下选择器:

  • thingName— 客户端设备的Amazon IoT名称。

例 选择规则示例

以下选择规则匹配名称为MyClientDevice1或的客户端设备MyClientDevice2

thingName: MyClientDevice1 OR thingName: MyClientDevice2
例 选择规则示例(使用通配符)

以下选择规则匹配名称以开头的客户端设备MyClientDevice

thingName: MyClientDevice*
例 选择规则示例(匹配所有设备)

以下选择规则匹配所有客户端设备。

thingName: *
policyName

适用于该设备组中客户端设备的权限策略。指定您在policies对象中定义的策略的名称。

policies

连接到核心设备的客户端设备的客户端设备授权策略。每个授权策略都指定了一组操作以及客户端设备可以执行这些操作的资源。

此对象包含以下信息:

policyNameKey

此授权策略的名称。policyNameKey替换为可帮助您识别此授权策略的名称。您可以使用此策略名称来定义哪个策略适用于设备组。

此对象包含以下信息:

statementNameKey

此策略声明的名称。statementNameKey替换为可帮助您识别此政策声明的名称。

此对象包含以下信息:

operations

允许使用此策略中的资源的操作列表。

您可以包括以下任一操作:

  • mqtt:connect— 授予连接到核心设备的权限。客户端设备必须具有此权限才能连接到核心设备。

    此操作支持以下资源:

    • mqtt:clientId:deviceClientId— 根据客户端设备用于连接到核心设备的 MQTT 代理的客户端 ID 来限制访问权限。deviceClientId替换为要使用的客户端 ID。

  • mqtt:publish— 授予向主题发布 MQTT 消息的权限。

    此操作支持以下资源:

    • mqtt:topic:mqttTopic— 根据客户端设备发布消息的 MQTT 主题限制访问权限。将 mqttTo pic 替换为要使用的主题。

      此资源不支持 MQTT 主题通配符。

  • mqtt:subscribe— 授予订阅 MQTT 主题过滤器以接收消息的权限。

    此操作支持以下资源:

    • mqtt:topicfilter:mqttTopicFilter— 根据客户端设备可以订阅消息的 MQTT 主题限制访问权限。mqttTopicFilter替换为要使用的主题过滤器。

      此资源支持+# MQTT 主题通配符。有关更多信息,请参阅《Amazon IoT Core开发者指南》中的 MQTT 主题

      客户端设备可以订阅您允许的确切主题过滤器。例如,如果您允许客户端设备订阅mqtt:topicfilter:client/+/status资源,则客户端设备可以订阅,client/+/status但不能订阅client/client1/status

您可以指定通*配符以允许访问所有操作。

resources

允许执行本策略中操作的资源列表。指定与该策略中的操作相对应的资源。例如,您可以在指定mqtt:publish操作的策略中指定 MQTT 主题资源列表 (mqtt:topic:mqttTopic)。

您可以指定通*配符以允许访问所有资源。您不能使用*通配符来匹配部分资源标识符。例如,您可以指"resources": "*""resources": "mqtt:clientId:*"

statementDescription

(可选)此政策声明的描述。

certificates

(可选)此核心设备的证书配置选项。此对象包含以下信息:

serverCertificateValiditySeconds

(可选)本地 MQTT 服务器证书过期的时长(以秒为单位)。您可以配置此选项以自定义客户端设备断开连接和重新连接到核心设备的频率。

此组件在本地 MQTT 服务器证书到期前 24 小时轮换该证书。MQTT 代理,例如 M oquette MQTT 代理组件,会生成新证书并重新启动。发生这种情况时,连接到该核心设备的所有客户端设备都将断开连接。客户端设备可以在短时间后重新连接到核心设备。

原定设置:604800(7 天)

最小值:172800(2 天)

最大值:864000(10 天)

例 示例:配置合并更新(使用限制性策略)

以下示例配置指定允许名称以开头的MyClientDevice客户端设备连接并发布/订阅所有主题。

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyDeviceGroup": { "selectionRule": "thingName: MyClientDevice*", "policyName": "MyRestrictivePolicy" } }, "policies": { "MyRestrictivePolicy": { "AllowConnect": { "statementDescription": "Allow client devices to connect.", "operations": [ "mqtt:connect" ], "resources": [ "*" ] }, "AllowPublish": { "statementDescription": "Allow client devices to publish on test/topic.", "operations": [ "mqtt:publish" ], "resources": [ "mqtt:topic:test/topic" ] }, "AllowSubscribe": { "statementDescription": "Allow client devices to subscribe to test/topic/response.", "operations": [ "mqtt:subscribe" ], "resources": [ "mqtt:topicfilter:test/topic/response" ] } } } } }
例 示例:配置合并更新(使用许可策略)

以下示例配置指定允许所有客户端设备连接并发布/订阅所有主题。

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyPermissiveDeviceGroup": { "selectionRule": "thingName: *", "policyName": "MyPermissivePolicy" } }, "policies": { "MyPermissivePolicy": { "AllowAll": { "statementDescription": "Allow client devices to perform all actions.", "operations": [ "*" ], "resources": [ "*" ] } } } } }
v2.0.x
deviceGroups

设备组是有权与核心设备连接和通信的客户端设备组。使用选择规则来识别客户端设备组,并定义客户端设备授权策略,为每个设备组指定权限。

此对象包含以下信息:

formatVersion

此配置对象的格式版本。

从以下选项中进行选择:

  • 2021-03-05

definitions

此核心设备的设备组。每个定义都指定了用于评估客户端设备是否为组成员的选择规则。每个定义还指定了应用于与选择规则匹配的客户端设备的权限策略。如果客户端设备是多个设备组的成员,则该设备的权限由每个组的权限策略组成。

此对象包含以下信息:

groupNameKey

该设备组的名称。groupNameKey替换为可帮助您识别此设备组的名称。

此对象包含以下信息:

selectionRule

用于指定哪些客户端设备是该设备组成员的查询。当客户端设备连接时,核心设备会评估此选择规则,以确定该客户端设备是否是该设备组的成员。如果客户端设备是成员,则核心设备使用该设备组的策略来授权客户端设备的操作。

每个选择规则至少包含一个选择规则子句,该子句是可以匹配客户端设备的单个表达式查询。选择规则使用与Amazon IoT队列索引相同的查询语法。有关选择规则语法的更多信息,请参阅《Amazon IoT Core开发者指南》中的Amazon IoT队列索引查询语法

使用*通配符将多个客户端设备与一个选择规则子句进行匹配。您可以在事物名称的末尾使用此通配符来匹配名称以您指定的字符串开头的客户端设备。您也可以使用此通配符来匹配所有客户端设备。

注意

要选择包含冒号字符 (:) 的值,请使用反斜线字符 (\) 对冒号进行转义。在 JSON 等格式中,必须对反斜线字符进行转义,因此在冒号字符之前输入两个反斜线字符。例如,指定thingName: MyTeam\\:ClientDevice1选择名称为的事物MyTeam:ClientDevice1

您可以指定以下选择器:

  • thingName— 客户端设备的Amazon IoT名称。

例 选择规则示例

以下选择规则匹配名称为MyClientDevice1或的客户端设备MyClientDevice2

thingName: MyClientDevice1 OR thingName: MyClientDevice2
例 选择规则示例(使用通配符)

以下选择规则匹配名称以开头的客户端设备MyClientDevice

thingName: MyClientDevice*
例 选择规则示例(匹配所有设备)

以下选择规则匹配所有客户端设备。

thingName: *
policyName

适用于该设备组中客户端设备的权限策略。指定您在policies对象中定义的策略的名称。

policies

连接到核心设备的客户端设备的客户端设备授权策略。每个授权策略都指定了一组操作以及客户端设备可以执行这些操作的资源。

此对象包含以下信息:

policyNameKey

此授权策略的名称。policyNameKey替换为可帮助您识别此授权策略的名称。您可以使用此策略名称来定义哪个策略适用于设备组。

此对象包含以下信息:

statementNameKey

此策略声明的名称。statementNameKey替换为可帮助您识别此政策声明的名称。

此对象包含以下信息:

operations

允许使用此策略中的资源的操作列表。

您可以包括以下任一操作:

  • mqtt:connect— 授予连接到核心设备的权限。客户端设备必须具有此权限才能连接到核心设备。

    此操作支持以下资源:

    • mqtt:clientId:deviceClientId— 根据客户端设备用于连接到核心设备的 MQTT 代理的客户端 ID 来限制访问权限。deviceClientId替换为要使用的客户端 ID。

  • mqtt:publish— 授予向主题发布 MQTT 消息的权限。

    此操作支持以下资源:

    • mqtt:topic:mqttTopic— 根据客户端设备发布消息的 MQTT 主题限制访问权限。将 mqttTo pic 替换为要使用的主题。

      此资源不支持 MQTT 主题通配符。

  • mqtt:subscribe— 授予订阅 MQTT 主题过滤器以接收消息的权限。

    此操作支持以下资源:

    • mqtt:topicfilter:mqttTopicFilter— 根据客户端设备可以订阅消息的 MQTT 主题限制访问权限。mqttTopicFilter替换为要使用的主题过滤器。

      此资源支持+# MQTT 主题通配符。有关更多信息,请参阅《Amazon IoT Core开发者指南》中的 MQTT 主题

      客户端设备可以订阅您允许的确切主题过滤器。例如,如果您允许客户端设备订阅mqtt:topicfilter:client/+/status资源,则客户端设备可以订阅,client/+/status但不能订阅client/client1/status

您可以指定通*配符以允许访问所有操作。

resources

允许执行本策略中操作的资源列表。指定与该策略中的操作相对应的资源。例如,您可以在指定mqtt:publish操作的策略中指定 MQTT 主题资源列表 (mqtt:topic:mqttTopic)。

您可以指定通*配符以允许访问所有资源。您不能使用*通配符来匹配部分资源标识符。例如,您可以指"resources": "*""resources": "mqtt:clientId:*"

statementDescription

(可选)此政策声明的描述。

例 示例:配置合并更新(使用限制性策略)

以下示例配置指定允许名称以开头的MyClientDevice客户端设备连接并发布/订阅所有主题。

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyDeviceGroup": { "selectionRule": "thingName: MyClientDevice*", "policyName": "MyRestrictivePolicy" } }, "policies": { "MyRestrictivePolicy": { "AllowConnect": { "statementDescription": "Allow client devices to connect.", "operations": [ "mqtt:connect" ], "resources": [ "*" ] }, "AllowPublish": { "statementDescription": "Allow client devices to publish on test/topic.", "operations": [ "mqtt:publish" ], "resources": [ "mqtt:topic:test/topic" ] }, "AllowSubscribe": { "statementDescription": "Allow client devices to subscribe to test/topic/response.", "operations": [ "mqtt:subscribe" ], "resources": [ "mqtt:topicfilter:test/topic/response" ] } } } } }
例 示例:配置合并更新(使用许可策略)

以下示例配置指定允许所有客户端设备连接并发布/订阅所有主题。

{ "deviceGroups": { "formatVersion": "2021-03-05", "definitions": { "MyPermissiveDeviceGroup": { "selectionRule": "thingName: *", "policyName": "MyPermissivePolicy" } }, "policies": { "MyPermissivePolicy": { "AllowAll": { "statementDescription": "Allow client devices to perform all actions.", "operations": [ "*" ], "resources": [ "*" ] } } } } }

本地日志文件

此组件使用与 Greengrass 核心组件相同的日志文件。

Linux
/greengrass/v2/logs/greengrass.log
Windows
C:\greengrass\v2\logs\greengrass.log
查看此组件的日志
  • 在核心设备上运行以下命令以实时查看此组件的日志文件。将 /greengrass/v2C:\greengrass\v2 替换为Amazon IoT Greengrass根文件夹的路径。

    Linux
    sudo tail -f /greengrass/v2/logs/greengrass.log
    Windows (PowerShell)
    Get-Content C:\greengrass\v2\logs\greengrass.log -Tail 10 -Wait

更改日志

下表说明每个版本的组件的更改。

Version

变更

2.3.1

错误修复和改进
  • 修复了内存泄漏问题。

2.3.0

警告

此版本不再可用。此版本中的改进可以在此组件的更高版本中找到。

新功能

  • 增加了对客户端设备离线身份验证的支持,以便当核心设备未连接到 Internet 时,它们可以继续连接到核心设备。

  • 增加了对客户提供的证书颁发机构的支持,核心设备使用该证书作为根证书生成 MQTT 代理证书。

2.2.3

版本已更新 Greengrass Nucreation 版本 2.8.0。

2.3.0

新功能

  • 增加了对客户端设备离线身份验证的支持,以便当核心设备未连接到 Internet 时,它们可以继续连接到核心设备。

  • 增加了对客户提供的证书颁发机构的支持,核心设备使用该证书作为根证书生成 MQTT 代理证书。

2.2.3

版本已更新 Greengrass Nucreation 版本 2.8.0。

2.2.2

错误修复和改进
  • 修复了在某些情况下,本地 MQTT 服务器证书的轮换频率超出预期频率的问题。

2.2.1

版本已更新 Greengrass Nucreation 版本 2.7.0。

2.2.0

新功能
  • 增加了对自定义组件的支持,以调用进程间通信 (IPC) 操作来对客户端设备进行身份验证和授权。例如,您可以在自定义 MQTT 代理组件中使用这些操作。有关更多信息,请参阅 IPC:对客户端设备进行身份验证和授权

  • 添加maxActiveAuthTokenscloudQueueSize、和threadPoolSize选项,您可以配置这些选项来调整此组件的性能。

2.1.0

新功能
  • 添加了一个serverCertificateValiditySeconds选项,您可以将其配置为在 MQTT 代理服务器证书到期时进行自定义。您可以将服务器证书配置为在 2 到 10 天后过期。

错误修复和改进
  • 修复了此组件如何处理配置重置更新的问题。

  • 修复了在某些情况下,本地 MQTT 服务器证书的轮换频率超出预期频率的问题。

    要应用此修复程序,还必须使用 M oquette MQTT 代理组件的 v2.1.0 或更高版本。

  • 改进了此组件在轮换证书时记录的消息。

  • 版本已更新 Greengrass Nucreation 版本 2.6.0。

2.0.4

版本已更新 Greengrass Nucreation 版本 2.5.0。

2.0.3

错误修复和改进
  • 现在,如果您轮换核心设备的私钥,则证书会刷新。

  • 更新使日志消息更加清晰。

2.0.2

版本已更新 Greengrass ights 版本 2.4.0。

2.0.1

版本已更新 Greengrass Nucreation 版本 2.3.0。

2.0.0

初始版本。