简单会议应用程序(DynamoDB?)的 AWS 后端架构的安全性和效率

Security and efficiency in AWS backend architecture for a simple meeting app (DynamoDB?)

我正在构建一个简单的应用程序 (IOS),每个用户都可以在其中向他的一个或多个 Facebook 好友发送会议邀请。会议由日期、地点和相关人员组成(以某种方式复制 Facebook 已经为活动所做的事情)。我决定将 AWS 用于我的后端,但尽管这似乎是一个简单而经典的用例,但我想不出一个既高效又安全的解决方案。下面我会把我一直以来的后台搭建方式揭露,然后指出我能想到的一些弱点。

出于解释的原因 . I use a unique DynamoDB table for all my users (inspired by this Amazon document),我将 Web Identity Federation 与 Facebook 而不是 Cognito 结合使用,其中主键是用户 Facebook ID。每个用户只能查询和获取与他的 Facebook ID 对应的行,但她可以使用她想要的任何主键写入行。

这是附加到我创建的角色的 IAM 策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:Query"
            ],
            "Resource": [
                "arn:aws:dynamodb:eu-west-1:528570751657:table/Meetings",
                "arn:aws:dynamodb:eu-west-1:528570751657:table/Meetings/index/*"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": [
                        "${graph.facebook.com:id}"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:eu-west-1:528570751657:table/Meetings",
                "arn:aws:dynamodb:eu-west-1:528570751657:table/Meetings/index/*"
            ]
        }
    ]
}

实际工作原理: 假设 Facebook ID 为 1001 的用户想要向其 ID 为 1002 和 1003 的两个 Facebook 好友发送会议邀请。为此,她使用三个不同的主键:1001、1002 和 1003 将相同的会议信息写入同一行 3 次。之后,每个用户都有一份会议副本,她可以从 table同时与 DynamoDB 同步(查询请求)。

我能想到的问题:

即是说,我想我遗漏了一些关于应如何在此处使用 AWS 的信息。我觉得 IAM 中的 DynamoDB 权限管理不够灵活。我应该继续使用 DynamoDB 但尝试以其他方式使用它吗?我应该彻底改变我的架构吗?

看起来您的用例需要一些更高级的 DynamoDB 技术,并且让移动设备直接访问 DynamoDB table 根据 Cognito 强加的限制,可能过于严格。

我建议考虑将 API 网关与 AWS Lambda 结合使用来创建您自己的 API,它仍然可以使用 Cognito 进行身份验证,但您可以让更高级的业务逻辑由您的应用程序以确保一切仍然安全。