如何向 DynamoDB/AppSync 添加访问规则?

Posted

技术标签:

【中文标题】如何向 DynamoDB/AppSync 添加访问规则?【英文标题】:How to add Access Rules to DynamoDB/AppSync? 【发布时间】:2021-06-11 06:38:18 【问题描述】:

我在聊天项目中使用 Amplify、AppSync、GraphQL 和 DynamoDB。 我的目标是构建一个类似于 facebook-messenger 的聊天应用程序。 有没有办法为某些 DynamoDB 文档创建访问规则(类似于 Firebase 中的 Firestore 规则)? 换句话说,是否可以以安全可靠的方式仅向某些用户显示某些文档?

【问题讨论】:

【参考方案1】:

这个话题不时出现,重要的是要意识到安全性可以(并且很可能应该)发生在应用程序的不同层中。

在 AWS 中工作时,了解Identity and Access Management(IAM) 很重要。 IAM 是 AWS 用来定义对整个 AWS 生态系统资源的访问策略的工具。

IAM 非常强大,甚至可以用来定义您的每个用户可以访问的 DynamoDB 分区!这似乎是您问题的 解决方案。但是,您的应用程序用户不太可能直接访问 DynamoDB。相反,他们正在调用一个 API,该 API 使用与您的用户不同的 IAM 角色执行 Lambda。那么,你是做什么的呢?

还记得我说过安全应该发生在应用程序的不同层吗?好吧,这是其中之一!您的应用程序代码应根据正在访问应用程序做出决定,并采取适当的措施来允许/拒绝该访问。

例如,您的应用程序可能决定用户只能向他们是朋友的人发送消息。这不是 IAM 将帮助您解决的问题。相反,需要直接在您的应用程序代码中实施逻辑以强制执行此业务规则。

这里的故事的寓意是没有内置机制来强制执行您的应用程序可能具有的所有类型的业务规则。

如果您使用的是 Amplify,则应首先查看 Cognito for Auth。 Cognito 将帮助您使用 IAM 角色(例如未经身份验证、经过身份验证、管理员等)为应用程序用户设置权限。这些角色将允许您定义不同的 IAM 策略,为您的用户授予各种权限(例如,访问 API Gateway 端点、特定 S3 存储桶和 DynamoDB 表等)。

【讨论】:

如果我使用 lambda 函数创建自己的解析器(即 AppSync/GraphQL 解析器),这是创建对 DynamoDB 资源的访问规则的好方法吗?

以上是关于如何向 DynamoDB/AppSync 添加访问规则?的主要内容,如果未能解决你的问题,请参考以下文章

DynamoDB Appsync 查询多个属性

在 AWS Amplify GraphQL DynamoDB 中按另一个表的字段(也称为交叉表或嵌套过滤)过滤列表查询

如何向 SimulatorTrampoline 添加权限以访问特定文件夹

向标头添加授权并访问 [Authorize] 控制器

如何向 azure b2c 访问令牌添加自定义声明?

如何使用 ClientCredentials grantType 向 IdentityServer4 生成的我的访问令牌添加声明