使用Amazon SimpleDB进行匿名读取

4
我想使用JavaScript直接从客户端查询SimpleDB。我的应用程序主要是读取操作,我不想通过应用程序服务器路由请求。是否可以在没有身份验证的情况下执行选择请求?
我可以设置一个身份验证服务器,但这样做相当不优雅,因为它只会对每个读取请求回答“是”,并且会引入另一个瓶颈/速度障碍/故障点。
其他云数据库解决方案(Microsoft、Google)是否具有此功能?
3个回答

3
这可以通过使用AWS IAM(身份和访问管理)和服务器端的“令牌售卖机”来实现。 AWS文档中有一篇文章专门介绍了使用案例使用令牌售卖机对AWS移动应用程序进行用户身份验证,并在GitHub上提供了服务器端、iOS和Android的示例代码。一般技术可用于非移动设备和/或JavaScript客户端。

注意:仍需要一个服务器组件来提供临时访问令牌。然而,这些请求的数量可以显著减少(最多每36小时一次)。其余请求来自不受信任的客户端直接访问SimpleDB,没有中间人。

一般技术

  1. 匿名客户端调用您的令牌售货机(您的服务器)
  2. 令牌售货机知道密钥,调用AWS生成临时令牌
  3. 售货机将令牌返回给客户端
  4. 客户端使用匿名临时令牌调用SimpleDB API;无法写入SimpleDB

只读访问策略

来自AWS示例代码 "只读访问策略"

{
  "Statement": [
    {
      "Action": ["sdb:GetAttributes", "sdb:List*", "sdb:Select*"],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}

这不仅适用于SimpleDB。您可以为其他几个AWS资源设置访问策略(请参见完整的访问策略示例)。

替换动态客户端-服务器调用为静态资源的变化

虽然您无法消除服务器组件,但客户端不一定必须直接与售货机进行通信:

  1. 计划作业每N秒生成一个token,其中N + fudge == token expiry
  2. 作业将token写入公共S3存储桶(或任何其他静态资源)
    • 根据fudge设置适当的maxAge缓存控制标头
  3. 匿名客户端从静态URI读取token
  4. 客户端使用token进行身份验证,对SimpleDB进行只读调用

1

您需要使用服务器签署所有请求。我想这就是您的意思。您仍然可以节省一些带宽。

我认为,只要JavaScript客户端能够进行身份验证,每个人都可以。


我想要做的是限制公共访问读取请求,尽管这可能也会有问题。我认为亚马逊确实有一个可以做到这一点的访问管理功能,但我需要再多了解一些。 - Jack000

0
需要一个身份验证服务器,您可以使用EC2来实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接