本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
直接傳訊政策範例
使用直接傳訊需要特定政策。直接傳訊使用 SendDirectMessage HTTP API,將訊息從寄件者傳遞到由 MQTT 用戶端 ID 識別的單一接收者。本節提供允許使用直接傳訊的常見政策範例。
在特定主題上傳送直接訊息給特定用戶端的政策
若要讓寄件者傳送直接訊息,寄件者必須具有目標用戶端 ID 做為資源的iot:SendDirectMessage許可。iot:Topic 條件索引鍵 (選用) 會限制寄件者可以傳送訊息的主題。
-
對於SigV4-authenticated後端伺服器,請將此新增至 IAM 政策。
-
對於 X.509 驗證的 IoT 裝置,將此新增至 AWS IoT Core 政策。
-
對於自訂授權方驗證的用戶端,Lambda 函數必須傳回使用
iot:Topic條件索引鍵在目標用戶端資源iot:SendDirectMessage上授予的政策文件
下列政策允許用戶端device1傳送主題 commands/reboot和 myDevice的直接訊息給用戶端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/*" } ] }
注意
接收者必須先建立 的 AWS IoT Core MQTT 連線,才能接收直接訊息。離線裝置的直接訊息不會排入佇列。
將直接訊息傳送至特定主題上任何用戶端的政策
下列政策允許寄件者將直接訊息傳送至任何用戶端,但僅限於符合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": "*" } } } ] }