安全地从桌面应用程序访问AWS S3

时间:2013-04-05 04:22:51

标签: amazon-web-services amazon-s3 boto

我在单个S3帐户中拥有来自多个用户的数据。我的桌面应用程序有一个身份验证系统,让应用程序知道用户是谁以及S3上要访问的文件夹。但桌面应用程序具有整个S3文件夹的访问代码。

有人告诉我这不安全,因为黑客可能会破坏从应用程序到S3的请求并使用凭据下载所有数据。

这是真的吗?如果是这样我怎么能避免呢? (他说我需要AWS云中的客户端服务器,但这对我来说并不清楚......)

顺便说一句。我正在使用Boto python库来访问S3。

感谢

2 个答案:

答案 0 :(得分:2)

我刚刚找到this

  1. 请勿将AWS密钥存储在应用中。一个坚定的黑客能够找到它的正面。一个想法是,您有一个托管的Web服务,其唯一目的是使用密钥签署客户端的S3请求,然后将这些请求中继到S3服务。因此,您可以让您的用户使用您控制的凭据对您的Web服务进行身份验证。要重新进行迭代:客户直接与S3对话,但要求“橡皮图章”/批准他们的请求。

  2. 我不认为S3必须是一个扁平结构 - 如果您使用文件系统表示法“folder / subfolder / file.ext”作为密钥。

  3. S3支持虚荣网址,请参阅http://docs.amazonwebservices.com/AmazonS3/2006-03-01/VirtualHosting.html - 基本上网址“http://s3.amazonaws.com/mybucket/myfile.ext”变为“http://mybucket.s3.amazonaws.com/myfile.ext”,然后您可以在DNS中设置映射的CNAME“ www.myname.com“to”mybucket.s3.amazonaws.com“导致”http://www.myname.com/myfile.ext

答案 1 :(得分:1)

完美时机! AWS昨天宣布了一项功能,可能会对您有所帮助:Variables in IAM policies

您要做的是为每个用户创建一个IAM帐户。这将允许您为每个用户提供单独的访问密钥和密钥。然后,您将根据用户名为您的存储桶分配一个限制访问存储桶部分的策略。 (我上面链接的例子就是这个用例的好例子。)