AWS IoT
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Detect

借助 AWS IoT Device Defender Detect,您可以监控设备的行为,以识别可能表明设备遭到破坏的异常行为。通过结合使用云端指标(来自 AWS IoT)和设备端指标(来自安装在设备上的代理),您可以检测连接模式中的变化、与未经授权或未识别终端节点通信的设备,以及入站和出站设备流量模式中的变化。您可以创建安全配置文件(其中包含设备预期行为的定义),并将它们分配到队列中的一组设备或所有设备。AWS IoT Device Defender Detect 使用这些安全配置文件来检测异常,并通过 Amazon CloudWatch 指标和 Amazon Simple Notification Service 通知发送提醒。

AWS IoT Device Defender Detect 能够检测互联设备中频繁出现的安全问题:

  • 从设备到已知恶意 IP 地址,或表示潜在恶意命令和控制渠道的未经授权终端节点的流量。

  • 表明设备正在参与 DDoS 攻击的恶意流量,例如出站流量高峰。

  • 其远程管理接口和端口支持远程访问的设备。

  • 发送到您账户的消息速率激增 (例如,来自可能导致过量按每条消息收费的流氓设备)。

使用案例:

评估攻击面

可以使用 AWS IoT Device Defender Detect 评估设备的攻击面。例如,可以识别服务端口通常成为攻击活动目标的设备(在端口 23/2323 上运行的 telnet 服务,在端口 22 上运行的 SSH 服务,在端口 80/443/8080/8081 上运行的 HTTP/S 服务)。虽然在设备上使用这些服务端口可能有合法的原因,但是它们也通常是敌人攻击面的一部分,并且具有相关风险。Detect 向您发出攻击面提醒后,您可以决定将攻击面降至最低(通过消除未使用的网络服务)或运行其他评估来识别安全漏洞(例如,使用常见、默认或弱密码配置的 telnet)。

检测设备行为异常以及可能的安全根本原因

您可以使用 AWS IoT Device Defender Detect 提醒您可能表明安全违规的意外设备行为指标(开放端口数量、连接数量、意外开放端口、与意外 IP 地址的连接)。例如,TCP 连接数量高于预期,可能表明设备正被用于 DDoS 攻击。侦听的端口不是预计的端口,可能表明设备上安装了用以进行远程控制的后门。您可以使用 Detect 探测设备队列的运行状况,并验证安全假设(例如,没有设备在侦听端口 23 或 2323)。

检测配置错误的设备

从设备发送到账户的信息数量或大小激增,可能表明设备配置错误。此类设备可能会增加每条消息的费用。同样,设备多次授权失败,可能会需要重新配置策略。

概念

指标

AWS IoT Device Defender Detect 使用指标来检测异常行为。Detect 将指标的报告值与您提供的预期值进行比较。这些指标可以从两个来源获取:云端指标和设备端指标。

使用云端指标(例如,授权失败次数、设备通过 AWS IoT 发送或接收的消息数量或大小)检测 AWS IoT 网络中的异常行为。

AWS IoT Device Defender Detect 也可以收集、聚合和监控 AWS IoT 设备生成的指标数据(例如,设备侦听的端口、发送的字节或数据包数量,或设备的 TCP 连接)。

可以只将 AWS IoT Device Defender Detect 与云端指标相结合使用。要使用设备端指标,必须首先在连接 AWS IoT 的设备或设备网关上部署 AWS IoT 开发工具包,以收集指标并发送到 AWS IoT。请参阅从设备发送指标

安全配置文件

安全配置文件为账户中的一组设备(事物组)或所有设备定义异常行为,并指定在检测到异常时要执行的操作。可以使用 AWS IoT 控制台或 API 命令创建安全配置文件,并将其与一组设备关联。AWS IoT Device Defender Detect 开始记录安全相关数据,并使用安全配置文件中定义的行为检测设备行为中的异常情况。

行为

行为告诉 AWS IoT Device Defender Detect 如何识别设备是否发生异常。每个行为由名称、指标、运算符、值或统计阈值组成。对于某些指标,时间段 (durationSeconds) 也是必需的。任何设备操作与定义的行为语句不匹配时,均会触发提醒。

提醒

