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

How to add Access Rules to DynamoDB/AppSync?

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

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

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

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

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

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

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

如果您正在使用 Amplify,您应该首先研究 Cognito for Auth。 Cognito 将帮助您使用 IAM 角色(例如未验证、已验证、管理员等)为应用程序的用户设置权限。这些角色将允许您定义不同的 IAM 策略,为您的用户授予各种权限(例如访问 API 网关端点、特定 S3 存储桶和 DynamoDB 表等)。