【问题标题】:Access files stored on Amazon S3 through web browser通过 Web 浏览器访问存储在 Amazon S3 上的文件
【发布时间】:2013-05-22 22:51:13
【问题描述】:

现状

我在 GitHub 上有一个项目,该项目在每次提交 Travis-CI 后构建。每次成功构建后,Travis 都会将工件上传到 S3 存储桶。有什么方法可以让任何人轻松访问存储桶中的文件吗?我知道我可以生成一个只读访问密钥,但用户通过他们的网络浏览器访问文件会更容易。

我已使用“。”的根文档启用网站托管。设置。

但是,我在尝试访问存储桶的端点时仍然收到 403 Forbidden。

问题

如何让用户从他们的 Web 浏览器轻松浏览和下载存储在 Amazon S3 上的工件?最好没有第三方客户端。

【问题讨论】:

  • 上传的文件是否设置了x-amz-acl: public-read标头?
  • 原则上,您甚至不需要启用网站托管来通过 HTTP 访问文件。如果您设置公开阅读,则默认情况下是这样。 “网站托管”唯一添加的是一些便利,例如指定索引文档和错误文档以及让您的存储桶名称成为存储桶的主机名的能力(以丢失 HTTPS 为代价)。
  • 简而言之,如果您在文件上设置x-amz-acl: public-read,那么您可以将其作为https://s3.amazonaws.com/bucket-name/path-to-file 访问。无需启用网站托管,除非您想要漂亮的主机名并支持索引和错误文档。
  • @MerynStol 我正在寻找一种解决方案,用户可以转到https://s3.amazonaws.com/bucket-name/ 并浏览存储桶中的所有文件(或类似文件)。
  • 1.使用 s3.amazonaws.com 主机名,我认为根本不支持“索引文件”。 2.如果您使用“网站托管”选项,我认为您必须自己创建所有索引文件。我认为除了在管理控制台上之外,没有任何功能可以在目录中提供文件“列表”。

标签: amazon-s3


【解决方案1】:

我发现了这个相关的问题:Directory Listing in S3 Static Website

事实证明,如果您为整个存储桶启用公共读取,S3 可以提供目录列表。问题是它们是 XML 而不是 HTML,所以不是很友好。

您可以通过三种方式生成列表:

  • 为您自己计算机上的每个目录生成 index.html 文件,将它们上传到 s3,并在您将新文件添加到目录时更新它们。技术含量很低。由于您说您是直接从 Travis 上传构建文件,因此这可能不太实用,因为它需要在那里做额外的工作。

  • 使用客户端 S3 浏览器工具。

  • 使用服务器端浏览器工具。

    • s3browser (PHP)
    • s3index斯卡拉。由于存在 Procfile,它可能很容易部署到 Heroku。不确定,因为我对 Scala 没有任何经验。

【讨论】:

    【解决方案2】:

    Filestash 是完美的工具:

    1. https://www.filestash.app/s3-browser.html 登录到您的存储桶:

    1. 创建共享链接:

    1. 与全世界分享

    Filestash 也是open source。 (免责声明:我是作者)

    【讨论】:

    • Filestash 看起来棒极了!
    • P.S.在 Stack Overflow 上,公开您与您推荐的项目/工具的联系被认为是一种很好的礼仪。 (看起来你是创造者 - 太好了!)
    • 有人想过这里的安全漏洞吗?你好???有人为您提供了一个网页,您可以在其中输入您(或最糟糕的是您的公司)凭据??!!
    • @Eli Golin:整个项目都是开源的。如果您有实际的安全问题要报告,我邀请您使用安全研究人员使用的标准知名端点进行负责任的披露。到目前为止,我还没有从你那里得到任何东西。
    • 据我所知,Filestash 不会让您匿名访问可公开访问的存储桶。
    【解决方案3】:

    我遇到了同样的问题,我用

    1. 新的上下文菜单“公开”。
    2. 转到https://console.aws.amazon.com/s3/home
    3. 选择存储桶,然后为每个文件夹或文件(或多选)右键单击并
    4. “公开”

    【讨论】:

      【解决方案4】:

      您可以使用存储桶策略授予匿名用户对您的对象的完全读取权限。根据您是需要它们列出还是只执行 GET,您需要对此进行调整。 (即列出存储桶内容的权限将操作设置为“s3:ListBucket”)。

      http://docs.aws.amazon.com/AmazonS3/latest/dev/AccessPolicyLanguage_UseCases_s3_a.html

      您的政策将如下所示。您可以使用http://aws.amazon.com/console 的 S3 控制台上传。

       {
        "Version":"2008-10-17",
        "Statement":[{
          "Sid":"AddPerm",
            "Effect":"Allow",
            "Principal": {
                  "AWS": "*"
               },
            "Action":["s3:GetObject"],
            "Resource":["arn:aws:s3:::bucket/*"
            ]
          }
        ]
      }
      

      如果您真正向世界开放您的对象,则需要考虑在您的账单上设置 CloudWatch 规则,以便在对象变得太受欢迎时关闭对它们的权限。

      【讨论】:

      • Zach 说需要在网络浏览器中列出文件!
      猜你喜欢
      • 2019-06-19
      • 2013-04-06
      • 2023-03-23
      • 1970-01-01
      • 2021-09-12
      • 2017-05-02
      • 1970-01-01
      • 2022-01-06
      • 2021-06-10
      相关资源
      最近更新 更多