কীভাবে এস 3-তে ডেটা সঞ্চয় করবেন এবং রেল এপিআই / আইওএস ক্লায়েন্টের সাহায্যে ব্যবহারকারীকে নিরাপদ উপায়ে অ্যাক্সেসের অনুমতি দেবেন?


93

আমি রেল এবং এপিআই লিখতে নতুন। এস 3 স্টোরেজ সমাধানের জন্য আমার কিছু সহায়তা দরকার। এখানে আমার সমস্যা।

আমি একটি আইওএস অ্যাপের জন্য একটি এপিআই লিখছি যেখানে ব্যবহারকারীরা আইওএসে ফেসবুক এপিআই দিয়ে লগইন করে। সার্ভার আইওএস ব্যবহারকারীকে টোকেন ফেসবুকের বিপরীতে ব্যবহারকারীকে বৈধতা দেয় এবং একটি অস্থায়ী সেশন টোকেন জারি করে। এই বিন্দু থেকে ব্যবহারকারীর এস 3-তে সঞ্চিত সামগ্রী ডাউনলোড করতে হবে। এই সামগ্রীটি কেবল ব্যবহারকারী এবং তার বন্ধুদের একটি উপসেটের অন্তর্ভুক্ত belongs এই ব্যবহারকারী এস 3-তে আরও বেশি সামগ্রী যুক্ত করতে পারেন যা একই গোষ্ঠীর লোকেরা অ্যাক্সেস করতে পারে। আমার ধারণা এটি কোনও ফেসবুক গ্রুপে ফাইল সংযুক্ত করার অনুরূপ ...

কোনও ব্যবহারকারী এস 3 এর সাথে ইন্টারঅ্যাক্ট করতে পারে এমন 2 টি উপায় রয়েছে ... এটি সার্ভারে ছেড়ে দিন বা সার্ভারকে একটি অস্থায়ী এস 3 টোকেন (এখানে সম্ভাবনার বিষয়ে নিশ্চিত নয়) জারি করতে পারেন এবং ব্যবহারকারী সরাসরি লিখিত সামগ্রী ইউআরএলগুলিতে এস 3-তে পৌঁছে দিতে পারে। আমি এই প্রশ্নটি পদ্ধতির বিষয়ে কথা বলেছি, তবে এটি সত্যই তারিখযুক্ত (২ বছর আগে): আইফোন অ্যাপ এবং এস 3 থেকে ফটো আপলোড করার বিষয়ে স্থাপত্য এবং নকশার প্রশ্ন

সুতরাং প্রশ্নগুলি:

  • যখন কোনও অস্থায়ী টোকেন জারি করা হয় তখন কি কোনও ব্যবহারকারীকে এস 3-তে কেবলমাত্র কিছু সামগ্রী অ্যাক্সেস করার জন্য সীমাবদ্ধ করার কোনও উপায় আছে? কিভাবে আমি এটি করতে পারব? ধরুন ... 100,000 বা আরও বেশি ব্যবহারকারী বলুন।
  • আইওএস ডিভাইসটিকে এই সামগ্রীটি সরাসরি বাইরে টান দেওয়া কি ভাল ধারণা?
  • বা সার্ভারকে সমস্ত সামগ্রী পাস করার নিয়ন্ত্রণ করতে দেওয়া উচিত (এটি অবশ্যই সুরক্ষা সমাধান করে)? এর অর্থ কি সংযুক্ত ব্যবহারকারীদের হাতে দেওয়ার আগে আমাকে সমস্ত বিষয়বস্তু সার্ভারে ডাউনলোড করতে হবে?
  • আপনি যদি রেলগুলি জানেন ... আমি কি এই ধরণের সেটআপটি অর্জন করতে পেপার ক্লিপ এবং আউস-এসডিকে রত্ন ব্যবহার করতে পারি?

একাধিক প্রশ্নের জন্য ক্ষমা এবং আমি সমস্যার যে কোনও অন্তর্দৃষ্টি প্রশংসা করি। ধন্যবাদ :)


4
এই পাওয়া এবং আমি খুঁজছি অন্যদের জন্য মন্তব্য করবে docs.aws.amazon.com/AmazonS3/latest/dev/...
dibble

