猿问

安全地提供来自 S3 的内容

我正在用 go 编写一个 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 的经验,所以我不确定这是否是一种好方法,但它确实有效。对于生产服务器,这是一个很好的方法吗?有没有更好、更可靠的方法?


婷婷同学_
浏览 171回答 2
2回答

开满天机

这个方法可行。但它依赖于通过您的客户端代理的请求。推荐的方法是使用签名的 url。这将创建一个在您指定的时间段内有效的 url,允许最终用户直接从 S3 下载文件。您的密钥不会公开,因为 url 只包含一个签名。

开心每一天1111

这是一个很好的解决方案,原因如下:您使用 S3 的事实对客户端是透明的。换句话说,客户端不需要或应该知道您在后端使用 S3,除非有充分的理由。明天如果您想将数据从 S3 移动到其他数据存储,您只需要更改您的服务器代码。客户端不需要更新。AWS 凭证不会暴露给客户端,因此更加安全。
随时随地看视频慕课网APP

相关分类

Go
我要回答