Я пишу веб-приложение в go, и я использую amazon s3 для хранения всех пользовательских файлов, включая профили и текстовые и аудиофайлы.Обслуживающий контент с 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)
}
У меня нет большого опыта работы с АМС, так что я не уверен, что это даже хороший подход, но это работает. Это хороший способ сделать это для производственного сервера? Есть ли лучший, более надежный способ?
Но не разрешало бы, чтобы контент был загружен не прошедшими проверку пользователями, если URL-адрес был скомпрометирован, даже если он предназначен только для небольшой период времени? – Topo
Да, это возможно. Если вы придерживаетесь SSL, вы значительно ограничите риск. В любом случае, человек в середине атаки. – datasage
И каковы недостатки проксирования запросов через мой веб-сервис? Помимо очевидного использования большего количества ресурсов на сервере. – Topo