উত্তর:


113

অ্যাডস-এসডিকে রত্ন ব্যবহার করে , আপনি কল করে কোনও এস 3 অবজেক্টের জন্য অস্থায়ী স্বাক্ষরযুক্ত url পেতে পারেন url_for:

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 এর নির্দিষ্ট অবজেক্টগুলিতে অ্যাক্সেসের জন্য নির্দিষ্ট ক্লায়েন্টদের অনুমোদন এবং অনুমোদন দেওয়া দরকার।

আমাজন থেকে এপিআই ডক্স: https://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#REST স্বীকৃতি কুইরিস্ট্রিংআথ


4
@ এজদীকসেনের জন্য ধন্যবাদ আমি সমাধানটি ঠিকভাবে ব্যবহার করেছি (আমি আমার উত্তর দিয়ে প্রশ্নটি আপডেট করি নি)! সুতরাং আমার সমাধানটি ছিল জিইটি অনুরোধের জন্য অনুমোদিত URL গুলি করা s তবে, যখন কোনও ব্যবহারকারী সামগ্রীতে অবদান রাখে, তখন তিনি / বালতি / ব্যবহারকারী / * লেখার অ্যাক্সেসের অনুমতি দেওয়ার জন্য সংযুক্ত নীতিটি দিয়ে ফেডারেশনড আইএএম টোকেন (অস্থায়ী শংসাপত্রগুলির মেয়াদ শেষ হয়ে থাকে) ব্যবহার করে একটি নির্দিষ্ট / বালতি / ব্যবহারকারী / অবজেক্ট নাম স্থানে সংস্থান তৈরি করে। সুতরাং সিস্টেমের কোনও ব্যবহারকারী অন্য ব্যবহারকারীর সামগ্রীতে ক্ষতি করতে পারে না। ঠিক আছে কাজ মনে হচ্ছে। আপনার উত্তর প্রশংসা করুন।
দিনথ

4
আপনি যদি অ্যাডস
এসডকে

4
এটির কি ঝুঁকি নয় যে ব্যবহারকারী আমার অ্যাক্সেস কীটি দেখতে পাবে? গোপন কী (রূপান্তরিত)
ইউজার 2503775

4
@ ডেনিস পুরো বিষয়টি হ'ল ফাইলটি আপনার সার্ভারে আঘাত করতে হবে না। লিঙ্কটিতে আপনার AWS শংসাপত্রগুলি নেই। এতে থাকতে পারে ACCESS_KEY_ID(আমি আমার মাথার উপরের অংশটি মনে করি না) তবে এটি কোনও গোপনীয়তার উদ্দেশ্যে নয়।
ejdyksen

4
@ ইজডিকেন আপনি ঠিক বলেছেন, আমি কেবল যাচাই করেছিলাম যে ইউআরএলটিতে কেবল আছে AWS_ACCESS_KEY_ID। আমি প্রাথমিকভাবে ভেবেছিলাম AWS_SECRET_ACCESS_KEYসেটিও প্রদর্শিত হয়েছিল কিন্তু তা নয়।
ডেনিস

47

উপরের উত্তরগুলিতে নতুন অ্যাডস-এসডি কে-রিসোর্স সংস্করণ 2-র পরিবর্তে পুরানো অ্যাডস-এসডিকে-ভি 1 রত্ন ব্যবহার করা হয়েছে।

নতুন উপায়টি হ'ল:

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

যেখানে আপনার_জেক্ট_কি আপনার ফাইলের পথ to আপনার যদি এটি সন্ধান করার দরকার হয় তবে আপনি এমন কিছু ব্যবহার করতে পারেন:

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


4
expires_inসেকেন্ড আকারে ডেটা প্রত্যাশা করে, প্রথমে এটি রূপান্তর করতে নিশ্চিত হন।
ফ্রিলিবব

"আর্গুমেন্টইরির ​​(প্রত্যাশিত: মেয়াদ শেষ হবে_সেকেন্ড সেকেন্ড হতে হবে)"
নিকিতা ফেদ্যশেভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.