检测到异常时,系统会通过 CloudWatch 指标(请参阅 AWS IoT 指标)或 SNS 通知发送提醒通知。AWS IoT CDM 控制台中也会显示提醒通知,以及提醒的相关信息和设备提醒历史记录。当监控的设备不再表现出异常行为,或者已经触发提醒但在较长时间内停止报告时,系统也会发送提醒。

行为

安全配置文件包含一组行为。每个行为都包含一个指标,用于指定账户中的一组设备或所有设备的正常行为。(请参阅指标 CreateSecurityProfile。)

下面描述了 behavior 定义中使用的一些字段:

name

行为的名称。

metric

所用指标的名称(即行为评估的对象)。

criteria

确定设备与 metric 相关的行为是否正常的标准。

comparisonOperator

将评估的事物 (metric) 与标准(valuestatisticalThreshold)关联在一起的运算符。

可能的值为:“less-than”、“less-than-equals”、“greater-than”、“greater-than-equals”、“in-cidr-set”、“not-in-cidr-set”、“in-port-set”和“not-in-port-set”。并非所有运算符对于每个指标都是有效的。针对 CIDR 集和端口的运算符仅用于与此类实体有关的指标。

value

metric 进行比较的值。根据不同的指标类型,应当包含 count(一个值)、ports(CIDR 列表)或 cidrs(端口列表)。

statisticalThreshold

作为行为违规判断依据的统计阈值。此字段包含一个 statistic 字段,后者具有以下可能的值:“p0”、“p0.1”、“p0.01”、“p1”、“p10”、“p50”、“p90”、“p99”、“p99.9”、“p99.99”或“p100”。

statistic 表示一个百分位数。它解析为用于确定符合行为的值。在指定持续时间 (durationSeconds) 内从与此安全配置文件关联的所有报告设备收集指标一次或多次,并根据该数据计算百分位数。之后,收集设备的测量值并在相同的持续时间内累积。如果设备的结果值高于或低于 (comparisonOperator) 与指定百分位数关联的值,则认为设备符合行为。否则,认为设备违反了行为。

百分位数表示所有考虑的测量值中低于相关值的百分比。例如,如果与“p90”(第 90 个百分位数)相关的值是 123,则 90% 的测量值都低于 123。

durationSeconds

使用此参数为具有时间维度的条件(例如,NUM_MESSAGES_SENT)指定评估行为的时间段。对于 statisticalThreshhold 指标比较,这是一个时间段,期间将收集所有设备的测量值以确定 statisticalThreshold 值,然后为每个设备确定其行为在比较中的排名方式。

consecutiveDatapointsToAlarm

如果设备在指定数量的连续数据点违反了行为,则会发出警报。如果未指定,默认值为 1。(这与 AWS IoT 控制台不同,后者在默认情况下会显示值 3,但可以进行覆盖。)

consecutiveDatapointsToClear

如果发出提醒后,违规设备不再违反指定数量的连续数据点的行为,则警报将被解除。如果未指定,默认值为 1。(这与 AWS IoT 控制台不同,后者在默认情况下会显示值 3,但可以进行覆盖。)

指标

aws:message-byte-sizeMore info (1)
aws:message-byte-size

消息中的字节数。

More info (1)

使用此指标指定从设备传输到 AWS IoT 的每条消息的最大或最小大小(以字节为单位)。

来源:云端

运算符:less-than | less-than-equals | greater-than | greater-than-equals

值:非负整数

单位:字节

示例:

{ "name": "Max Message Size", "metric": "aws:message-byte-size", "criteria": { "comparisonOperator": "less-than", "value": { "count": 1024 }, "consecutiveDatapointsToAlarm": 3, "consecutiveDatapointsToClear": 3 } }

使用 statisticalThreshold 的示例:

{ "name": "Large Message Size", "metric": "aws:message-byte-size", "criteria": { "comparisonOperator": "less-than", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 3, "consecutiveDatapointsToClear": 3 } }

如果设备在连续 3 个 5 分钟时段内,传输的消息累积大小超过针对该安全配置文件行为报告的所有其他设备累积大小的 90%,则会发出警报。

 

aws:num-messages-received/aws:num-messages-sentMore info (2)
aws:num-messages-received/aws:num-messages-sent

设备在给定时间段内接收或发送的消息数量。

More info (2)

使用此指标指定给定时间段内 AWS IoT 与各个设备之间可发送或接收的最大或最小消息数量。

