

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 直接傳訊政策範例
<a name="direct-messaging-policy-examples"></a>

使用直接傳訊需要特定政策。直接傳訊使用 SendDirectMessage HTTP API，將訊息從寄件者傳遞到由 MQTT 用戶端 ID 識別的單一接收者。本節提供允許使用直接傳訊的常見政策範例。

**Topics**
+ [在特定主題上傳送直接訊息給特定用戶端的政策](#dm-policy-send-specific)
+ [接收直接訊息的政策](#dm-policy-receive)
+ [將直接訊息傳送至特定主題上任何用戶端的政策](#dm-policy-send-any-client)
+ [將直接訊息傳送至任何主題上任何用戶端的政策](#dm-policy-send-any-client-any-topic)

## 在特定主題上傳送直接訊息給特定用戶端的政策
<a name="dm-policy-send-specific"></a>

若要讓寄件者傳送直接訊息，寄件者必須具有目標用戶端 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"]
                }
            }
        }
    ]
}
```

## 接收直接訊息的政策
<a name="dm-policy-receive"></a>

接收者的政策必須授予 主題`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 連線，才能接收直接訊息。離線裝置的直接訊息不會排入佇列。

## 將直接訊息傳送至特定主題上任何用戶端的政策
<a name="dm-policy-send-any-client"></a>

下列政策允許寄件者將直接訊息傳送至任何用戶端，但僅限於符合`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`條件運算子進行萬用字元比對。

## 將直接訊息傳送至任何主題上任何用戶端的政策
<a name="dm-policy-send-any-client-any-topic"></a>

下列政策允許寄件者將直接訊息傳送至任何主題的任何用戶端。這適用於後端服務需要不受限制存取的管理或機群管理使用案例。

```
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iot:SendDirectMessage",
            "Resource": "arn:aws:iot:us-west-2:123456789012:client/*",
            "Condition": {
                "StringLike": {
                    "iot:Topic": "*"
                }
            }
        }
    ]
}
```