복붙노트

[RUBY-ON-RAILS] 어떻게 S3에 데이터를 저장하고 레일 API / 아이폰 OS 클라이언트와의 보안 방법으로 사용자 액세스를 허용하려면?

RUBY-ON-RAILS

어떻게 S3에 데이터를 저장하고 레일 API / 아이폰 OS 클라이언트와의 보안 방법으로 사용자 액세스를 허용하려면?

나는 레일 및 API를 작성하는 새로운입니다. 나는 S3 스토리지 솔루션에 약간의 도움이 필요합니다. 여기에 내 문제입니다.

나는 사용자가 iOS의 페이스 북 API로 로그인 아이폰 OS 응용 프로그램을위한 API를 쓰고 있어요. 서버는 아이폰 OS 사용자와 문제를 임시 세션 토큰에 대한 토큰 페이스 북 문제에 대해 사용자의 유효성을 검사합니다. 이 시점에서 사용자는 S3에 저장된 다운로드 콘텐츠를 필요로한다. 이 콘텐츠는 사용자와 그의 친구들의 부분 집합에 속한다. 이 사용자는 사람들이 같은 무리에 액세스 할 수 있습니다 S3에 더 많은 콘텐츠를 추가 할 수 있습니다. 나는 페이스 북 그룹에 파일을 첨부와 비슷한 것 같다 ...

사용자가 ... S3와 상호 작용하는 서버에 두거나 임시 S3 토큰을 발행하기 위해 서버를 얻을 수 (하지 않도록 여기 가능성의) 사용자가 S3에 직접 컨텐츠 URL을 최대 칠 수 있습니다 2 가지 방법이 있습니다. 나는 이야기하고 질문을 찾아 접근하지만, 정말 (2 년 전) 일자 : 아이폰 응용 프로그램 및 S3에서 업로드 사진에 대한 건축과 디자인 질문

질문 : 그럼

여러 질문에 대한 사과와 나는 문제에 어떤 통찰력을 주셔서 감사합니다. 감사 :)

해결법

  1. ==============================

    1.AWS-SDK 보석을 사용하여 url_for 호출하여 어떤 S3 객체에 대한 임시 서명 URL을 얻을 수 있습니다 :

    AWS-SDK 보석을 사용하여 url_for 호출하여 어떤 S3 객체에 대한 임시 서명 URL을 얻을 수 있습니다 :

    s3 = AWS::S3.new(
      :access_key_id => 1234,
      :secret_access_key => abcd
    )
    object = s3.buckets['bucket'].objects['path/to/object']
    object.url_for(:get, { :expires => 20.minutes.from_now, :secure => true }).to_s
    

    이 S3에서 해당 개체에 대해 당신에게 서명, 임시로 사용의 URL을 제공 할 것입니다. 그것은 (이 예에서는) 경기 시작 후 20 분 만료, 그것은 하나의 개체 만 좋다.

    당신이 객체는 클라이언트의 요구가 많이있는 경우에, 당신은 서명 URL을 많이 발행해야합니다.

    참고이 각 개체를 다운로드하기 위해 서버 요구 사항을 의미하지 않습니다, 그것은 단지 S3에 액세스 특정 객체 및 권한 부여 특정 클라이언트를 인증 할 필요가있다.

    아마존에서 API 문서 : https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth

  2. ==============================

    2.위의 답변은 새로운 AWS-SDK-자원 버전 2보다는 기존 AWS-SDK-V1 보석을 사용합니다.

    위의 답변은 새로운 AWS-SDK-자원 버전 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
    }
    

    이 정보는 최대 파고 놀랄만큼 어려웠다, 나는 거의 그냥 포기하고 오래된 보석을 사용했다.

    http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Object.html#presigned_url-instance_method

  3. from https://stackoverflow.com/questions/10811017/how-to-store-data-in-s3-and-allow-user-access-in-a-secure-way-with-rails-api-i by cc-by-sa and MIT license