我们目前正在将用户上传的文件存储在我们的ColdFusion服务器上,并且磁盘使用率已经失控。鉴于易于集成,我们希望将这些文件移到S3上,并允许用户直接从那里访问文件,但是如何处理权限对我来说有点不清楚。
上传文件后,我可以使用CF为文件或存储桶设置ACL。但是,要创建该ACL结构,我需要一个可以被允许访问的用户列表。较旧的文档列表可以通过电子邮件地址指定用户,但new piece of documentation我找到了状态
您无法使用电子邮件地址为任何AWS指定受让人 2014年12月8日之后创建的区域
表示电子邮件查找正在成为传统。该文档提供了通过读取现有ACL来查找我自己的规范用户ID或其他帐户的规范用户ID的说明,但我没有其他ACL可供参考。
假设我只有一个用户的姓/名和电子邮件,在注册时提供给我的系统,我怎样才能找到他们的规范用户ID来为他们分配对S3存储桶的读取权限?或者在这种情况下是否可以生成一次性使用的访问密钥,我可以将其转发给用户,然后再转发给s3文件?
答案 0 :(得分:2)
这里有两个基本选项,这两个选项都要求你去了解,爱和恨IAM。
您的应用程序可以处理对S3的所有请求,您的应用程序必须知道X有权访问文件Q.您的应用程序处理所有授权,并根据需要向S3发出添加/检索/删除文件的请求。您希望使存储桶不世界可读,以保护存储桶中的各个文件。对存储桶中任何文件的任何请求都必须通过CF进行,而不是直接对存储桶本身进行。
您可以为需要在S3上存储文件的所有个人创建IAM帐户。然后,在请求中将该个人的IAM凭证传递给S3,并验证所提供的凭据确实可以访问S3上的文件。您在添加文件时使用相同的IAM凭据来说“嘿,只有具有这些IAM凭据的人才能访问此文件” - 有效地在ACL中提供IAM帐户信息。
我建议让您的应用程序处理访问控制,而不是尝试为每个用户创建IAM帐户。为所有用户设置单独的IAM帐户的主要原因是多个应用程序将使用相同的S3存储桶。
您提到了一次性访问密钥,但该服务(简单令牌服务或STS)实际上是EC2中的虚拟机实例,以根据需要(特别是在启动期间)获取临时令牌以访问其他AWS服务。它不是为AWS之外的单个应用程序设计的,以提供对AWS服务的一次性访问。
在这两种情况下,您还必须签署您的请求。有许多与S3相关的CFC,但它们都不能处理当前的Signature v4签名过程。您需要使用AWS SDK for Java来执行此操作。这并不难,但这意味着您必须使用SDK的.jar文件来签名请求。我在示例AWS PlayBox CF application中有使用AWS SDK for Java的示例。