来源:云端

运算符:less-than | less-than-equals | greater-than | greater-than-equals

值:非负整数

单位:消息

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

示例:

{ "name": "Out bound message count", "metric": "aws:num-messages-sent", "criteria": { "comparisonOperator": "less-than", "value": { "count": 50 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 2, "consecutiveDatapointsToClear": 2 } }

使用 statisticalThreshold 的示例:

{ "name": "Out bound message rate", "metric": "aws:num-messages-sent", "criteria": { "comparisonOperator": "less-than", "statisticalThreshold": { "statistic": "p99" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 2, "consecutiveDatapointsToClear": 2 } }

 

aws:all-bytes-outMore info (3)
aws:all-bytes-out

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

More info (3)

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

来源:设备端

运算符: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", "value": { "count": 4096 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 5, "consecutiveDatapointsToClear": 4 } }

使用 statisticalThreshold 的示例:

{ "name": "TCP outbound traffic", "metric": "aws:all-bytes-out", "criteria": { "comparisonOperator": "less-than", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 900, "consecutiveDatapointsToAlarm": 5, "consecutiveDatapointsToClear": 4 } }

 

aws:all-bytes-inMore info (4)
aws:all-bytes-in

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

More info (4)

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

来源:设备端

运算符: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", "value": { "count": 4096 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 3 } }

使用 statisticalThreshold 的示例:

{ "name": "TCP inbound traffic", "metric": "aws:all-bytes-in", "criteria": { "comparisonOperator": "less-than", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 3 } }

 

aws:all-packets-outMore info (5)
aws:all-packets-out

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

More info (5)

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

来源:设备端

运算符: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", "value": { "count": 100 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 3 } }

使用 statisticalThreshold 的示例:

{ "name": "TCP outbound traffic", "metric": "aws:all-packets-out", "criteria": { "comparisonOperator": "less-than", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 3 } }

 

aws:all-packets-inMore info (6)
aws:all-packets-in

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

More info (6)

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

来源:设备端

运算符: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", "value": { "count": 100 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 2, "consecutiveDatapointsToClear": 1 } }

使用 statisticalThreshold 的示例:

{ "name": "TCP inbound traffic", "metric": "aws:all-packets-in", "criteria": { "comparisonOperator": "less-than", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 2, "consecutiveDatapointsToClear": 1 } }

 

aws:num-authorization-failuresMore info (7)
aws:num-authorization-failures

给定时间段内授权失败次数。

More info (7)

使用此指标指定给定时间段内每个设备允许的最大授权失败次数。如果从设备发往 AWS IoT 的请求遭到拒绝(例如,设备试图发布到某个主题,但没有足够的权限),则会发生授权失败。

来源:云端

单位:失败次数

运算符:less-than | less-than-equals | greater-than | greater-than-equals

值:非负整数

单位:失败次数

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

示例:

{ "name": "Authorization Failures", "metric": "aws:num-authorization-failures", "criteria": { "comparisonOperator": "less-than", "value": { "count": 5 }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 2, "consecutiveDatapointsToClear": 1 } }

使用 statisticalThreshold 的示例:

{ "name": "Authorization Failures", "metric": "aws:num-authorization-failures", "criteria": { "comparisonOperator": "less-than", "statisticalThreshold": { "statistic": "p50" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 2, "consecutiveDatapointsToClear": 1 } }

 

aws:source-ip-addressMore info (8)
aws:source-ip-address

设备连接到 AWS IoT 的 IP 地址。

More info (8)

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

来源:云端

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

值:CIDR 列表

单位:n/a

示例:

{ "name": "Blacklisted 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" ] } } }

 

aws:destination-ip-addressesMore info (9)
aws:destination-ip-addresses

一组目标 IP 地址。

More info (9)

使用此指标指定一组允许(以前称为列入白名单)或拒绝(以前称为列入黑名单)的 CIDR,每个设备必须或不得通过它们进行通信。

来源:设备端

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

值:CIDR 列表

单位:n/a

示例:

{ "name": "Blacklisted destination IPs", "metric": "aws:destination-ip-addresses", "criteria": { "comparisonOperator": "not-in-cidr-set", "value": { "cidrs": [ "12.8.0.0/16", "15.102.16.0/24" ] } } }

 

