【问题标题】:Upload from iOS App to Amazon S3从 iOS 应用上传到 Amazon S3
【发布时间】:2012-01-05 14:55:37
【问题描述】:

让我们从问题陈述开始:

我的 iOS 应用程序有一个登录表单。当用户登录时,会调用我的 API 并授予或拒绝访问权限。如果授予访问权限,我希望用户能够将图片上传到他的帐户和/或管理它们。

作为存储,我选择了 Amazon S3,并且我认为拥有一个名为“myappphotos”的存储桶是个好主意,其中包含许多文件夹。文件夹名称是用户电子邮件的哈希值和密钥。因此,每个用户在我的 Amazon S3 存储桶中都有自己独特的文件夹。

由于我最近才开始使用 AWS,所以这是我的问题:

设置这样的系统的最佳做法是什么?我希望用户能够将图片直接上传到 Amazon S3,但我当然不能对访问密钥进行硬编码。所以我需要我的 API 以某种方式与 Amazon 对话并请求各种访问令牌 - 仅适用于属于我提出请求的用户的特定文件夹。

谁能帮助我和/或引导我找到解决类似问题的一些来源?不要以为我是第一个,而且亚马逊文档非常丰富,我真的不知道从哪里开始。

非常感谢!

【问题讨论】:

    标签: ios upload amazon-s3


    【解决方案1】:

    你看过Amazon AWS SDK for iOS吗?

    来自文档:

    AWSiOSDemoTVM 和 AWSiOSDemoTVMIdentity 示例演示了更多 将 AWS 安全凭证传输到移动设备的安全机制 客户。这些示例需要一个服务器应用程序,在这种情况下 令牌自动售货机 (TVM),作为单独的下载提供。 示例应用程序以匿名方式或通过 TVM 注册 用户提供的用户名和密码。 TVM 使用 AWS 安全性 令牌服务获取临时安全凭证并将其传递给 移动应用程序。

    TVM 有两种形式,一种支持匿名 注册和一个需要用户名和密码的 注册设备并接收安全令牌。下载并安装 用于匿名注册的 TVM,请访问 http://aws.amazon.com/code/8872061742402990。下载并安装 用于身份注册的 TVM,请访问 http://aws.amazon.com/code/7351543942956566.

    来自Authenticating Users of AWS Mobile Applications with a Token Vending Machine

    本文讨论了一种支持应用程序的架构 在移动设备上运行以更安全地与 Amazon Web 交互 Amazon Simple Storage Service (S3)、Amazon SimpleDB、 Amazon Simple Notification Service (SNS) 和 Amazon Simple Queue 服务 (SQS)。所讨论的架构使用“代币售卖 Machine”将临时安全凭证分发到移动设备 应用。

    您的令牌可以限制对 S3 上特定存储桶的访问,因此它似乎是最佳选择。

    【讨论】:

    • 我在自己的回答中进一步澄清了这一点。
    【解决方案2】:

    【讨论】:

    • 问题是当您为用户提供 S3 空间时,如何避免将您的密钥与您的应用一起分发? ASIHTTPRequest 需要一个密钥。
    【解决方案3】:

    您可以限制用户对文件夹级别的访问。请参考此示例Credential Management

    【讨论】:

      【解决方案4】:

      为了进一步澄清特里威尔科克斯的回答......

      您需要使用AWS STS在您的服务器上生成临时安全凭证

      STS 是 AWS 的“安全令牌服务”。它允许您以编程方式创建访问密钥并设置特定的权限和到期日期。

      由于您的应用程序已经有一个 API/后端来验证您的用户,因此您可以进行 API 调用,生成只能访问该用户文件夹的临时 AWS 凭证。

      如果您的应用没有后端,Amazon 会提供一个 Java 应用调用 TVM(令牌自动售货机),您可以轻松地将自己的实例部署到 Elastic Beanstalk。

      AWS 相关文章:
      http://aws.amazon.com/articles/4611615499399490 http://docs.aws.amazon.com/STS/latest/UsingSTS/STSUseCases.html#MobileApplication

      【讨论】:

        【解决方案5】:

        2020 - 你应该使用亚马逊官方工具:Amplify

        它基本上要求您的用户对应用程序进行身份验证(有点类似于 Firebase),从而为您保护连接。

        这里有一个很好的文件上传示例: https://docs.amplify.aws/lib/storage/getting-started/q/platform/ios#initialize-amplify-storage

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-29
          • 2010-11-06
          • 2013-01-28
          • 2014-12-19
          • 1970-01-01
          • 2021-04-27
          • 2012-02-14
          • 1970-01-01
          相关资源
          最近更新 更多