我正在编写一个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的经验,所以我不确定这是一个好方法,但它确实有效.对于生产服务器来说,这是一个很好的方法吗?有更好,更可靠的方式吗?
这种方法可以工作.但它依赖于通过您的客户端代理的请求.
建议的方法是使用签名的网址.这将创建一个URL,该URL在您指定的时间段内有效,允许最终用户直接从S3下载文件.
您的密钥未公开,因为网址仅包含签名.