对AWS S3存储桶的访问权限有限

时间:2020-05-21 11:39:30

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

我试图了解与Amazon S3有关的访问安全性。我想在S3存储桶中托管一些文件,使用CloudFront通过我的域访问它。我需要限制访问某些公司/个人。另外,我需要单独管理该访问权限。

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

我认为在AWS中可能会发生这种情况,但是我在AWS站点上能找到(并理解)的所有内容都涉及使用IAM通过AWS控制台控制访问。我没有看到任何迹象表明我可以创建一个IAM用户,将它们添加到IAM组,为该组提供对存储桶的只读访问权限,然后通过PowerShell中的System.Net.WebClient提供名称和密码以实际下载可用文件。我是否缺少某些东西,这有可能吗?还是我不认为可以使用AWS做到这一点?

我确实发现Amazon CloudFront vs. S3 --> restrict access by domain? - Stack Overflow谈论使用CloudFront限制域访问,但是在WfH方案中将不起作用,因为这些家用计算机不在公司域中,而是在公司BIM上经理需要管理WfH工作人员对内容库的访问。我真的希望我不会碰到一个AWS的例子,只是没有为当前的现实做好准备。

2 个答案:

答案 0 :(得分:1)

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

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

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

或者,用户可以使用CyberDuck之类的程序来轻松地拖放到Amazon S3的界面。 Cyber​​duck还将询问访问密钥和秘密密钥。

答案 1 :(得分:0)

默认情况下,存储在Amazon S3中的内容是私有的。可以授予访问权限的几种方法:

  • 使用存储桶策略,使所有人都可以公开访问整个存储桶(或其中的目录)。这对任何人都可以阅读内容的网站很有帮助。
  • IAM用户分配权限,以仅向需要访问存储桶的用户或应用授予访问权限。通常在组织内 中使用。切勿为组织外部的某人创建IAM用户。
  • 创建带预签名的URL 以授予对私有对象的临时访问权限。应用程序通常使用它来授予对存储在Amazon S3中的内容的基于Web的访问。

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

  • 用户登录。应用程序针对数据库或身份验证服务(例如,使用Google登录)确认其身份
  • 当用户想要查看照片时,应用程序首先检查他们是否有权查看照片(例如,是他们的照片)。如果他们有权查看照片,则应用程序生成预签名的URL 并将其作为链接返回,或将该链接嵌入HTML页面(例如,在<img>标签中) 。
  • 当用户访问链接时,浏览器将URL请求发送到Amazon S3,后者将验证签名URL中的加密签名。如果正确无误且链接尚未过期,则返回照片并将其显示在网络浏览器中。
  • 用户还可以与其他用户共享照片。当其他用户访问照片时,应用程序将检查数据库以确认该照片已与该用户共享。如果是这样,它将提供一个预签名的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是否“已为当前现实做好准备”。您每天使用的许多受欢迎的网站都在AWS上运行,您可能从未意识到。