aws:listening-tcp-ports / aws:listening-udp-portsMore info (10)
aws:listening-tcp-ports / aws:listening-udp-ports

设备正在侦听的 TCP 或 UDP 端口。

More info (10)

使用此指标指定一组允许(以前称为列入白名单)或拒绝(以前称为列入黑名单)的 TCP/UDP 端口,每个设备必须或不得通过它们进行侦听。

来源:设备端

运算符: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 ] } } }

 

aws:num-listening-tcp-ports / aws:num-listening-udp-portsMore info (11)
aws:num-listening-tcp-ports / aws:num-listening-udp-ports

设备正在侦听的 TCP 或 UDP 端口数量。

More info (11)

使用此指标指定每个设备应该侦听的最大或最小 TCP 或 UDP 端口数量。

来源:设备端

运算符:less-than | less-than-equals | greater-than | greater-than-equals

值:非负整数

单位:端口

示例:

{ "name": "Max TCP Ports", "metric": "aws:num-listening-tcp-ports", "criteria": { "comparisonOperator": "less-than-equals", "value": { "count": 4 }, "consecutiveDatapointsToAlarm": 2, "consecutiveDatapointsToClear": 1 } }

使用 statisticalThreshold 的示例:

{ "name": "Max TCP Ports", "metric": "aws:num-listening-tcp-ports", "criteria": { "comparisonOperator": "less-than-equals", "statisticalThreshold": { "statistic": "p90" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 2, "consecutiveDatapointsToClear": 1 } }

 

aws:num-established-tcp-connectionsMore info (12)
aws:num-established-tcp-connections

设备的 TCP 连接数。

More info (12)

使用此指标指定每个设备应该具有的最大或最小活动 TCP 连接数量。(所有 TCP 状态)

来源:设备端

运算符:less-than | less-than-equals | greater-than | greater-than-equals

值:非负整数

单位:连接

示例:

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

使用 statisticalThreshold 的示例:

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

 

aws:num-connection-attemptsMore info (13)
aws:num-connection-attempts

设备在给定时间段内尝试建立连接的次数。

More info (13)

使用此指标指定每个设备尝试建立连接的最大或最小次数。成功和失败的尝试都会计算在内。

来源:云端

运算符:less-than | less-than-equals | greater-than | greater-than-equals

值:非负整数

单位:连接尝试次数

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

示例:

{ "name": "Connection Attempts", "metric": "aws:num-connection-attempts", "criteria": { "comparisonOperator": "greater-than", "value": { "count": 5 }, "durationSeconds": 600, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 2 } }

使用 statisticalThreshold 的示例:

{ "name": "Connection Attempts", "metric": "aws:num-connection-attempts", "criteria": { "comparisonOperator": "greater-than", "statisticalThreshold": { "statistic": "p10" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 2 } }

 

aws:num-disconnectsMore info (14)
aws:num-disconnects

设备在给定时间段内与AWS IoT 断开连接的次数。

More info (14)

使用此指标来指定设备在给定时间段内与 AWS IoT 断开连接的最大或最小次数。

来源:云端

运算符:less-than | less-than-equals | greater-than | greater-than-equals

值:非负整数

单位:连接断开次数

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

示例:

{ "name": "Disconnections", "metric": "aws:num-disconnects", "criteria": { "comparisonOperator": "greater-than", "value": { "count": 5 }, "durationSeconds": 600, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 2 } }

使用 statisticalThreshold 的示例:

{ "name": "Disconnections", "metric": "aws:num-disconnects", "criteria": { "comparisonOperator": "greater-than", "statisticalThreshold": { "statistic": "p10" }, "durationSeconds": 300, "consecutiveDatapointsToAlarm": 1, "consecutiveDatapointsToClear": 2 } }

监控未注册设备的行为

AWS IoT Device Defender 使得识别未在 AWS IoT 注册表中注册的设备的异常行为成为可能。您可以定义特定于以下目标类型之一的安全配置文件:

  • 所有设备

  • 所有已注册的设备(AWS IoT 注册表中的事物)

  • 所有未注册的设备

  • 事物组中的设备

安全配置文件为账户中的设备定义一组预期行为,并指定在检测到异常时要执行的操作。安全配置文件应附加到最具体的目标,以便您精细控制要针对该配置文件评估哪些设备。

未注册的设备在整个设备生命周期内必须提供一致的 MQTT 客户端标识符或事物名称(对于报告设备指标的设备),以便所有违规和指标都归属到相同设备。

重要

如果事物名称包含控制字符,或事物名称的长度超过 128 字节的 UTF-8 编码字符,则将拒绝设备报告的消息。

如何使用 AWS IoT Device Defender Detect

  1. 可以只将 AWS IoT Device Defender Detect 与云端指标相结合使用,但如果计划使用设备报告的指标,必须首先在连接 AWS IoT 的设备或设备网关上部署 AWS IoT 开发工具包。有关更多信息,请参阅从设备发送指标

  2. 在定义行为并创建警报之前,请先考虑查看设备生成的指标。AWS IoT 可以从设备收集指标,因此您可以首先识别账户中的一组设备或所有设备的常见或异常行为。使用 CreateSecurityProfile,但仅指定感兴趣的 additionalMetricsToRetain。此时,请勿指定任何 behaviors

    使用 AWS IoT 控制台查看设备指标,以了解设备的典型行为。

  3. 为安全配置文件创建一组行为。行为包含为账户中的一组设备或所有设备指定正常行为的指标。有关信息(包括示例),请参阅指标。创建一组行为后,可以使用 ValidateSecurityProfileBehaviors 进行验证。

  4. 使用 CreateSecurityProfile 创建包含行为的安全配置文件。当设备违反行为时,可以使用 alertTargets 参数向目标(SNS 主题)发送提醒。(如果使用 SNS 发送提醒,请注意系统将根据您账户的 SNS 限制统计数量。大量违规事件可能会耗尽您的容量。) 也可以使用 CloudWatch 指标检查违规。有关更多信息,请参阅 AWS IoT 指标

  5. 使用 AttachSecurityProfile 将安全配置文件附加到一组设备(事物组)、账户中所有已注册的事物、所有未注册的事物或所有设备。AWS IoT Device Defender Detect 开始检测异常行为,如果检测到任何行为违规,则发送提醒。您可能想要将安全配置文件附加到所有未注册的事物,例如,您希望与不在账户事物注册表中的移动设备进行交互。您可以根据需求,为不同设备组定义不同的行为集。

    要将安全配置文件附加到一组设备,必须指定包含这些设备的事物组的 ARN。事物组 ARN 采用以下格式:

    arn:aws:iot:<region>:<accountid>:thinggroup/<thing-group-name>

    要将安全配置文件附加到账户中所有已注册的事物(忽略未注册的事物),必须指定以下格式的 ARN:

    arn:aws:iot:<region>:<accountid>:all/registered-things

    要将安全配置文件附加到所有未注册的事物,必须指定以下格式的 ARN:

    arn:aws:iot:<region>:<accountid>:all/unregistered-things

    要将安全配置文件附加到所有设备,必须指定以下格式的 ARN:

    arn:aws:iot:<region>:<accountid>:all/things
  6. 也可以使用 ListActiveViolations 跟踪违规行为,从而了解对于给定的安全配置文件或目标设备,检测到了哪些违规行为。

    使用 ListViolationEvents 查看给定时间段内检测到的违规行为。可以按照安全配置文件或设备筛选这些结果。

  7. 如果设备违反定义的行为过于频繁或太不频繁,那么应该调整行为定义。

  8. 要查看已设置的安全配置文件和正在监控的设备,请使用 ListSecurityProfiles ListSecurityProfilesForTarget ListTargetsForSecurityProfile

    使用 DescribeSecurityProfile 获取有关安全配置文件的详细信息。

  9. 要更改安全配置文件,请使用 UpdateSecurityProfile。使用 DetachSecurityProfile 从账户或目标事物组分离安全配置文件。使用 DeleteSecurityProfile 彻底删除安全配置文件。

权限

本部分包含有关如何设置管理 AWS IoT Device Defender Detect 所需的 IAM 角色和策略的信息。有关更多信息,请参阅 AWS Identity and Access Management 用户指南

授予 AWS IoT Device Defender Detect 向 SNS 主题发布提醒的权限

如果在 CreateSecurityProfile 中使用 alertTargets 参数,则必须为 IAM 角色指定两个策略:一个权限策略和一个信任策略。权限策略授予 AWS IoT Device Defender 向 SNS 主题发布通知的权限。信任策略授予 AWS IoT Device Defender 代入所需角色的权限。

权限策略
{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "sns:Publish" ], "Resource":[ "arn:aws:sns:region:account-id:your-topic-name" ] } ] }
信任策略
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
传递角色策略

