【问题标题】:DynamoDB User managed usergroupsDynamoDB 用户管理的用户组
【发布时间】:2017-11-05 07:32:21
【问题描述】:

尽管搜索和阅读了有关角色和政策的信息,但我对 AWS 还是很陌生。我仍然无法弄清楚如何让用户管理用户组来控制对 DynamoDB 表中项目的访问。如果有人可以通过提供术语或示例帮助我进行搜索,我将不胜感激。

用例示例:

  • User1 在名为“Groups”的表中创建项目“Group_A”。
  • User2 在名为“Groups”的表中创建项目“Group_B”。
  • 另一个名为“Messages”的表有一个排序键,可以是任何项目 表“组”。

User1 如何在不允许 User2 访问的情况下将“Group_A”的“Messages”访问权限授予 User3 和 User4。

【问题讨论】:

  • 这听起来确实像是您可以通过应用程序控制的事物类型,而不是直接在数据库中。类似于使用 SQL 数据库的典型 web 应用程序如何访问整个数据库并使用应用程序中内置的某种授权系统来控制谁可以访问哪些数据。
  • 知道如何做到这一点并避免人们访问他们不应该访问的数据吗?
  • 您是否授予他们运行直接数据库查询的权限?您是否向他们提供登录您的 AWS 账户的凭据?一般来说,应用程序不会给用户直接的数据库访问权限,授权是在应用程序层而不是数据库层处理的。您提到了 Java,所以我会查看 Spring Security。
  • 非常感谢马克的帮助。我想我对这一切是如何运作的只有很少的了解。我创建了一个用户池,用户必须进行身份验证,然后通过具有策略的角色获取凭据才能访问表。也许我是偏执狂,但我的理解是,除非我以某种方式通过策略本身阻止对单个项目的访问,否则有人可以制作一个应用程序来进行身份验证并访问整个表。我会检查 Spring Security。

标签: java amazon-web-services amazon-dynamodb amazon-iam


【解决方案1】:

您的方案无法通过 IAM 策略(附加到用户或角色)和与用户池连接的 DynamoDB 细粒度访问控制直接实现。

DynamoDB 在其最佳访问控制级别允许通过前导键允许行级别访问控制。例如,在您的情况下,如果 Messages 表中 Message Item 的 hashkey 是 Cognito 中登录用户的属性,则可以仅使用 IAM 策略授予该用户。

但是,您可以实现此目的的方法是在应用程序级别。例如,您可以设置 API 网关和 Lambda,以便在 API 网关验证 Cognito 发出的 id_token,并在 Lambda 代码中编写查询以根据访问控制列表限制和检索数据。

【讨论】:

猜你喜欢
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 2020-02-14
  • 2017-05-25
  • 2023-03-28
  • 2021-12-22
相关资源
最近更新 更多