当前位置:  开发笔记 > 编程语言 > 正文

安全地从S3提供内容

如何解决《安全地从S3提供内容》经验,为你挑选了1个好方法。

我正在编写一个Web应用程序,我正在使用amazon s3来存储所有用户文件,这包括配置文件图片以及文本和音频文件.

但是我很难理解安全地做这件事的正确方法.我想的是在确认请求来自可以访问所请求文件的经过身份验证的用户之后,只需使用aws go库获取文件并将其写入http请求.

像这样的东西:

import (
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
    "io"
)

func serveFile(file string, w http.ResponseWriter) {
    svc := s3.New(session.New(), aws.NewConfig().WithRegion(config.AWS.Region))

    params := &s3.GetObjectInput{
    Bucket: aws.String("Bucket name"),
    Key:    aws.String(file),
    }

    resp, err := svc.GetObject(params)
    n, err := io.Copy(w, resp.Body)

}

我没有太多使用AWS的经验,所以我不确定这是一个好方法,但它确实有效.对于生产服务器来说,这是一个很好的方法吗?有更好,更可靠的方式吗?



1> datasage..:

这种方法可以工作.但它依赖于通过您的客户端代理的请求.

建议的方法是使用签名的网址.这将创建一个URL,该URL在您指定的时间段内有效,允许最终用户直接从S3下载文件.

您的密钥未公开,因为网址仅包含签名.


到目前为止,在服务器上使用更多资源(和网络带宽)可能是最大的缺点.将文件从S3读入内存,跨多个并发客户端,对您的服务器产生不可忽视的影响.
不完全的.在本地,您的文件系统缓存可能会缓存定期访问的文件; 从S3中提取需要输出网络请求(添加延迟),处理,然后复制到ResponseWriter.我建议进行测试,但使用S3的签名URL几乎总是可行的.
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有