iOS应用上传到Amazon S3

19

让我们从问题陈述开始:

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

作为存储,我选择了Amazon S3,并想到创建一个名为"myappphotos"的存储桶(bucket),其中包含许多文件夹。文件夹名称是用户电子邮件和密钥的哈希值。因此,每个用户都有自己独特的文件夹在我的Amazon S3存储桶中。

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

设置这样一个系统的最佳实践是什么?我希望用户能够直接将图片上传到Amazon S3,但我当然不能硬编码访问密钥。因此,我需要我的API与Amazon通信并请求某种访问令牌——仅适用于我正在为之发出请求的用户的特定文件夹。

是否有人能够帮助我或引导我查找解决类似问题的一些资源?我不认为我是第一个遇到这个问题的人,而且Amazon的文档非常详尽,以至于我真的不知道从哪里开始查找。

非常感谢!

5个回答

13
你看过Amazon AWS iOS SDK吗?
根据文档:
AWSiOSDemoTVM和AWSiOSDemoTVMIdentity示例演示了一种更安全的机制,用于将AWS安全凭据传输到移动客户端。这些示例需要一个服务器应用程序,即代币售货机(TVM),该应用程序作为单独的下载提供。样品应用程序使用TVM进行注册,可以匿名或使用用户提供的用户名和密码。 TVM使用AWS安全令牌服务获取临时安全凭据并将其传递给移动应用程序。
TVM有两种形式,一种支持匿名注册,另一种需要用户名和密码才能注册设备并接收安全令牌。要下载和安装匿名注册版TVM,请转到 http://aws.amazon.com/code/8872061742402990。要下载和安装身份注册版TVM,请转到 http://aws.amazon.com/code/7351543942956566
来自使用代币售货机验证AWS移动应用程序的用户
本文讨论了一种架构,该架构使在移动设备上运行的应用程序更安全地与Amazon Web Services(如Amazon Simple Storage Service(S3) ,Amazon SimpleDB,Amazon Simple Notification Service(SNS)和Amazon Simple Queue Service(SQS)进行交互。所讨论的架构使用“令牌售货机”将临时安全凭据分发给移动应用程序。
您的令牌可以限制对S3上特定存储桶的访问,因此它似乎是最佳选项。

我在自己的回答中进一步澄清了这一点。 - tybro0103

2
进一步澄清 Terry Wilcox 的回答...
您需要使用 AWS STS 在服务器上生成临时安全凭证。
STS 是 AWS 的“安全令牌服务”。它允许您以编程方式创建访问密钥并设置特定的权限和到期日期。
由于您已经拥有了用于身份验证用户的应用程序 API/后端,因此您可以发出 API 调用,生成仅对该用户文件夹具有访问权限的临时 AWS 凭据。
如果您没有应用程序的后端,Amazon 提供了一个名为 TVM(令牌售卖机)的 Java 应用程序,您可以轻松部署自己的 Elastic Beanstalk 实例。
相关的 AWS 文章:
http://aws.amazon.com/articles/4611615499399490 http://docs.aws.amazon.com/STS/latest/UsingSTS/STSUseCases.html#MobileApplication

2

5
如何在为用户提供S3空间时避免将您的应用程序的秘密密钥与其一同分发?ASIHTTPRequest需要一个秘密密钥。 - Terry Wilcox

0

0

您可以将用户访问权限限制到文件夹级别。请参考此示例凭证管理


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