您还需要附加至 IAM 用户的 IAM 权限策略,允许该用户传递角色。请参阅向用户授予将角色传递到 AWS 服务的权限

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:PassRole" ], "Resource": "arn:aws:iam::>account-id<:role/Role_To_Pass" } ] }

服务限制

  • 每个目标(事物组或用户账户)的最大安全配置文件数目为 5。

  • 每个安全配置文件的最大行为数是 100。

  • 每个安全配置文件的最大 value 元素(计数、IP 地址、端口)数目为 1000。

  • 设备指标报告可以每个设备每 5 分钟限制为一个指标报告。因此,限制您的设备报告到一个指标报告每 5 分钟刷新一次,以规避限制。

  • AWS IoT Device Defender Detect 违规在生成后存储 30 天。

从设备发送指标

AWS IoT Device Defender Detect 可以收集、聚合和监控 AWS IoT 设备生成的指标数据,以识别表现出异常行为的设备。本部分包含有关如何从设备向 AWS IoT Device Defender 发送指标的信息。

必须在连接 AWS IoT 的设备或设备网关上安全部署 AWS IoT 开发工具包,以收集设备端指标。AWS IoT Device Defender 提供了代理示例,您在创建自己的代理时可将其用作示例。如果无法提供设备指标,仍可以基于云端指标获得有限的功能。

