

# AWS IoT Device Defender 疑難排解指南
<a name="device-defender-troubleshoot"></a>

**協助我們改善此主題**  
 [讓我們知道如何能使其變得更好](https://docs.aws.amazon.com//forms/aws-doc-feedback?hidden_service_name=IoT%20Docs&topic_url=http://docs.aws.amazon.com/en_us/iot/latest/developerguide/device-defender-troubleshoot.html) 一般

問：使用 AWS IoT Device Defender 有無任何事前準備？   
答：如果您想要使用裝置報告的指標，則必須先在 AWS IoT 連網裝置或裝置閘道上部署代理程式。裝置必須提供一致的用戶端識別符或物件名稱。稽核

問：我已啟用檢查，我的稽核顯示「進行中」一段時間了。有問題嗎？ 何時能得到結果？   
答：啟用檢查後，就立即開始收集資料。不過，如果您的帳戶中有大量資料需要收集 (例如憑證、物件、政策)，則在您啟用檢查後，該檢查結果可能會有一段時間無法使用。偵測

問：如何知道要在 AWS IoT Device Defender 安全性描述檔行為中設定哪些閾值？   
答：首先以低閾值建立安全性描述檔行為，並將它連接到包含一組代表性裝置的物件群組。您可以使用 AWS IoT Device Defender 來檢視目前的指標，然後微調裝置行為閾值，以符合您的使用案例。

問：我建立行為，但未如預期觸發違規。應如何修正這個問題？   
答：當您定義行為時，您會指定您希望裝置正常運作的方式。例如，如果您有一個安全相機僅連接到 TCP 連接埠 8888 的一個中央伺服器，您未預期其他任何連線。若要相機在其他連接埠連線時獲得提醒，您可以定義的行為如下：  

```
{
  "name": "Listening TCP Ports",
  "metric": "aws:listening-tcp-ports",
  "criteria": {
    "comparisonOperator": "in-port-set",
    "value": {
      "ports": [ 8888 ]
    }
  }
}
```
如果相機在 TCP 連接埠 443 進行 TCP 連線，則裝置行為會違規並且觸發提醒。

問：我的一或多個行為違規。如何清除違規？   
答：如行為描述檔所定義，警示會在裝置回到預期的行為後清除。在收到您裝置的指標資料時，會進行行為描述檔的評估。如果裝置未發佈任何指標超過兩天，系統會自動將違規事件設定為 `alarm-invalidated`。

問：我已刪除違規的行為，但是要如何停止提醒？   
答：刪除行為會停止所有該行為未來的違規和提醒。事前提醒必須從您的通知機制排除。當您刪除行為時，該行為的違規記錄保留在您帳戶中的時間週期如同所有其他違規。裝置指標

問：我提交指標報告，我知道違反我的行為但未觸發違規。怎麼回事？   
答：透過訂閱以下 MQTT 主題確認是否正在受理您的指標報告：  

```
$aws/things/THING_NAME/defender/metrics/FORMAT/rejected
$aws/things/THING_NAME/defender/metrics/FORMAT/accepted
```
`THING_NAME` 是報告指標的物件名稱，`FORMAT` 為 "JSON" 或 "CBOR"，取決於物件所提交的指標報告格式。  
在訂閱息之後，您應該針對每個提交的指標報告收到這些主題的訊息。`rejected` 訊息表示剖析指標報告時發生問題。錯誤訊息會包含在訊息承載內，以協助您修正指標報告中的任何錯誤。`accepted` 訊息，指示指標報告已正確剖析。

問：如果我在指標報告中傳送空的指標會怎麼樣？  
答：空的連接埠或 IP 地址清單一律視為符合對應的行為。如果對應的行為是違規，則會清除違規。

問：為何我的裝置指標報告包含不在 AWS IoT 登錄檔中的裝置訊息？  
如果您有一或多個安全性描述檔附加到所有物件或所有未註冊的物件，則 AWS IoT Device Defender 包含來自未註冊物件的指標。如果您想要排除來自未註冊物件的指標，您可以將描述檔附加到所有已註冊的裝置，而不是所有裝置。

問：即使我將安全性描述檔套用到所有未註冊的裝置或所有裝置，還是沒看到來自一或多個未註冊裝置的訊息。可以如何修正這個問題？  
請確認您傳送的是格式正確的指標報告，且使用其中一個支援的格式。如需相關資訊，請參閱[裝置指標文件規格](detect-device-side-metrics.md#DetectMetricsMessagesSpec)。確認未註冊的裝置使用一致的用戶端識別符或物件名稱。如果物件名稱包含控制字元，或超過 128 個位元組的 UTF-8 編碼字元，則會拒絕裝置所回報的訊息。

問：如果未註冊的裝置新增到登錄檔，或已註冊的裝置變成未註冊，會發生什麼狀況？  
答：如果在登錄檔中新增或移除裝置：  
+ 如果持續發佈違規指標，您會看到裝置有兩項不同的違規 (一項針對其已註冊的物件名稱，一項針對其未註冊的身分)。舊身分的有效違規會在兩天後停止出現，但會出現在違規歷史記錄中長達 14 天。

問：我應該在我的裝置指標報告的報告 ID 欄位中提供哪個值？   
答：使用每個指標報告的唯一值，以正整數表示。常見的做法是使用 [Unix epoch 時間戳記](https://en.wikipedia.org/wiki/Unix_time)。

問：我應該為 AWS IoT Device Defender 指標建立專用的 MQTT 連線嗎？   
答：通常不需要獨立的 MQTT 連線。

問：連接時我應該使用哪個用戶端 ID 來發佈裝置指標？   
對於 AWS IoT 登錄檔中的裝置 (物件)，請使用已註冊的物件名稱。對於不在 AWS IoT 登錄檔中的裝置，請在連接到 AWS IoT 時使用一致的識別符。此做法有助於比對違規與物件名稱。

問：是否可以發佈具不同用戶端 ID 的裝置指標？   
您可以代表其他物件發佈指標。只要將指標發佈到該裝置的 AWS IoT Device Defender 預留主題，即可完成。例如，`Thing-1` 會自行發佈指標，也可代表 `Thing-2`。`Thing-1` 收集自己的指標，並且在 MQTT 主題上發佈這些指標：  

```
$aws/things/Thing-1/defender/metrics/json
```
`Thing-1` 會接著從 `Thing-2` 取得指標，並且在 MQTT 主題上發佈這些指標：  

```
$aws/things/Thing-2/defender/metrics/json
```

問：我在我的帳戶中可以擁有多少個安全性描述檔和行為？   
答：請參閱 [AWS IoT Device Defender 端點和配額](https://docs.aws.amazon.com/general/latest/gr/iot_device_defender.html)。

問：適用於提醒目標的原型目標角色是什麼樣子？   
答：可讓 AWS IoT Device Defender 對提醒目標 (SNS 主題) 發佈提醒的角色需要 2 項條件：  
+ 可將 iot.amazonaws.com 指定為信任實體的信任關係。
+ 附加的政策，授予 AWS IoT 在指定的 SNS 主題上發佈的許可。例如：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": "sns:Publish",
              "Resource": "arn:aws:sns:us-east-1:123456789012:example-topic"
          }
      ]
  }
  ```

------
+ 若用於發佈警示的 SNS 主題是個加密主題，則除了發佈至 SNS 主題的許可外，AWS IoT 必須再授與兩個許可。例如：

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "sns:Publish",
                 "kms:Decrypt",
                 "kms:GenerateDataKey"
             ],
             "Resource": "arn:aws:sns:us-east-1:123456789012:example-topic"
         }
      ]
  }
  ```

------

問：我使用自訂指標類型 `number` 提交的指標報告失敗並顯示錯誤訊息 `Malformed metrics report`。怎麼回事？   
答：類型 `number` 僅將單個指標數值作為輸入，但是在 DeviceMetrics 報告中提交指標數值時，必須以具有單一數值的陣列形式傳遞。請確認您將指標值以陣列形式提交。  
錯誤承載：  

```
{"header":{"report_id":12334567,"version":"1.0"},"metrics":{"network_stats":{"bytes_in":30680,"bytes_out":10652,"packets_in":113,"packets_out":118}},"custom_metrics":{"my_custom_metric":{"number":0}}}
```
錯誤訊息：  

```
{"thingName":"myThing","status":"REJECTED","statusDetails":{"ErrorCode":"InvalidPayload","ErrorMessage":"Malformed metrics report"},"timestamp":1635802047699}
```
無錯誤承載：  

```
{"header":{"report_id":12334567,"version":"1.0"},"metrics":{"network_stats":{"bytes_in":30680,"bytes_out":10652,"packets_in":113,"packets_out":118}},"custom_metrics":{"my_custom_metric":[{"number":0}]}}
```
回應：  

```
{"thingName":"myThing","12334567":1635800375,"status":"ACCEPTED","timestamp":1635801636023}
```