从 iOS 应用上传到 Amazon S3
Posted
技术标签:
【中文标题】从 iOS 应用上传到 Amazon S3【英文标题】:Upload from iOS App to Amazon S3 【发布时间】:2012-01-05 14:55:37 【问题描述】:让我们从问题陈述开始:
我的 ios 应用程序有一个登录表单。当用户登录时,会调用我的 API 并授予或拒绝访问权限。如果授予访问权限,我希望用户能够将图片上传到他的帐户和/或管理它们。
作为存储,我选择了 Amazon S3,并且我认为拥有一个名为“myappphotos”的存储桶是个好主意,其中包含许多文件夹。文件夹名称是用户电子邮件的哈希值和密钥。因此,每个用户在我的 Amazon S3 存储桶中都有自己独特的文件夹。
由于我最近才开始使用 AWS,所以这是我的问题:
设置这样的系统的最佳做法是什么?我希望用户能够将图片直接上传到 Amazon S3,但我当然不能对访问密钥进行硬编码。所以我需要我的 API 以某种方式与 Amazon 对话并请求各种访问令牌 - 仅适用于属于我提出请求的用户的特定文件夹。
谁能帮助我和/或引导我找到解决类似问题的一些来源?不要以为我是第一个,而且亚马逊文档非常丰富,我真的不知道从哪里开始。
非常感谢!
【问题讨论】:
【参考方案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】:ASIHTTPRequest 直接支持 Amazon S3。
http://allseeing-i.com/ASIHTTPRequest/S3
【讨论】:
问题是当您为用户提供 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
【讨论】:
以上是关于从 iOS 应用上传到 Amazon S3的主要内容,如果未能解决你的问题,请参考以下文章
如何将文件直接从 Django admin 上传到 Amazon S3?缓解 Heroku 应用程序错误(超时)
从 Ruby on Rails 多次上传到 Amazon S3 - 使用啥后台处理系统?