ruby on rails - एस 3 में डेटा कैसे स्टोर करें और रेलवे एपीआई/आईओएस क्लाइंट के साथ सुरक्षित तरीके से उपयोगकर्ता पहुंच की अनुमति दें?




ruby-on-rails api (2)

उपरोक्त उत्तरों पुराने aws-sdk-v1 मणि का उपयोग नए aws-sdk-resource संस्करण 2 के बजाय करते हैं।

नया तरीका है:

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/…

मैं रेल और एपीआई लिखने के लिए नया हूं। मुझे एस 3 स्टोरेज समाधान के साथ कुछ मदद की ज़रूरत है। मेरी समस्या यहाँ है।

मैं एक आईओएस ऐप के लिए एक एपीआई लिख रहा हूं जहां उपयोगकर्ता आईओएस पर फेसबुक एपीआई के साथ लॉगिन करते हैं। सर्वर आईओएस उपयोगकर्ता को टोकन फेसबुक मुद्दों के खिलाफ उपयोगकर्ता को मान्य करता है और एक अस्थायी सत्र टोकन जारी करता है। इस बिंदु से उपयोगकर्ता को S3 में संग्रहीत सामग्री डाउनलोड करने की आवश्यकता है। यह सामग्री केवल उपयोगकर्ता और उसके दोस्तों का सबसेट से संबंधित है। यह उपयोगकर्ता एस 3 में अधिक सामग्री जोड़ सकता है जिसे लोगों के समान समूह द्वारा एक्सेस किया जा सकता है। मुझे लगता है कि यह एक फेसबुक समूह को फाइल संलग्न करने के समान है ...

उपयोगकर्ता 2 एस के साथ बातचीत कर सकते हैं 2 तरीके हैं ... इसे सर्वर पर छोड़ दें या सर्वर को अस्थायी S3 टोकन जारी करने के लिए प्राप्त करें (यहां संभावनाओं के बारे में सुनिश्चित नहीं है) और उपयोगकर्ता सामग्री URL पर सीधे S3 पर हिट कर सकता है। मैंने यह प्रश्न दृष्टिकोण के बारे में बात करते हुए पाया, हालांकि, यह वास्तव में दिनांकित है (2 साल पहले): आईफोन ऐप और एस 3 से फोटो अपलोड करने के बारे में वास्तुकला और डिजाइन सवाल

तो सवाल:

  • क्या अस्थायी टोकन जारी होने पर उपयोगकर्ता को S3 पर केवल कुछ सामग्री तक पहुंचने के लिए सीमित करने का कोई तरीका है? मैं यह कैसे कर सकता हूँ? मान लीजिए ... 100,000 या अधिक उपयोगकर्ता कहें।
  • क्या आईओएस डिवाइस को इस सामग्री को सीधे खींचने देना अच्छा विचार है?
  • या सर्वर को सभी सामग्री को पारित करने देना चाहिए (यह निश्चित रूप से सुरक्षा हल करता है)? क्या इसका मतलब है कि मुझे कनेक्ट किए गए उपयोगकर्ताओं को इसे सौंपने से पहले सर्वर पर सभी सामग्री को डाउनलोड करना होगा?
  • यदि आप रेल जानते हैं ... क्या मैं इस तरह के सेटअप को प्राप्त करने के लिए पेपरक्लिप और aws-sdk रत्न का उपयोग कर सकता हूं?

कई प्रश्नों के लिए माफ़ी और मैं समस्या में किसी भी अंतर्दृष्टि की सराहना करता हूं। धन्यवाद :)


Aws-sdk मणि का उपयोग करके, आप url_for को कॉल करके किसी भी S3 ऑब्जेक्ट के लिए अस्थायी हस्ताक्षरित यूआरएल प्राप्त कर सकते हैं:

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 मिनट (इस उदाहरण में) के बाद समाप्त हो जाता है, और यह केवल एक वस्तु के लिए अच्छा है।

यदि आपके पास क्लाइंट की बहुत सारी चीज़ें हैं, तो आपको बहुत से हस्ताक्षरित यूआरएल जारी करने होंगे।

या सर्वर को सभी सामग्री को पारित करने देना चाहिए (यह निश्चित रूप से सुरक्षा हल करता है)? क्या इसका मतलब है कि मुझे कनेक्ट किए गए उपयोगकर्ताओं को इसे सौंपने से पहले सर्वर पर सभी सामग्री को डाउनलोड करना होगा?

ध्यान दें कि इसका मतलब यह नहीं है कि सर्वर को प्रत्येक ऑब्जेक्ट को डाउनलोड करने की आवश्यकता है, इसे केवल विशिष्ट क्लाइंट को प्रमाणीकृत करने और एस 3 में विशिष्ट ऑब्जेक्ट्स तक पहुंचने के लिए अधिकृत करने की आवश्यकता है।

अमेज़ॅन से एपीआई दस्तावेज़: http://docs.amazonwebservices.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth





client-server