View a markdown version of this page

直接消息策略示例 - Amazon IoT Core
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

直接消息策略示例

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

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

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

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

  • 对于 X.509-authenticated 物联网设备,请将其添加到 Amazon 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许可—— Amazon IoT Core 无需订阅主题即可直接发送消息。接收者可以使用 X.509 客户端证书(Amazon 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 连接, Amazon 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": "*" } } } ] }