隐藏S3下载源

问题描述

我正在将invisioncommunity论坛软件与下载应用程序一起使用。 我通过Amazon S3为访客提供下载。

下载文件时,下载源链接到我的S3存储桶(https://s3.eu-central-1.amazonaws.com/my.bucket.net/file),我不想要那样。 我希望它看起来像:https://my.bucket.net/file

我可以使用签名的URL还是仅隐藏下载源?还是最好的选择是什么?

此外,当我在浏览器中导航到存储桶URL(未登录S3)时,我看到一个XML列表,其中列出了存储桶中列出的所有文件。我可以藏起来吗?

我在Google上发现了很多内容(创建CNAME等),但似乎没有任何效果

解决方法

为此,您可以使用CloudFront distribution,它实际上将允许您通过DNS配置使用custom name

这仍将返回x-amz标头,因此,如果要删除标头,则需要向CloudFront发行版中添加Lambda@Edge。如果您对此方法感兴趣,请参考以下example functions

此外,如果客户在地理位置上与您的S3存储桶AWS区域相距较远,则他们将从延迟减少中受益。

关于选项(文件列表),它来自ListObjects权限,请确保唯一的公共权限是GetObject

为此,建议使用以下存储桶策略。

{
  "Version":"2012-10-17","Statement":[
    {
      "Sid":"PublicRead","Effect":"Allow","Principal": "*","Action":["s3:GetObject"],"Resource":["arn:aws:s3:::awsexamplebucket1/*"]
    }
  ]
}