2012-03-11 6 views
6

अब, मुझे पता है कि मैं किसी को अपने वीडियो डाउनलोड करने और साझा करने से नहीं रोक सकता, हालांकि मैं इसे ऐसा करना पसंद करूंगा ताकि लोग पेस्ट लिंक को सीधे मेरी बाल्टी पर कॉपी न करें। इस प्रकार, क्या मेरे बाल्टी को केवल मेरे सर्वर/डोमेन से अनुरोध करने के लिए सुलभ बनाने का कोई तरीका है?अमेज़ॅन एस 3 वीडियो फाइल केवल मेरे डोमेन/सर्वर से सुलभ है?

यदि यह मदद करता है, तो मैं jwplayer का उपयोग कर रहा हूं जो एक एक्सएमएल प्लेलिस्ट से लोड होता है जिसमें सभी लिंक होते हैं। यह प्लेलिस्ट निश्चित रूप से कहीं से भी खोली जा सकती है और देखा जा सकता है और जहां मैं अपेक्षा करता हूं कि आसान कॉपी और पेस्ट आ जाए।

मैं यूआरएल मास्क नहीं करना चाहता क्योंकि इसका मतलब है कि मेरी बाल्टी हर किसी के लिए पठनीय है। वहाँ शायद कुछ संभावना है कि किसी ने मेरी बाल्टी का यूआरएल और फ़ाइलों के नाम खोजने के लिए और सब कुछ एक साथ कनेक्ट होगा ...

उत्तर

7

यह Using Bucket Policies द्वारा संभव है, जो अमेज़न S3 संसाधनों के लिए अधिकारों का उपयोग को परिभाषित करने की अनुमति देता है - वहाँ कार्यक्षमता को दर्शाता हुआ Example Cases for Amazon S3 Bucket Policies के एक जोड़े हैं, और ये आप लोगों के बीच सीमित करने से विशिष्ट आईपी पते तक पहुंच रूप में अच्छी तरह के लिए एक उदाहरण मिल जाएगा: किसी भी उपयोगकर्ता के

इस बयान को अनुमतियां किसी भी S3 कार्रवाई करने के लिए निर्दिष्ट बाल्टी में वस्तुओं पर । हालांकि, अनुरोध स्थिति में निर्दिष्ट आईपी पते की सीमा से उत्पन्न होना चाहिए।

आपके उपयोग के मामले की बारीकियों के आधार पर, इस के लिए एक बाल्टी नीति तो ऐसा दिखाई देगा:

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:*", 
      "Resource": "arn:aws:s3:::bucket/*", 
      "Condition" : { 
       "IpAddress" : { 
        "aws:SourceIp": "192.168.143.0/24" 
       }, 
       "NotIpAddress" : { 
        "aws:SourceIp": "192.168.143.188/32" 
       } 
      } 
     } 
    ] 
} 

मापदंडों IPAddress के लिए दिखाया गया aws:sourceIp मूल्य और NotIpAddressCIDR notation में व्यक्त किया है के रूप में, संबंधित लचीलापन सक्षम करने वांछित गुंजाइश लिखने के लिए। सिफारिश

अंत में, आप की जाँच करने के लिए चाहते हो सकता है AWS Policy Generator का चयन करें प्रकार S3 बाल्टी नीति और उपलब्ध क्रिया और स्थितियां अंत में आपके उपयोग के मामले के लिए अधिक लक्षित नीतियों की रचना करने का पता लगाने - Conditions के लिए दस्तावेज़ बताते हैं यह विस्तार से।

+0

धन्यवाद स्टीफन, बस, सोच एक आईपी पते की बजाय, मैं इसे एक डोमेन नाम से बना सकते हैं? बाहर निकलता है मुझे अपने साझा होस्टिंग के लिए एक अद्वितीय आईपी प्राप्त करने के लिए मासिक भुगतान करना पड़ता है ... – Matt

+0

