对 AWS S3 存储桶的访问受限

Limited access to AWS S3 bucket

我正在尝试了解与 Amazon S3 相关的访问安全性。我想在 S3 存储桶中托管一些文件,使用 CloudFront 通过我的域访问它。我需要限制对某些 companies/individuals 的访问。此外,我需要单独管理该访问权限。

第二种访问模型是基于项目的,我需要为特定项目团队提供一个文件库,我需要能够以临时方式添加和删除团队成员,然后关闭在某个时候访问整个项目。对于这两种情况,所讨论的存储桶可能相同。

我假设类似的事情在 AWS 中是可能的,但我在 AWS 站点上所能找到(和理解)的所有内容都涉及使用 IAM 通过 AWS 控制台控制访问。我没有看到任何迹象表明我可以创建一个 IAM 用户,将他们添加到一个 IAM 组,授予该组对存储桶的只读访问权限,然后通过 PowerShell 中的 System.Net.WebClient 提供名称和密码以实际下载可用文件。我错过了什么,这是可能的吗?还是我认为这可以通过 AWS 完成的假设不正确?

我确实发现 谈到使用 CloudFront 来限制按域访问,但这在 WfH 场景中不起作用,因为这些家用计算机不在公司域中,但是公司 BIM 经理需要管理 WfH 员工对内容库的访问。我真的希望我没有 运行 成为 AWS 还没有为当前现实做好准备的例子。

存储在 Amazon S3 中的内容默认是私有的。可以通过多种方式授予访问权限:

  • 使用 存储桶策略 使每个人都可以公开访问整个存储桶(或其中的一个目录)。这对于任何人都可以阅读内容的网站来说非常有用。
  • IAM 用户分配权限 以仅向需要访问存储桶的用户或应用程序授予访问权限。这通常在您的组织 中使用。永远不要为组织外部的人创建 IAM 用户。
  • 创建 presigned URLs 以授予对私有对象的临时访问权限。这通常由应用程序用于授予对存储在 Amazon S3 中的内容的基于 Web 的访问权限。

为预签名 URL 提供示例,假设您有一个照片共享网站。用户提供的照片是私人的。流程将是:

  • 用户登录。应用程序根据数据库或身份验证服务确认他们的身份(例如使用 Google 登录)。
  • 当用户想要查看照片时,应用程序首先检查他们是否有权查看照片(例如,这是他们的照片)。如果他们有权查看照片,应用程序 会生成预签名的 URL 和 returns 作为 link,或嵌入 link 在 HTML 页面中(例如在 <img> 标签中)。
  • 当用户访问link时,浏览器向Amazon S3发送URL请求,Amazon S3对signedURL中的加密签名进行验证。如果正确且 link 尚未过期,则返回照片并显示在网络浏览器中。
  • 用户还可以与其他用户分享照片。当另一个用户访问照片时,应用程序会检查数据库以确认它已与用户共享。如果是这样,它会提供预签名 URL 来访问照片。

此架构让应用程序执行所有围绕访问权限的逻辑。它非常灵活,因为您可以编写任何您想要的规则,然后将用户发送到 Amazon S3 以获取文件。可以把它想象成在线购买剧院门票——您只需出示门票和门,就可以坐在座位上。这就是 Amazon S3 正在做的事情——它正在检查票证(已签名 URL),然后让您访问该文件。

参见:Amazon S3 pre-signed URLs

移动应用程序

另一种常见架构是使用 AWS 安全令牌服务 (STS) 生成临时凭证。这通常是通过移动应用程序完成的。流程是:

  • 用户登录移动应用程序。该应用程序将登录详细信息发送到后端应用程序,以验证用户的身份。
  • 后端应用程序然后使用 AWS STS 生成临时凭证并为凭证分配权限,例如允许访问 Amazon S3 存储桶中的特定目录。 (权限实际上可以用于 AWS 中的 任何东西,例如启动计算机或创建数据库。)
  • 后端应用将这些临时凭证发送回移动应用。
  • 然后移动应用程序使用这些凭据直接调用 Amazon S3 以访问文件。
  • Amazon S3 检查正在使用的凭据,如果它们对所请求的文件具有权限,则授予访问权限。这可以用于上传、下载、列表文件等。

该架构利用了移动应用程序非常强大的事实,它们可以直接与 AWS 服务(例如 Amazon S3)通信。授予的权限基于登录的用户。这些权限由您编写的后端应用程序确定。可以把它想象成一名临时雇员,他获得了当天的大楼通行证,但他们只能进入某些区域。

参见:IAM Role Archives - Jayendra's Blog

上述体系结构是构建块,用于您希望如何开发应用程序。每个应用程序都是不同的,就像您问题中的两个用例一样。您可以将 Amazon S3 安全地整合到您的应用程序中,同时保持对访问权限授予方式的完全控制。然后,您的应用程序可以专注于控制访问的业务逻辑,而不必实际提供内容(由 Amazon S3 负责)。这就像 无需 运行 剧院就可以卖票

你问Amazon S3是不是"ready for the current reality"。您每天在 AWS 上 运行 使用的许多热门网站,您可能从未意识到。

如果您愿意颁发 IAM 用户凭证(每个账户最多 5000 个),步骤为:

  • 为每个用户创建一个 IAM 用户 和 select 程序化访问
  • 这将提供您可以提供给每个用户的访问密钥和秘密密钥
  • 为每个 IAM 用户附加权限,或将用户放入 IAM 组并为 IAM 组附加权限
  • 每个用户可以 运行 aws configure 在他们的计算机上(使用 AWS Command-Line Interface (CLI) 来存储他们的访问密钥和秘密密钥
  • 然后他们可以使用 AWS CLI 来 upload/download 文件

如果您希望用户能够通过 Amazon S3 管理控制台访问,您将需要提供一些额外的权限:Grant a User Amazon S3 Console Access to Only a Certain Bucket

或者,用户可以使用像 CyberDuck 这样的程序来轻松拖放 Amazon S3 的界面。 Cyber​​duck 还会询问访问密钥和密钥。