デバイス側のメトリクス - AWS IoT Device Defender

デバイス側のメトリクス

セキュリティプロファイルを作成するときに、IoT デバイスによって生成されるメトリクスの動作としきい値を設定することで、IoT デバイスの想定される動作を指定できます。以下は、デバイス側のメトリクスです。これは、デバイスにインストールしたエージェントから取得したメトリクスです。

出力バイト数 (aws:all-bytes-out)

一定期間内におけるデバイスからのアウトバウンドバイト数。

一定期間内にデバイスが送信する必要があるアウトバウンドトラフィックの最大量と最小量 (バイト単位で測定) を指定するには、このメトリクスを使用します。

次と互換性あり: Rules Detect | ML Detect

演算子: less-than | less-than-equals | greater-than | greater-than-equals

値: 負でない整数

単位: バイト

期間: 負でない整数 有効な値は、300、600、900、1800、3600 秒です。

{ "name": "TCP outbound traffic", "metric": "aws:all-bytes-out", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 4096 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
statisticalThreshold を使用した例
{ "name": "TCP outbound traffic", "metric": "aws:all-bytes-out", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 900, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
例 ML Detect を使用した例
{ "name": "Outbound traffic ML behavior", "metric": "aws:all-bytes-out", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

入力バイト数 (aws:all-bytes-in)

一定期間内におけるデバイスへのインバウンドバイト数。

一定期間内にデバイスが受信する必要があるインバウンドトラフィックの最大量と最小量 (バイト単位で測定) を指定するには、このメトリクスを使用します。

次と互換性あり: Rules Detect | ML Detect

演算子: less-than | less-than-equals | greater-than | greater-than-equals

値: 負でない整数

単位: バイト

期間: 負でない整数 有効な値は、300、600、900、1800、3600 秒です。

{ "name": "TCP inbound traffic", "metric": "aws:all-bytes-in", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 4096 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
statisticalThreshold を使用した例
{ "name": "TCP inbound traffic", "metric": "aws:all-bytes-in", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
例 ML Detect を使用した例
{ "name": "Inbound traffic ML behavior", "metric": "aws:all-bytes-in", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

リスニング TCP ポート数 (aws:num-listening-tcp-ports)

デバイスがリッスンしている TCP ポートの数。

各デバイスが監視する必要がある TCP ポートの最大数を指定するには、このメトリクスを使用します。

次と互換性あり: Rules Detect | ML Detect

単位: エラー

演算子: less-than | less-than-equals | greater-than | greater-than-equals

値: 負でない整数

単位: エラー

期間: 負でない整数 有効な値は、300、600、900、1800、3600 秒です。

{ "name": "Max TCP Ports", "metric": "aws:num-listening-tcp-ports", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 5 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
statisticalThreshold を使用した例
{ "name": "Max TCP Ports", "metric": "aws:num-listening-tcp-ports", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
例 ML Detect を使用した例
{ "name": "Max TCP Port ML behavior", "metric": "aws:num-listening-tcp-ports", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

リスニング UDP ポート数 (aws:num-listening-udp-ports)

デバイスがリッスンしている UDP ポートの数。

各デバイスが監視する必要がある UDP ポートの最大数を指定するには、このメトリクスを使用します。

次と互換性あり: Rules Detect | ML Detect

単位: エラー

演算子: less-than | less-than-equals | greater-than | greater-than-equals

値: 負でない整数

単位: エラー

期間: 負でない整数 有効な値は、300、600、900、1800、3600 秒です。

{ "name": "Max UDP Ports", "metric": "aws:num-listening-udp-ports", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 5 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
statisticalThreshold を使用した例
{ "name": "Max UDP Ports", "metric": "aws:num-listening-udp-ports", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
例 ML Detect を使用した例
{ "name": "Max UPD Port ML behavior", "metric": "aws:num-listening-tcp-ports", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

出力パケット (aws:all-packets-out)

一定期間内におけるデバイスからのアウトバウンドパケット数。

一定期間内にデバイスが送信する必要がある合計アウトバウンドトラフィックの最大量と最小量を指定するには、このメトリクスを使用します。

次と互換性あり: Rules Detect | ML Detect

演算子: less-than | less-than-equals | greater-than | greater-than-equals

値: 負でない整数

単位: パケット

期間: 負でない整数 有効な値は、300、600、900、1800、3600 秒です。

{ "name": "TCP outbound traffic", "metric": "aws:all-packets-out", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 100 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
statisticalThreshold を使用した例
{ "name": "TCP outbound traffic", "metric": "aws:all-packets-out", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
例 ML Detect を使用した例
{ "name": "Outbound sent ML behavior", "metric": "aws:all-packets-out", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

入力パケット (aws:all-packets-in)

一定期間内におけるデバイスへのインバウンドパケット数。

一定期間内にデバイスが受信する必要がある合計インバウンドトラフィックの最大量と最小量を指定するには、このメトリクスを使用します。

次と互換性あり: Rule Detect | ML Detect

演算子: less-than | less-than-equals | greater-than | greater-than-equals

値: 負でない整数

単位: パケット

期間: 負でない整数 有効な値は、300、600、900、1800、3600 秒です。

{ "name": "TCP inbound traffic", "metric": "aws:all-packets-in", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 100 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

statisticalThreshold を使用した例

{ "name": "TCP inbound traffic", "metric": "aws:all-packets-in", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
例 ML Detect を使用した例
{ "name": "Inbound sent ML behavior", "metric": "aws:all-packets-in", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

送信先 IP (aws:destination-ip-addresses)

IP 送信先のセット。

各デバイスが AWS IoT に接続する必要がある、または接続してはならない、許可された Classless Inter-Domain Routings (CIDR) のセット (以前はホワイトリストに登録されたとしていた) または拒否された CIDR のセット (以前はブラックリストに登録されたとしていた) を指定するには、このメトリクスを使用します。

次と互換性あり: Rules Detect

演算子: in-cidr-set | not-in-cidr-set

値: CIDR のリスト

単位: 該当なし

{ "name": "Denied source IPs", "metric": "aws:destination-ip-address", "criteria": { "comparisonOperator": "not-in-cidr-set", "value": { "cidrs": [ "12.8.0.0/16", "15.102.16.0/24" ] } }, "suppressAlerts": true }

リッスンする TCP ポート (aws:listening-tcp-ports)

デバイスがリッスンしている TCP ポート。

各デバイスが接続する必要がある、または接続してはならない、許可された TCP ポートのセット (以前はホワイトリストに登録されたとしていた) または拒否された TCP ポートのセット (以前はブラックリストに登録されたとしていた) を指定するには、このメトリクスを使用します。

次と互換性あり: Rules Detect

演算子: in-port-set | not-in-port-set

値: ポートのリスト

単位: 該当なし

{ "name": "Listening TCP Ports", "metric": "aws:listening-tcp-ports", "criteria": { "comparisonOperator": "in-port-set", "value": { "ports": [ 443, 80 ] } }, "suppressAlerts": true }

リッスンする UDP ポート (aws:listening-udp-ports)

デバイスがリッスンしている UDP ポート。

各デバイスが接続する必要がある、または接続してはならない、許可された UDP ポートのセット (以前はホワイトリストに登録されたとしていた) または拒否された UDP ポートのセット (以前はブラックリストに登録されたとしていた) を指定するには、このメトリクスを使用します。

次と互換性あり: Rules Detect

演算子: in-port-set | not-in-port-set

値: ポートのリスト

単位: 該当なし

{ "name": "Listening UDP Ports", "metric": "aws:listening-udp-ports", "criteria": { "comparisonOperator": "in-port-set", "value": { "ports": [ 1025, 2000 ] } } }

確立された TCP 接続数 (aws:num-established-tcp-connections)

デバイスの TCP 接続の数。

各デバイスが必要とするアクティブな TCP 接続の最大値または最小数を指定するには、このメトリクスを使用します (すべての TCP 状態)。

次と互換性あり: Rules Detect | ML Detect

演算子: less-than | less-than-equals | greater-than | greater-than-equals

値: 負でない整数

単位: 接続

{ "name": "TCP Connection Count", "metric": "aws:num-established-tcp-connections", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 3 }, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
statisticalThreshold を使用した例
{ "name": "TCP Connection Count", "metric": "aws:num-established-tcp-connections", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 900, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }
例 ML Detect を使用した例
{ "name": "Connection count ML behavior", "metric": "aws:num-established-tcp-connections", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

デバイスメトリクスドキュメントの仕様

全体構造

長い名前

短縮名

必須

タイプ

制約

コメント

ヘッダー

hed

Y

オブジェクト

正しい形式のレポートに必要なブロックを完成させます。

メトリクス

met

Y

オブジェクト

レポートは、metricscustom_metrics ブロックの両方または少なくともいずれか 1 つを持つことができます。

custom_metrics

cmet

Y

オブジェクト

レポートは、metricscustom_metrics ブロックの両方または少なくともいずれか 1 つを持つことができます。

ヘッダーブロック

長い名前

短縮名

必須

タイプ

制約

コメント

report_id

rid

Y

整数

一定間隔で増加する値。エポックタイムスタンプが推奨されています。

バージョン

v

Y

文字列

Major.Minor

フィールドの追加があるマイナー増分。メトリクスが削除された場合はメジャー増分。

メトリクスブロック:

TCP 接続

長い名前

短縮名

親要素

必須

タイプ

制約

コメント

tcp_connections

tc

メトリクス

N

オブジェクト

established_connections

ec

tcp_connections

N

オブジェクト

確立された TCP 状態

接続

cs

established_connections

N

List<Object>

remote_addr

rad

接続

Y

数値

ip:port

IP は IPv6 または IPv4

local_port

lp

接続

N

数値

>= 0

local_interface

li

接続

N

文字列

インターフェイス名

total

t

established_connections

N

数値

>= 0

確立した接続の数

リッスンする TCP ポート

長い名前

短縮名

親要素

必須

タイプ

制約

コメント

listening_tcp_ports

tp

メトリクス

N

オブジェクト

ports

pts

listening_tcp_ports

N

List<Object>

> 0

port

pt

ports

N

数値

> 0

ポートは 0 より大きい数値にする必要があります

インターフェイスからリクエスト

if

ports

N

文字列

インターフェイス名

total

t

listening_tcp_ports

N

数値

>= 0

リッスンする UDP ポート

長い名前

短縮名

親要素

必須

タイプ

制約

コメント

listening_udp_ports

up

メトリクス

N

オブジェクト

ports

pts

listening_udp_ports

N

List<Port>

> 0

port

pt

ports

N

数値

> 0

ポートは 0 より大きい数値にする必要があります

インターフェイスからリクエスト

if

ports

N

文字列

インターフェイス名

total

t

listening_udp_ports

N

数値

>= 0

ネットワーク統計

長い名前

短縮名

親要素

必須

タイプ

制約

コメント

network_stats

ns

メトリクス

N

オブジェクト

bytes_in

bi

network_stats

N

数値

デルタメトリクス、>= 0

bytes_out

bo

network_stats

N

数値

デルタメトリクス、>= 0

packets_in

pi

network_stats

N

数値

デルタメトリクス、>= 0

packets_out

po

network_stats

N

数値

デルタメトリクス、>= 0

次の JSON 構造では、長い名前を使用します。

{ "header": { "report_id": 1530304554, "version": "1.0" }, "metrics": { "listening_tcp_ports": { "ports": [ { "interface": "eth0", "port": 24800 }, { "interface": "eth0", "port": 22 }, { "interface": "eth0", "port": 53 } ], "total": 3 }, "listening_udp_ports": { "ports": [ { "interface": "eth0", "port": 5353 }, { "interface": "eth0", "port": 67 } ], "total": 2 }, "network_stats": { "bytes_in": 29358693495, "bytes_out": 26485035, "packets_in": 10013573555, "packets_out": 11382615 }, "tcp_connections": { "established_connections": { "connections": [ { "local_interface": "eth0", "local_port": 80, "remote_addr": "192.168.0.1:8000" }, { "local_interface": "eth0", "local_port": 80, "remote_addr": "192.168.0.1:8000" } ], "total": 2 } } }, "custom_metrics": { "MyMetricOfType_Number": [ { "number": 1 } ], "MyMetricOfType_NumberList": [ { "number_list": [ 1, 2, 3 ] } ], "MyMetricOfType_StringList": [ { "string_list": [ "value_1", "value_2" ] } ], "MyMetricOfType_IpList": [ { "ip_list": [ "172.0.0.0", "172.0.0.10" ] } ] } }
例 短い名前を使用したサンプル JSON 構造
{ "hed": { "rid": 1530305228, "v": "1.0" }, "met": { "tp": { "pts": [ { "if": "eth0", "pt": 24800 }, { "if": "eth0", "pt": 22 }, { "if": "eth0", "pt": 53 } ], "t": 3 }, "up": { "pts": [ { "if": "eth0", "pt": 5353 }, { "if": "eth0", "pt": 67 } ], "t": 2 }, "ns": { "bi": 29359307173, "bo": 26490711, "pi": 10014614051, "po": 11387620 }, "tc": { "ec": { "cs": [ { "li": "eth0", "lp": 80, "rad": "192.168.0.1:8000" }, { "li": "eth0", "lp": 80, "rad": "192.168.0.1:8000" } ], "t": 2 } } }, "cmet": { "MyMetricOfType_Number": [ { "number": 1 } ], "MyMetricOfType_NumberList": [ { "number_list": [ 1, 2, 3 ] } ], "MyMetricOfType_StringList": [ { "string_list": [ "value_1", "value_2" ] } ], "MyMetricOfType_IpList": [ { "ip_list": [ "172.0.0.0", "172.0.0.10" ] } ] } }

デバイスからのメトリクスの送信

AWS IoT Device Defender Detect は、AWS IoT デバイスによって生成されたメトリクスデータを収集、集計、監視し、異常な動作をしているデバイスを特定できます。このセクションでは、デバイスから AWS IoT Device Defender にメトリクスを送信する方法について説明します。

デバイス側のメトリクスを収集するには、AWS IoT コネクテッドデバイスまたはデバイスゲートウェイに AWS IoT SDK バージョン 2 を安全な方法でデプロイする必要があります。SDK の完全なリストはこちらをご覧ください。

AWS IoT Device Client は、AWS IoT Device Defender と AWS IoT Device Management の両方に存在する機能をカバーする単一のエージェントを提供することから、メトリクスの発行に使用できます。これらの機能には、ジョブ、セキュアトンネリング、AWS IoT Device Defender メトリクスの発行などがあります。

AWS IoT Device Defender が収集および評価するために、デバイス側のメトリックを AWS IoT の予約済みトピックに公開します。

AWS IoT デバイスクライアントを使用したメトリクスの発行

AWS IoT Device Client をインストールするには、Github からダウンロードできます。デバイス側のデータを収集するデバイスに AWS IoT Device Client をインストールしたら、デバイス側のメトリクスを AWS IoT Device Defender に送信するように設定する必要があります。AWS IoT Device Client 設定ファイルdevice-defender セクションで次のパラメータが設定されていることを確認します。

"device-defender": { "enabled": true, "interval-in-seconds": 300 }
警告

少なくとも、時間間隔を 300 秒に設定する必要があります。時間間隔を 300 秒未満に設定すると、メトリクスデータがスロットリングされることがあります。

設定を更新したら、AWS IoT Device Defender コンソールでセキュリティプロファイルと動作を作成して、デバイスがクラウドに発行するメトリクスをモニタリングできます。AWS IoT Core コンソールで、[Defend] (防御)、[Detect] (検出)、[Metrics] (メトリクス) の順に選択することで、発行されたメトリクスを確認できます。