@Ali: मुझे डर है कि यह इस तरह उपलब्ध नहीं है (वास्तव में एक स्पष्ट उपयोग केस होने के बावजूद); मैंने 'एवीएस: स्रोतआईपी' के लिए उपयोग में सीआईडीआर नोटेशन के साथ-साथ [एडब्लूएस पॉलिसी जेनरेटर] के माध्यम से उपलब्ध अन्य और शर्तों के बारे में मेरे उत्तर के समापन अनुच्छेदों को अद्यतन किया है (http://awspolicygen.s3.amazonaws.com/ policygen.html) - पूर्व आपको अपने प्रदाता का उपयोग कर रहे सभी आईपी पता ब्लॉक निर्दिष्ट करने की अनुमति दे सकता है (यदि दस्तावेज किया गया हो), इस प्रकार हॉट लिंकिंग सतह को पहले से ही कम कर देता है। चाहे यह व्यवहार्य है, निश्चित रूप से आपके उपयोग के मामले और पर्यावरण (यानी प्रदाता) पर निर्भर करता है। –

+0

डोमेन विशिष्ट अनुमतियों के लिए arulraj.net का उत्तर देखें। मुझे पता है कि यह दो साल बाद है, लेकिन मेरी खोज से यह टिप्पणी इसलिए मैंने सोचा कि मैं इसे अपडेट कर दूंगा। –

1

आप अपनी बाल्टी सुरक्षित रख सकते हैं, जो डिफ़ॉल्ट रूप से है। (जिसका अर्थ है कि आपके पास केवल वस्तुओं तक पहुंच है) फिर आप अपनी वेबसाइट से अमेज़ॅन एस 3 से फ़ाइलों का अनुरोध कर सकते हैं और इसे एक समय सीमा दे सकते हैं जिसके लिए उपयोगकर्ता इसे देख सकता है।

//set time so that users can see file for 1 minute. then it is protected again. 
$response = $s3->get_object_url(YOUR_A3_BUCKET, PATH/TO/FILE, '1 minutes'); 

यह स्वचालित रूप से आपको एक यूआरएल देगा जो इसके साथ जुड़े पैरामीटर है जो केवल 1 मिनट के लिए सुलभ है। आप इसे अपनी वेबसाइट के भीतर अपने स्रोत के रूप में उपयोग कर सकते हैं और फिर वे उस 1 मिनट के बाद ब्राउज़र में कॉपी और पेस्ट नहीं कर सके।

आप Amazon SDK for PHP

+0

क्या यह बाल्टी स्तर पर किया जा सकता है? जैसे एक्सएक्स के बाद समाप्त होने के लिए बाल्टी में सभी फ़ाइलों के लिए एक हस्ताक्षरित यूआरएल प्राप्त करें, बजाय रनटाइम पर प्रत्येक यूआरएल के लिए इसका अनुरोध करने की आवश्यकता है? –

6

पर इस बारे में और अधिक पढ़ सकते हैं आईपी पते में मदद मिलेगी अपने सर्वर अपने बाल्टी का उपयोग करने के लिए जा रहा है। लेकिन जेडब्लूप्लेयर क्लाइंट साइड से है। तो अनुरोध सीधे jwplayer (ब्राउज़र) से s3 bucket url तक जाता है, आपके सर्वर के माध्यम से नहीं। इस मामले में "रेफरर बाल्टी नीति" इस में आपकी सहायता करेगी।

{ 
"Version": "2008-10-17", 
"Statement": [ 
    { 
    "Sid": "1", 
    "Effect": "Deny", 
    "Principal": { 
     "AWS": "*" 
    }, 
    "Action": "s3:GetObject", 
    "Resource": "arn:aws:s3:::yourbucketname/*", 
    "Condition": { 
     "StringNotLike": { 
     "aws:Referer": [ 
      "http://yoursitename.com/*", 
      "http://*.yoursitename.com/*" 
     ] 
     } 
    } 
    } 
] 
} 

तो अब यह अनुरोध केवल आपकी साइट से आने पर ही अनुमति देगा।

+0

अगर कोई रेफरर हेडर सेट करके अनुरोध भेजता है तो मैं वह मामला आसानी से एक वीडियो डाउनलोड करूंगा। – shuboy2014

0

एक विशिष्ट HTTP संदर्भ

तक पहुंच को सीमित मान लीजिए आप फ़ोटो और वीडियो अपने अमेज़न S3 बाल्टी, examplebucket में संग्रहीत करने के लिए लिंक के साथ डोमेन नाम (www.example.com या example.com) के साथ एक वेबसाइट है। डिफ़ॉल्ट रूप से, सभी अमेज़ॅन एस 3 संसाधन निजी होते हैं, इसलिए संसाधनों का निर्माण करने वाले केवल एडब्ल्यूएस खाते ही उन्हें एक्सेस कर सकते हैं। अपनी वेबसाइट से इन ऑब्जेक्ट्स तक पढ़ने की पहुंच को अनुमति देने के लिए, आप एक बाल्टी पॉलिसी जोड़ सकते हैं जो एस 3: एओएस: रेफरर कुंजी का उपयोग करके एक शर्त के साथ GetObject अनुमति देता है, कि अनुरोध अनुरोध विशिष्ट वेबपृष्ठों से उत्पन्न होना चाहिए। निम्न नीति स्ट्रिंगलाइक स्थिति को aws: रेफरर स्थिति कुंजी के साथ निर्दिष्ट करती है।

http://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html