1

로컬로 업로드하지 않고 S3에 업로드 된 미디어 파일 (비디오 및 오디오)을 호스팅할지 여부를 생각하고 있습니다. 각 다운로드마다 사용자 권한을 확인해야합니다.Amazon S3가이 경우에 도움이됩니까?

get_file과 같은 동작이 있습니다. 먼저 사용자의 권한을 확인한 다음 S3에서 파일을 가져 와서 send_file을 사용하여 사용자에게 보냅니다.

def get_file 
    if @user.can_download(params[:file_id]) 
    # first, download the file from S3 and then send it to the user using send_file 
    end 
end 

그러나이 경우 서버는 S3에서 파일을 먼저 다운로드 한 다음 사용자에게 보냅니다 (불필요하게). 나는 S3의 유스 케이스가 Rails/HTTP 서버 스택을 우회하여 부하를 줄이는 것이라고 생각했다.

내가 잘못 생각하나요?

추신. 파일 업로드에 CarrierWave를 사용하고 있습니다. 그것이 맞는지 확실하지 않습니다.

답변

3

Amazon S3는 RESTful 인증 읽기 (real authenticated read)를 제공합니다.이 읽기는 기본적으로 보호되는 컨텐츠에 대해 시간 초과 가능한 URL입니다.

CarrierWave는이를 지원합니다.

config.s3_access_policy = :authenticated_read 

을 다음 model.file.url 자동으로 편안하고 URL을 생성합니다 : 간단하게 읽을 인증 할 S3 액세스 정책을 선언합니다.

+0

솔루션을 게시 해 주셔서 감사합니다. 당신은 대답을 표시 할 수 있습니다 :) – iwasrobbed

-1

일반적으로 페이지에 S3 URL을 포함시켜 클라이언트의 브라우저가 Amazon에서 직접 파일을 가져올 수 있습니다. 그러나 이것은 비보호 원시 URL을 노출합니다. 예상 할 수있는 것이 아닌 긴 해시를 사용하여 파일의 이름을 지정할 수 있으므로 적어도 추측 할 수는 없지만 URL이 노출되면 기본적으로 인터넷에 공개됩니다. 따라서 절대적으로 항상 파일에 대한 액세스 제어가 필요한 경우 현재 수행중인 것처럼 프록시를 사용해야합니다. 이 경우 파일을 로컬에 저장하는 것이 더 좋을 수도 있습니다.

관련 문제