在EC2服务器上提供S3服务



我们在S3上有一堆静态资产,我们想要安全地服务。

由于我们不能使用自定义域名和SSL证书,并且希望与我们现有的认证解决方案集成,我们想尝试通过EC2上的真实web服务器提供S3内容。

我发现了这个:http://www.cyberkan.com/how-to-mount-s3-over-ec2-linux/,它显示了如何将S3作为卷挂载。

有人尝试过在EC2上通过Apache或nginx的s3fs服务S3桶吗?就性能和可靠性而言,这是一个可行的策略吗?

我的经历是复杂的。S3不是块设备。许多应用程序访问文件系统时都假定它是块设备。当您试图访问s3fs挂载上的文件时,结果可能是不可预测的。

S3确实有SSL支持,你只需要使用他们的域。您可以通过签名url提供对私有文件的访问。在一段时间内对用户有效

您可以通过将内容保留在S3上来保护内容,然后在S3上编辑Bucket Policy以仅允许用户在单击服务器上的链接时访问您的内容。例如,如果您的内容管理系统(我假设它实现了某种形式的身份验证)位于www.example.com,那么在S3中,转到您的桶的"属性"并在"权限"区域单击"添加桶策略"。

例如,您可以使用以下代码限制对特定HTTP引用者的访问:
{
  "Version":"2008-10-17",
  "Id":"http referer policy example",
  "Statement":[
    {
      "Sid":"Allow get requests originated from www.example.com and example.com",
      "Effect":"Allow",
      "Principal":"*",
      "Action":"s3:GetObject",
      "Resource":"arn:aws:s3:::examplebucket/*",
      "Condition":{
        "StringLike":{
          "aws:Referer":[
            "http://www.example.com/*",
            "http://example.com/*"
          ]
        }
      }
    }
  ]
}
注意:这个例子来自S3文档

我已经成功地使用了这个方法。即使有人查看页面源并试图直接访问S3存储桶源,他们也会得到"拒绝访问"。只有当他们通过身份验证到www.example.com并单击链接以从该身份验证的浏览器会话中查看或下载您的内容时,才能访问这些文件。

最新更新