本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
直接消息策略示例
使用直接消息需要特定的政策。直接消息使用 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": "*" } } } ] }