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