请注意以下几点:

  • 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(具体请单击此处)。

  • 要使用代理示例或创建自己的自定义代理,必须安装 AWS IoT 设备开发工具包。要查看开发语言的链接,请转至 AWS IoT Core 资源

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

    $aws/things/THING_NAME/Defender/metrics/json

    $aws/things/THING_NAME/Defender/metrics/cbor

    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 分钟一个指标报告。(设备无法在每 5 分钟内生成多个指标报告。)

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

  • 可以使用作业设置设备指标报告代理实例的指标报告间隔。Device Defender Agent C 示例中包括了例子。有关更多信息,请参阅 README.md

设备指标文档规范

整体结构:

长名称

短名称

必需

类型

约束

备注

header

hed

Y

Object

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

metrics

met

Y

Object

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

标头数据块:

长名称

短名称

必需

类型

约束

备注

report_id

rid

Y

Integer

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

version

v

Y

String

Major.Minor

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

指标数据块:

TCP 连接:

长名称

短名称

父元素

必需

类型

约束

备注

tcp_connections

tc

metrics

N

Object

established_connections

ec

tcp_connections

N

List<Connection>

ESTABLISHED TCP 状态

connections

cs

established_connections

N

List<Object>

remote_addr

rad

connections

Y

Number

ip:port

IP 可能是 IPv6 或 IPv4

local_port

lp

connections

N

Number

>= 0

local_interface

li

connections

N

String

接口名称

total

t

established_connections

N

Number

>= 0

已建立的连接数

侦听 TCP 端口:

长名称

短名称

父元素

必需

类型

约束

备注

listening_tcp_ports

tp

metrics

N

Object

ports

pts

listening_tcp_ports

N

List<Port>

> 0

port

pt

ports

N

Number

> 0

端口数应该是大于 0 的数值

interface

if

ports

N

String

接口名称

total

t

listening_tcp_ports

N

Number

>= 0

侦听 UDP 端口:

长名称

短名称

父元素

必需

类型

约束

备注

listening_udp_ports

up

metrics

N

Object

ports

pts

listening_udp_ports

N

List<Port>

> 0

port

pt

ports

N

Number

> 0

端口数应该是大于 0 的数值

interface

if

ports

N

String

接口名称

total

t

listening_udp_ports

N

Number

>= 0

网络统计信息:

长名称

短名称

父元素

必需

类型

约束

备注

network_stats

ns

metrics

N

Object

bytes_in

bi

network_stats

N

Number

Delta Metric, >= 0

bytes_out

bo

network_stats

N

Number

Delta Metric, >= 0

packets_in

pi

network_stats

N

Number

Delta Metric, >= 0

packets_out

po

network_stats

N

Number

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 } } } }

使用短名称的 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 } } } }