可以配置一组策略和规则,这些策略和规则可以附加到 IoT 事物和用户,以绑定设备具有的访问权限以及最终用户具有的访问权限。
在高层次上,可以执行以下操作:
- 物联网事物具有唯一链接到设备的证书
- 可以将策略链接到仅允许设备发布到特定主题的证书
- 可以设置 IoT 代码规则,以根据设备发布到的主题将数据推送到设备特定的 Timestream 数据库
- 最终用户可以被授予访问特定时间流表的读取权限
Timestream 数据库的最小 IAM 资源分辨率是一个表(请参阅https://docs.aws.amazon.com/timestream/latest/developerguide/security_iam_service-with-iam.html),因此限制用户访问的唯一方法是他们自己的数据将在其自己的表中包含设备数据,然后授予用户对具有其设备数据的表的访问权限。
1.物联网证书
这是基本 AWS IoT 核心事物设置的一部分。一旦设备拥有私钥和证书,它就可以连接到 IoT 核心并根据证书附带的策略发布/订阅
2. 使用 IoT Thing 策略变量设置通用策略
AWS IoT 事物策略变量信息可在此处找到:https ://docs.aws.amazon.com/iot/latest/developerguide/thing-policy-variables.html
以下策略可以附加到任何证书,并且只允许设备发布到devices/data/device_12345
主题。事物策略变量${iot:Connection.Thing.ThingName}
将替换为实际事物名称。这是一个最小策略,它只允许连接和发布到一个主题。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "iot:Connect",
"Resource": "arn:aws:iot:us-east-1:123456789:client/${iot:Connection.Thing.ThingName}"
},
{
"Effect": "Allow",
"Action": "iot:Publish",
"Resource": "arn:aws:iot:us-east-1:123456789:topic/devices/data/${iot:Connection.Thing.ThingName}"
}
]
}
任何将此策略附加到其证书的设备将只能使用其自己的事物名称发布到主题。这是一个通用策略,由于策略变量替换,它可以附加到任何事物。
3、配置IoT核心规则,将数据推送到Timestream数据库表
您将需要创建一个 Timestream 数据库和特定于设备的表,其中该表与事物具有相同的名称,例如device_data
带有表的数据库device_12345
首先要定义的是 IoT SQL 查询,它将选择要推送到规则中的 Timestream 操作的数据。在这种情况下,SQL 将是,
SELECT temperature FROM 'devices/data/+'
是一个通配符,+
它选择单个主题级别,即它会匹配上的数据devices/data/device_12345
但不匹配devices/data/device_12345/more_data
。这将从任何设备的已发布数据中选择数据。
device_data
在 Timestream 动作中,数据库将tableName
使用 SQL 函数topic()
(在动作的联系人中可用)来获取设备名称。
此规则必须使用 CLI 设置,因为替换模板只能通过 AWS CLI 或 API 使用。
用于设置规则的 JSON 是,
{
"sql": "SELECT temperature FROM 'devices/data/+'",
"actions": [
{
"timestream": {
"roleArn": "arn:aws:iam::123456789:role/service-role/devices_to_timestream",
"databaseName": "device_data",
"tableName": "${topic(3)}",
"dimensions": [
{
"name": "id",
"value": "${id}"
}
],
"timestamp": {
"value": "${ts}",
"unit": "SECONDS"
}
}
}
],
"ruleDisabled": false,
"awsIotSqlVersion": "2015-10-08"
}
请注意,需要 IAM 角色来提供对数据库表的写入访问权限,并且必须在配置规则之前进行设置。创建一个角色devices_to_timestream_role
并附加一个自定义策略以允许写入数据库的表。该政策是
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "timestream:WriteRecords",
"Resource": "arn:aws:timestream:us-east-1:123456789:database/device_data/table/*"
},
{
"Effect": "Allow",
"Action": "timestream:DescribeEndpoints",
"Resource": "*"
}
]
}
此策略允许写入任何表,因为许多不同的事物将使用它来写入数据。尽管此策略允许写入任何表,但事物证书策略和规则查询限制了特定事物可以写入的表。
可以使用以下命令从命令行编写 IoT 规则:
aws iot create-topic-rule --rule-name devices_to_timestream --topic-rule-payload file://devices_to_timestream.json
wheredevices_to_timestream.json
有上面列出的规则的内容。
4. 让用户访问他们的数据
可以将访问策略附加到用户身份,以使最终用户能够按照Timesteam 基于身份的策略示例中的模式访问其设备数据。
总之:
此配置提供,
- 一种通用策略,可以附加到任何事物以允许其发布到具有事物特定名称的主题
- 将所有数据推送到时间流数据库中的事物特定表的一种通用规则
- 用户只能访问与其 AWS 身份相关联的事物数据
除了此处描述的内容之外,您还需要,
- 首次创建或连接新事物时创建新表的自动化方法
- 一种将访问权限附加到用户身份的机制