View a markdown version of this page

直接消息策略示例 - AWS IoT Core

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

直接消息策略示例

使用直接消息需要特定的政策。直接消息使用 SendDirectMessage HTTP API 将消息从发送者传送到由其 MQTT 客户端 ID 标识的单个接收者。本节提供允许常见使用直接消息的策略示例。

向特定客户发送有关特定主题的直接消息的政策

要使发件人发送直接消息,发件人必须具有将目标客户端 ID 作为资源的iot:SendDirectMessage权限。iot:Topic条件键(可选)限制发件人可以在哪些主题上发送消息。

  • 对于 SigV4-authenticated 后端服务器,将其添加到 IAM 策略中。

  • 对于 X.509-authenticated 物联网设备,请将其添加到 AWS IoT Core 策略中。

  • 对于经过自定义授权者身份验证的客户端,Lambda 函数必须返回使用条件密钥向目标客户端资源授予iot:SendDirectMessage的策略文档 iot:Topic

以下政策允许客户直接device1向客户发送myDevice有关主题commands/reboot和的消息commands/update

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:SendDirectMessage", "Resource": "arn:aws:iot:us-west-2:123456789012:client/myDevice", "Condition": { "StringEquals": { "iot:Topic": ["commands/reboot", "commands/update"] } } } ] }

接收直接消息的政策

收款人的政策必须iot:Receive就该主题给予批准。接收者不需要iot:Subscribe许可—— AWS IoT Core 无需订阅主题即可直接发送消息。接收者可以使用 X.509 客户端证书(AWS IoT Core 策略)或 SigV4(IAM 策略)进行身份验证。在这两种情况下,接收主题都需要iot:Receive权限。

以下策略允许接收者客户端myDevice接收有关主题的直接消息,commands/reboot以及commands/update.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Receive", "Resource": "arn:aws:iot:us-west-2:123456789012:topic/commands/reboot" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "arn:aws:iot:us-west-2:123456789012:topic/commands/update" } ] }

以下策略使用通配符允许接收者接收有关commands/前缀下任何主题的直接消息。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Receive", "Resource": "arn:aws:iot:us-west-2:123456789012:topic/commands/*" } ] }
注意

接收方必须与其建立 MQTT 连接, AWS IoT Core 然后才能接收直接消息。对于离线设备,私信不会排队。

向任何客户发送有关特定主题的直接消息的政策

以下策略允许发件人向任何客户端发送直接消息,但仅限于与commands/*前缀匹配的主题发送消息。这对于需要访问任何设备的舰队管理服务很有用,但仅适用于特定的命令主题。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:SendDirectMessage", "Resource": "arn:aws:iot:us-west-2:123456789012:client/*", "Condition": { "StringLike": { "iot:Topic": "commands/*" } } } ] }
注意

iot:Topic条件键支持使用StringLike条件运算符进行通配符匹配。

向任何客户发送有关任何主题的直接消息的政策

以下策略允许发件人直接向任何客户发送有关任何主题的消息。这适用于后端服务需要不受限制访问的管理或舰队管理用例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:SendDirectMessage", "Resource": "arn:aws:iot:us-west-2:123456789012:client/*", "Condition": { "StringLike": { "iot:Topic": "*" } } } ] }