【问题标题】:DynamoDb access for unauthenticated users未经身份验证的用户的 DynamoDb 访问
【发布时间】:2016-10-01 07:32:59
【问题描述】:

我想将有关移动应用程序使用情况的一些分析信息存储到 Amazon DynamoDb 中。我有以下要求:

  • 每个移动应用只有一个 DynamoDb 表
  • 一个应用只能做PutItem方法
  • 应用的所有用户都未经身份验证(访客)

为了向移动应用程序提供访问 DynamoDb 中表的方法,我看到了两个选项:

  1. 将具有有限权限的凭据硬编码到应用程序中(对特定表执行PutItem 的权限);
  2. 使用 Amazon Cognito 在运行时为未经身份验证的用户获取临时凭证。

亚马逊强烈推荐的第二个选项更安全。在我的例子中,恶意用户可以访问硬编码凭证或硬编码身份池 ID,结果相同:访问 AWS 资源。

问题:在我的案例中使用 Cognito 是否会带来任何安全性改进?如果是,如何?

【问题讨论】:

    标签: amazon-dynamodb amazon-iam amazon-cognito


    【解决方案1】:

    Cognito 身份完全免费 - 您无需支付任何费用。

    您认为使用 Cognito 不会为未经身份验证的请求增加任何安全性的观点是不正确的。来自 Cognito 常见问题解答:


    问:Cognito Identity 如何帮助我安全地访问 AWS 服务?

    Cognito Identity 为您的用户分配一组临时的、有限权限的凭证来访问您的 AWS 资源。您可以使用 Cognito Identity 从您的移动应用程序安全地访问其他 AWS 服务,而无需您的 AWS 账户凭证。您还可以在身份和访问管理策略中使用为您的应用用户生成的唯一标识符。例如,您可以为 S3 存储桶创建一个策略,只允许特定用户访问他们自己的文件夹。


    针对 S3 描述的相同操作可以使用 dynamo 完成 - 详情请参阅 this blog post

    【讨论】:

    • 我想了解为什么硬编码为任何人提供临时凭证的身份池ID 比硬编码凭证更安全。潜在的攻击者可以读取凭证或身份池 ID 并访问 AWS 资源。我看不出在这种情况下要删除什么:池或凭据。 BTW Cognito 身份不是免费的,而是cost a lot
    • mobile.awsblog.com/post/Tx2XEKZCNBM7U64/… 在某种程度上涵盖了这一点,然后如上面链接的博客文章中所述,您可以使用该 ID 来确定用户可以通过 IAM 看到的内容。 Cognito 联合身份(这是您要询问的内容,身份池的用途以及提供凭据的内容)是免费的,Cognito 用户池(您链接的)不是。我是 Cognito 团队的一名开发人员 - 您尝试做的事情是免费的。
    • 来自您的链接:“Amazon Cognito 始终免费使用联合身份功能对用户进行身份验证和生成唯一标识符。”
    • 感谢 cmets。 1) 我同意使用 Cognito 肯定会提供很多好处,但我仍然没有看到任何安全改进。因此,我编辑了我的问题,以准确强调我的要求。 2)我从 Cognito 定价中不明白我正在尝试做的是免费的。我应该寻求技术支持吗?
    • 1) 您在使用 dynamo 并仅向用户提供 put 电源的用例是什么? 2) 如果您使用用户池,则需要付款。如果您只使用联合身份(身份池、您获得凭据等),它是完全免费的。
    猜你喜欢
    • 2016-06-24
    • 2016-01-15
    • 2020-11-15
    • 2016-01-17
    • 2017-06-14
    • 2016-10-25
    • 2016-11-04
    • 2019-01-29
    • 1970-01-01
    相关资源
    最近更新 更多