33

现在的情况

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

我使用“。”的根文档启用了网站托管。放。

网站托管设置的屏幕截图

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

403 禁止

问题

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

4

4 回答 4

29

我发现了这个相关的问题:S3 静态网站中的目录列表

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

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

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

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

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

    • s3browser (PHP)
    • s3index斯卡拉。由于存在 Procfile,它可能很容易部署到 Heroku。不确定,因为我对 Scala 没有任何经验。
于 2013-06-05T10:35:35.737 回答
3

Filestash是完美的工具:

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

在此处输入图像描述

  1. 创建共享链接:

在此处输入图像描述

  1. 与世界分享

Filestash 也是开源的。(免责声明:我是作者)

于 2020-01-08T00:37:58.260 回答
2

我有同样的问题,我通过使用

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

您可以使用存储桶策略授予匿名用户对您的对象的完全读取权限。根据您是需要它们列出还是只执行 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 规则,以便在对象变得太受欢迎时关闭对它们的权限。

于 2013-06-07T03:36:06.653 回答