0

我正在学习 AWS IOT,我觉得我缺少一些非常基本的东西。

假设我想利用 AWS Cognito 作为我在网站上的身份提供者,并且我想创建注册用户“拥有”的事物。我想确保用户只能发布带有一些识别信息的主题,并且设备只能订阅其所有者发送的消息。我还希望能够列出某个用户拥有的所有事物。

我在想我可以使用“clientId”变量创建发布策略,并将 Sub 或用户名作为客户端 ID 发送。当我注册设备时,我必须使用硬编码的 Sub 或用户名进行订阅。这样做的问题是我宁愿使用可以过期的访问令牌,而且我认为 sub 对于授权来说不够安全。如果用户授权是由政策驱动的,我也不知道如何查询该用户拥有的所有事物。

另一种可能的解决方案是使用 DynamoDB,它可以解决列出特定用户拥有的所有设备的问题,但我仍然想使用策略,以便浏览器可以直接发布并且事物可以订阅他们的主题,并且只订阅他们在 AWS IOT 中的主题,而无需必须在 Lambda 上重新创建身份验证。

任何人都可以分享任何见解或指导我查看他们解决此问题的文档吗?

编辑:

我正在创建 Cognito Auth 和 Unauth 角色,我可以创建一个策略,允许 authed 角色使用角色策略连接/发布/订阅。但是,目前它对所有经过身份验证的用户都是全局的,因为该策略归因于身份验证角色而不是特定用户。我想知道如何隔离发布和订阅用户,以便他们只能发布/订阅他们拥有的东西。

我想到的解决方案是:

  1. 使用 DynamoDB 存储用户 -> 设备关系
  2. 在 Cognito 发布确认 lambda 中注册后,我可以调用 apply-policy 以使用 Cognito 身份 ID 更新 IOT 用户,并且只允许在 {cognitoID}/* 上发布/订阅主题
  3. 以某种方式使用拥有设备的用户的 Cognito ID 更新设备,以便事物可以发布和订阅 {cognitoID}/* 上的主题
4

0 回答 0