aws s3 퍼블릭 엑세스 질문 있습니다.(django)

조회수 537회

django view에서 s3에 저장되어 있는 비디오 파일의 url에 대한 파일을 가져오려고 하는데 오류가 발생합니다.

https://abcdefgggg.cloudfront.net/media/vidoeimddmp4attach1knmtfile_fjVCefcc.mp4: Server returned 403 Forbidden (access denied)

비디오를 request.FILE로 받아서 form.save()를 하면 정상적으로 s3에 저장이 됩니다.

문제는 파일 변환을 위해 s3 url에 해당하는 파일을 불러올때 위 오류(403)가 발생합니다.

files = UploadURLmodel.objects.all()  # 모델에서 파일을 가져오고(s3에서 가져옴)
input_url_file = files.fileFromURL.url # 그 모델의 url

(
        ffmpeg
        # 파일 자체를 불러와 파일 변환을 하려 할때 파일을 불러오지 못함(403)
        .output(input_url_file, 'test.avi', format='avi')
        .run()
    )

혹시 뷰에서 s3에 직접 접근하기 위한 방법이 있을까요? 아니면 애초에 이 방법이 잘못된 방법이고 다른 방법이 있는것인지 궁금합니다.

  • cloudfront(cdn) 로 s3 접근하도록 하는 것이 추천하는 방법입니다. s3를 public 으로 열면 보안상에도 문제가 있고 성능에도 장점이 없습니다. 정영훈 2020.4.2 23:38
  • cloudfront 설정은 해두었는데 위의 질문처럼 django 뷰에서 직접 s3의 파일을 참조하려면 따로 보안 설정을 하거나 다른 라이브러리를 사용해야 하나요? poffsle 2020.4.2 23:45
  • policy 을 잘 살펴보세요. 그리고 django 뷰라고 해도 사용자는 html 에 js만 사용하게 됩니다. 즉 파일은 서버에서 접근하는 것이 아니라 사용자 브라우져에서 접근하는 겁니다. 정영훈 2020.4.2 23:54
  • 비디오 파일을 브라우저에서 받고 s3에 저장한 후에 s3에 저장된 비디오 파일을 다시 가져와 서버안에서 다른 형식으로 변환하려는 것이 제 생각 이었는데 혹시 이 생각이 너무 비효율적이거나 더 나은 방법이 있는지 궁금합니다 poffsle 2020.4.3 17:28
  • 비효율적이죠. 서버에서 바로 비디오 파일을 받아서 변환하는 것이 효율적이겠지요. 정영훈 2020.4.3 21:42
  • 감사합니다! poffsle 2020.4.5 16:28

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)