[ruby-on-rails] S3에 데이터를 저장하고 레일 API / iOS 클라이언트로 안전한 방법으로 사용자 액세스를 허용하는 방법은 무엇입니까?


Answers

위의 답변은 새로운 aws-sdk-resources 버전 2가 아닌 이전 aws-sdk-v1 보석을 사용합니다.

새로운 방법은 다음과 같습니다.

aws_resource = Aws::S3::Resource::new
aws_resource.bucket('your_bucket').object('your_object_key').presigned_url(:get, expires_in: 1*20.minutes)

여기서 your_object_key는 파일의 경로입니다. 당신이 그것을 볼 필요가있는 경우에, 당신은 무언가 같이 사용할 것입니다 :

s3 = Aws::S3::Client::new
keys = []
s3.list_objects(bucket: 'your_bucket', prefix: 'your_path').contents.each { |e| 
  keys << e.key
}

그 정보는 놀라 울 정도로 파기가 어려웠고, 나는 거의 그냥 포기하고 오래된 보석을 사용했습니다.

참고

docs.aws.amazon.com/sdkforruby/api/Aws/S3/…

Question

필자는 Rails와 API를 처음 사용했습니다. S3 스토리지 솔루션에 대한 도움이 필요합니다. 여기 내 문제가있다.

사용자가 iOS에서 Facebook API를 사용하여 로그인하는 iOS 앱용 API를 작성 중입니다. 서버는 iOS 사용자에게 Facebook Facebook 토큰 문제에 대해 사용자의 유효성을 검사하고 임시 Session 토큰을 발급합니다. 이 시점에서 사용자는 S3에 저장된 콘텐츠를 다운로드해야합니다. 이 콘텐츠는 사용자와 친구들의 하위 집합에만 속합니다. 이 사용자는 같은 사람들이 액세스 할 수있는 더 많은 콘텐츠를 S3에 추가 할 수 있습니다. 나는 페이스 북 그룹에 파일을 첨부하는 것과 비슷하다고 생각한다.

사용자가 S3와 상호 작용할 수있는 두 가지 방법이 있습니다. 서버에 남겨 두거나 서버에 임시 S3 토큰을 발행하게하고 (여기에는 가능성이 없음) 사용자가 콘텐츠 URL을 S3에 직접 올릴 수 있습니다. 이 질문은 접근법에 대해 이야기했지만, 실제로는 2 년 전입니다. iPhone app 및 S3에서 사진을 업로드하는 것에 대한 건축 및 디자인 질문

그래서 질문 :

  • 임시 토큰이 발행 될 때 S3의 일부 콘텐츠에만 액세스하도록 사용자를 제한하는 방법이 있습니까? 어떻게해야합니까? 10 만 명 이상의 사용자가 있다고 가정 해보십시오.
  • iOS 기기에서이 콘텐츠를 직접 가져 오는 것이 좋은 생각입니까?
  • 또는 서버가 모든 컨텐트 전달을 제어하도록해야합니다 (물론 보안을 해결합니다)? 즉, 연결된 사용자에게 콘텐츠를 전달하기 전에 모든 콘텐츠를 서버에 다운로드해야합니까?
  • 레일을 아는 경우 ... 클립 및 aws-sdk 보석을 사용하여 이런 종류의 설치를 할 수 있습니까?

여러 가지 질문에 사과하고이 문제에 대한 통찰력을 주셔서 감사합니다. 감사 :)




Links