我们在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并单击链接以从该身份验证的浏览器会话中查看或下载您的内容时,才能访问这些文件。