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 标识的单个接收者。本节提供允许常见使用直接消息的策略示例。

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

要使发件人发送直接消息,发件人必须 iot:SendDirectMessage 权限以目标客户端 ID 作为资源。这个 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": "*" } } } ] }