如何查找用户以为 S3 存储桶创建 ACL?
Posted
技术标签:
【中文标题】如何查找用户以为 S3 存储桶创建 ACL?【英文标题】:How do I lookup a user to create an ACL for an S3 bucket? 【发布时间】:2018-02-12 19:00:29 【问题描述】:我们目前正在我们的 ColdFusion 服务器上存储用户上传的文件,并且磁盘使用量正在失控。鉴于易于集成,我们希望将这些文件移到 S3 上,只允许用户直接从那里访问文件,但我不太清楚如何处理权限。
上传文件后,我可以使用 CF 为文件或存储桶设置 ACL。但是,要创建该 ACL 结构,我需要一个可以允许访问的用户列表。较旧的文档列出了用户可以通过电子邮件地址指定,但 new piece of documentation 我发现状态
您不能使用电子邮件地址为任何 AWS 指定受让人 2014 年 12 月 8 日之后创建的区域
这表明电子邮件查找正在成为传统。该文档提供了有关通过阅读现有 ACL 来查找我自己的规范用户 ID 或其他帐户的规范用户 ID 的说明,但我没有其他 ACL 可供参考。
假设我只有一个用户的名字/姓氏和电子邮件,在他们注册期间提供给我的系统,我如何找到他们的规范用户 ID 来分配他们对我的 S3 存储桶的读取权限?或者在这种情况下,是否可以生成一次性访问密钥,我可以在将用户转发到 s3 文件之前将其交给用户?
【问题讨论】:
【参考方案1】:你在这里有两个基本的选择,这两个都需要你去了解、爱和恨IAM。
您的应用程序可以处理对 S3 的所有请求,并且您的应用程序必须知道人员 X 有权访问文件 Q。您的应用程序处理所有授权,并根据需要向 S3 发出添加/检索/删除文件的请求.您想让存储桶不在世界范围内可读,以保护存储桶中的各个文件。对存储桶中任何文件的任何请求都必须通过 CF 发出,而不是直接向存储桶本身发出。
您为需要在 S3 上存储文件的所有个人创建 IAM 帐户。然后,您将该个人的 IAM 凭证在请求中传递给 S3,S3 会验证所提供的凭证确实可以访问 S3 上的文件。您在添加文件时使用相同的 IAM 凭证说“嘿,只有拥有这些 IAM 凭证的人才能访问此文件”——有效地在 ACL 中提供 IAM 帐户信息。
我建议让您的应用程序处理访问控制,而不是尝试为您的每个用户创建 IAM 帐户。为所有用户拥有单独的 IAM 帐户的主要原因是,如果多个应用程序将使用相同的 S3 存储桶。
您提到了一次性访问密钥,但该服务(简单令牌服务,或 STS)实际上是用于 EC2 中的虚拟机实例获取临时令牌以根据需要(特别是在启动期间)访问其他 AWS 服务。它不是为 AWS 之外的单个应用程序设计的,以提供对 AWS 服务的一次性访问。
在这两种情况下,您还必须签署您的请求。有许多与 S3 相关的 CFC,但它们都不能处理当前的 Signature v4 签名过程。您将需要使用适用于 Java 的 AWS 开发工具包来执行此操作。这并不难,但这意味着您必须利用 SDK 的 .jar 文件来签署请求。我的示例AWS PlayBox CF application 中有在 CF 中使用 AWS SDK for Java 的示例。
【讨论】:
谢谢。 “处理对 S3 的所有请求”是指我们的服务器将处理身份验证,然后指示用户从 S3 下载文件,还是我们会通过从 S3 > CF > 客户端拉文件来绑定 CF?听起来像后者。该项目的部分目标是将带宽使用卸载到 S3,因为我们正在谈论非常大的文件。在这种情况下,是为每个用户创建和管理 IAM 帐户,然后将凭证通知他们,这是唯一的方法吗? 如果您的应用程序正在处理所有请求,那么您不需要为应用程序中的每个用户都拥有单独的 IAM 用户。您的应用程序可以将所有私有用户文件存储在单个私有 S3 存储桶中,任何个人用户都无法直接访问该存储桶。您的应用程序是唯一有权读取/写入该存储桶的东西。然后,您的应用程序会为您可能需要在应用程序中向用户显示的每个链接生成签名请求 (URL)。用户点击签名的请求链接,直接使用S3下载文件。以上是关于如何查找用户以为 S3 存储桶创建 ACL?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不创建 IAM 用户的情况下将文件从 EKS 上传到 S3 存储桶?