amazon-web-services - 如何使用 AWS Cognito 在 AWS IOT 中指定事物的所有权
问题描述
我正在学习 AWS IOT,我觉得我缺少一些非常基本的东西。
假设我想利用 AWS Cognito 作为我在网站上的身份提供者,并且我想创建注册用户“拥有”的事物。我想确保用户只能发布带有一些识别信息的主题,并且设备只能订阅其所有者发送的消息。我还希望能够列出某个用户拥有的所有事物。
我在想我可以使用“clientId”变量创建发布策略,并将 Sub 或用户名作为客户端 ID 发送。当我注册设备时,我必须使用硬编码的 Sub 或用户名进行订阅。这样做的问题是我宁愿使用可以过期的访问令牌,而且我认为 sub 对于授权来说不够安全。如果用户授权是由政策驱动的,我也不知道如何查询该用户拥有的所有事物。
另一种可能的解决方案是使用 DynamoDB,它可以解决列出特定用户拥有的所有设备的问题,但我仍然想使用策略,以便浏览器可以直接发布并且事物可以订阅他们的主题,并且只订阅他们在 AWS IOT 中的主题,而无需必须在 Lambda 上重新创建身份验证。
任何人都可以分享任何见解或指导我查看他们解决此问题的文档吗?
编辑:
我正在创建 Cognito Auth 和 Unauth 角色,我可以创建一个策略,允许 authed 角色使用角色策略连接/发布/订阅。但是,目前它对所有经过身份验证的用户都是全局的,因为该策略归因于身份验证角色而不是特定用户。我想知道如何隔离发布和订阅用户,以便他们只能发布/订阅他们拥有的东西。
我想到的解决方案是:
- 使用 DynamoDB 存储用户 -> 设备关系
- 在 Cognito 发布确认 lambda 中注册后,我可以调用 apply-policy 以使用 Cognito 身份 ID 更新 IOT 用户,并且只允许在 {cognitoID}/* 上发布/订阅主题
- 以某种方式使用拥有设备的用户的 Cognito ID 更新设备,以便事物可以发布和订阅 {cognitoID}/* 上的主题
解决方案
推荐阅读
- prestashop-1.7 - 如何在 Prestashop 1.7 的订单列表中添加列运费?
- c# - 如何在从 Excel 文件读取和保存数据库时使用 BackGroundWorker
- javascript - 如何从正文中选择一个随机的 HTML 元素?
- flowtype - 使用流类型缩小多个属性的问题
- swift - 无法为枚举制定协议
- java - android平台上是否有替换物理按钮按下的事件处理程序?
- c++ - Boost 程序选项似乎失败了
- python - Python JSON 通过列表解析并检查条件
- sql-server - SqlException:使用 .NET Core 2.1 的 SQL Server 的用户 'DOMAIN\MACHINENAME$' 登录失败
- flutter - Flutter Implementing pause and play..... Streaming Music