设备端衡量指标 - AWS IoT Core

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

设备端衡量指标

创建安全配置文件时,您可以通过配置 IoT 设备生成的指标的行为和阈值来指定 IoT 设备的预期行为。以下是设备端指标,这些指标是来自您在设备上安装的代理的指标。

出口字节数 (输出aws:all-bytes-out

给定时间段内从设备发出的出站字节数量。

使用此指标指定给定时间段内设备应该发送的最大或最小出站流量(以字节为单位)。

兼容:规则检测 | ML 检测

运算符:less-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than

值:非负整数

单位:字节

持续时间:非负整数。有效值为 300、600、900、1800 或 3600 秒。

{ "name": "TCP outbound traffic", "metric": "aws:all-bytes-out", "criteria": { "comparisonOperator": "less-than-equal", "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-equal", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 900, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

例 使用 ML 检测的示例

{ "name": "Outbound traffic ML behavior", "metric": "aws:all-bytes-out", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

在中的字节aws:all-bytes-in

给定时间段内发往设备的入站字节数量。

使用此指标指定给定时间段内设备应该接收的最大或最小入站流量(以字节为单位)。

兼容:规则检测 | ML 检测

运算符:less-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than

值:非负整数

单位:字节

持续时间:非负整数。有效值为 300、600、900、1800 或 3600 秒。

{ "name": "TCP inbound traffic", "metric": "aws:all-bytes-in", "criteria": { "comparisonOperator": "less-than-equal", "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-equal", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

例 使用 ML 检测的示例

{ "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 端口数量。

兼容:规则检测 | ML 检测

单位:失败次数

运算符:less-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than

值:非负整数

单位:失败次数

持续时间:非负整数。有效值为 300、600、900、1800 或 3600 秒。

{ "name": "Max TCP Ports", "metric": "aws:num-listening-tcp-ports", "criteria": { "comparisonOperator": "less-than-equal", "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-equal", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

例 使用 ML 检测的示例

{ "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 端口数量。

兼容:规则检测 | ML 检测

单位:失败次数

运算符:less-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than

值:非负整数

单位:失败次数

持续时间:非负整数。有效值为 300、600、900、1800 或 3600 秒。

{ "name": "Max UDP Ports", "metric": "aws:num-listening-udp-ports", "criteria": { "comparisonOperator": "less-than-equal", "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-equal", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

例 使用 ML 检测的示例

{ "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

给定时间段内从设备发出的出站数据包数量。

使用此指标指定给定时间段内设备应该发送的最大或最小出站总流量。

兼容:规则检测 | ML 检测

运算符:less-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than

值:非负整数

单位:数据包

持续时间:非负整数。有效值为 300、600、900、1800 或 3600 秒。

{ "name": "TCP outbound traffic", "metric": "aws:all-packets-out", "criteria": { "comparisonOperator": "less-than-equal", "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-equal", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

例 使用 ML 检测的示例

{ "name": "Outbound sent ML behavior", "metric": "aws:all-packets-out", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

中的数据包数aws:all-packets-in

给定时间段内发往设备的入站数据包数量。

使用此指标指定给定时间段内设备应该接收的最大或最小入站总流量。

兼容:规则检测 | ML 检测

运算符:less-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than

值:非负整数

单位:数据包

持续时间:非负整数。有效值为 300、600、900、1800 或 3600 秒。

{ "name": "TCP inbound traffic", "metric": "aws:all-packets-in", "criteria": { "comparisonOperator": "less-than-equal", "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-equal", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

例 使用 ML 检测的示例

{ "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 地址。

使用此指标指定一组允许(以前称为列入白名单)或拒绝(以前称为列入黑名单)的无类域间路由 (CIDR),每个设备必须或不得通过它们连接到。AWS IoT。

兼容:检测规则

运算符:in-cidr-set | not-in-cidr-set

值:CIDR 列表

单位:n/a

{ "name": "Denied source IPs", "metric": "aws:source-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 端口,每个设备必须或不得通过它们进行侦听。

兼容:检测规则

运算符:in-port-set | not-in-port-set

值:端口列表

单位:n/a

{ "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 端口,每个设备必须或不得通过它们进行侦听。

兼容:检测规则

运算符:in-port-set | not-in-port-set

值:端口列表

单位:n/a

{ "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 状态)。

兼容:规则检测 | ML 检测

运算符:less-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than-than

值:非负整数

单位:连接

{ "name": "TCP Connection Count", "metric": "aws:num-established-tcp-connections", "criteria": { "comparisonOperator": "less-than-equal", "value": { "count": 3 }, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

例 使用 statisticalThreshold 的示例

{ "name": "TCP Connection Count", "metric": "aws:num-established-tcp-connections", "criteria": { "comparisonOperator": "less-than-equal", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 900, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1 }, "suppressAlerts": true }

例 使用 ML 检测的示例

{ "name": "Connection count ML behavior", "metric": "aws:num-established-tcp-connections", "criteria": { "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 1, "mlDetectionConfig": { "confidenceLevel": "HIGH" } }, "suppressAlerts": true }

设备指标文档规范

整体结构

长名称

短名称

必需

类型

约束

备注

header

hed

对象

格式正确的报告所必需的完整数据块。

metrics

met

对象

报表可以同时包含一个或至少一个metrics或者custom_metrics块。

自定义指标

Cmet

对象

报表可以同时包含一个或至少一个metrics或者custom_metrics块。

标头数据块

长名称

短名称

必需

类型

约束

备注

report_id

rid

整数

单调递增值。推荐采用纪元时间戳。

版本

v

字符串

Major.Minor

添加字段时为次要增量。如果指标移除,则为主要增量。

指标数据块:

TCP 连接

长名称

短名称

父元素

必需

类型

约束

备注

tcp_connections

tc

metrics

对象

established_connections

ec

tcp_connections

List<Connection>

已建立 TCP 状态

connections

cs

established_connections

List<Object>

remote_addr

rad

connections

数字

ip:port

IP 可能是 IPv6 或 IPv4

local_port

lp

connections

数字

>= 0

local_interface

li

connections

字符串

接口名称

total

t

established_connections

数字

>= 0

已建立的连接数

侦听 TCP 端口

长名称

短名称

父元素

必需

类型

约束

备注

listening_tcp_ports

tp

metrics

对象

ports

pts

listening_tcp_ports

List<Port>

> 0

port

pt

ports

数字

> 0

端口应该是大于 0 的数字

interface

if

ports

字符串

接口名称

total

t

listening_tcp_ports

数字

>= 0

侦听 UDP 端口

长名称

短名称

父元素

必需

类型

约束

备注

listening_udp_ports

up

metrics

对象

ports

pts

listening_udp_ports

List<Port>

> 0

port

pt

ports

数字

> 0

端口应该是大于 0 的数字

interface

if

ports

字符串

接口名称

total

t

listening_udp_ports

数字

>= 0

网络统计数据

长名称

短名称

父元素

必需

类型

约束

备注

network_stats

ns

metrics

对象

bytes_in

bi

network_stats

数字

Delta Metric, >= 0

bytes_out

bo

network_stats

数字

Delta Metric, >= 0

packets_in

pi

network_stats

数字

Delta Metric, >= 0

packets_out

po

network_stats

数字

Delta Metric, >= 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连接的设备或设备网关,以收集设备端指标。AWS IoT Device Defender提供示例代理,以便在您创建自己的代理时作为示例使用。如果您无法提供设备指标,仍可以基于云端指标获得有限的功能。查看 SDK 的完整列表此处

配置设备以发布指标的方法有两种:AWS IoT设备客户端和AWS IoT Device Defender示例代理。通常,您应使用AWS IoT设备客户端,因为它提供了单个代理,它涵盖了AWS IoT Device Defender和AWS IoT设备管理。这些功能包括作业, 安全隧道,AWS IoT Device Defender指标发布等。如果您为设备定义要监控的自定义指标,则应使用AWS IoT Device Defender示例代理来发送数据。

使用AWS IoT要发布指标的设备客户端

安装AWS IoTDefice Client (设备客户端),您可以从Github。在安装AWS IoT要为其收集设备端数据的设备上的设备客户端,必须将其配置为将设备端指标发送到AWS IoT Device Defender。验证AWS IoT设备客户端配置文件具有以下参数设置在device-defender部分:

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

至少应将时间间隔设置为 300 秒。如果将时间间隔设置为小于 300 秒的时间间隔,则可能会限制您的指标数据。

更新配置后,您可以在AWS IoT Device Defender控制台来监控设备发布到云的指标。您可以在 AWS IoT Core 控制台,方法是依次选择防御、检测和指标。

使用AWS IoT要发布指标的设备后卫示例代理

您可以将AWS IoT Device Defender示例代理来监视设备端指标,自定义指标fromAWS IoT设备。

C 中当前提供有设备指标报告代理示例,网址为:https://github.com/aws-samples/aws-iot-device-defender-agent-c。GitHub 上的 Python 中也有设备指标报告代理示例,网址为: https://github.com/aws-samples/aws-iot-device-defender-agent-sdk-python。自定义指标仅由 Python 示例代理支持。具体请参阅greengrass_defender_agent.py文件中使用的样本代理AWS IoT Greengrass设备。

要使用代理示例或创建自己的自定义代理,必须安装 AWS IoT 设备开发工具包。要查找适用于您的开发语言的资源,请参阅 AWS IoT Core 资源

  • 所有代理必须创建与 AWS IoT 的连接,并将指标发布到以下预留的 AWS IoT Device Defender MQTT 主题之一:

    $aws/things/THING_NAME/defender/metrics/json

    $aws/things/THING_NAME/defender/metrics/cbor

    AWS IoT Device Defender 将使用下列主题之一回复指标报告的接收状态:

    $aws/things/THING_NAME/defender/metrics/json/accepted
    $aws/things/THING_NAME/defender/metrics/cbor/accepted
    $aws/things/THING_NAME/defender/metrics/json/rejected
    $aws/things/THING_NAME/defender/metrics/cbor/rejected
  • 要报告指标,设备必须在 AWS IoT 中注册为事物。

  • 一般来讲,设备应该每 5 分钟发送一次指标报告。设备会受到限制,因此无法在每 5 分钟内生成多个指标报告。

  • 设备必须报告当前指标。不支持历史指标报告。

  • 您可以选择使用Jobs更改频率AWS IoT Device Defender发送指标。AWS IoT Device Defender 代理 C 样本中包含一个示例。有关更多信息,请参阅 README.md