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

问题描述:

我在单个S3帐户内有多个用户的数据。我的桌面应用程序有一个认证系统,可让应用程序知道用户是谁以及要在S3*问哪个文件夹。但桌面应用程序具有整个S3文件夹的访问代码。从桌面应用程序安全地访问AWS S3

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

这是真的吗?如果是这样,我该如何避免它? (他说我需要在AWS云中的客户端服务器,但这并不明确...)

btw。我正在使用Boto python库来访问S3。

感谢

我刚刚发现this

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

  2. 我没有看到S3一定的扁平结构 - 如果你使用的文件系统符号“文件夹/子文件夹/ file.ext”的钥匙。

  3. 虚荣URL由S3支持见http://docs.amazonwebservices.com/AmazonS3/2006-03-01/VirtualHosting.html - 基本URL“http://s3.amazonaws.com/mybucket/myfile.ext”变成“http://mybucket.s3.amazonaws.com/myfile.ext”然后你可以设置一个CNAME在您的DNS映射“www.myname.com”到“mybucket.s3.amazonaws .com“,结果为”http://www.myname.com/myfile.ext

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

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