2011-05-04 34 views
14

मैं निम्नलिखित बाल्टी नीति मेरी बाल्टी पर निर्धारित किया है के माध्यम से उत्पन्न कर रहे हैं:अमेज़न S3 बाल्टी नीति - संदर्भित द्वारा एक्सेस को प्रतिबंधित करने, लेकिन सीमित नहीं है, तो यूआरएल क्वेरी स्ट्रिंग प्रमाणीकरण

{ 

"Version": "2008-10-17", 

"Id": "My access policy", 

"Statement": [ 

    { 

"Sid": "Allow only requests from our site", 

"Effect": "Allow", 

"Principal": { "AWS": "*"}, 

"Action": "s3:GetObject", 

"Resource": "arn:aws:s3:::my_bucket/*", 

"Condition": { 

    "StringLike": { 

     "aws:Referer": [" http://mydomain.com/*"," http://www.mydomain.com/*"] 

     } 

       } 

}, 

{ 

    "Sid": "Dont allow direct acces to files when no referer is present", 

    "Effect": "Deny", 

    "Principal": {"AWS": "*" }, 

    "Action": "s3:GetObject", 

    "Resource": "arn:aws:s3:::my_bucket/*", 

    "Condition": { 

    "Null": {"aws:Referer": true } 

     } 

     } 

] 

    } 

मैं भी query string authentication कॉन्फ़िगर किया गया है, लेकिन यह की तरह लग रहा मेरे पास दोनों नहीं हो सकते हैं। अगर मेरे पास मेरी बाल्टी नीतियां किसी भी अनुरोध को अस्वीकार करने के लिए सेट की गई हैं जो कि माइडोमेन से उत्पन्न नहीं होती है, तो क्वेरी स्ट्रिंग प्रमाणीकरण का उपयोग करके मेरा अस्थायी यूआरएल भी नहीं दिया जाएगा। तो मेरा सवाल है, मैं दोनों कैसे हो सकता है? क्या यूआरएल पैरामीटर की जांच करने का कोई तरीका है और देखें कि क्या इसमें "हस्ताक्षर" नामक पैरामीटर है और उस मामले में रेफरर पॉलिसी लागू नहीं है?

उत्तर

18

रेफरर्स स्ट्रिंग "http://mydomain.com/ *" में जगह को हटाएं जो गलत है ... अमेज़ॅन के उदाहरणों ने भी गलती की।

दूसरा बयान के लिए इसे हल करने आसान तरीका है कि पूरे बयान को हटाने और अपनी फ़ाइलें अनुमतियाँ (एसीएल) निजी (स्वामी-पढ़ें/लिखें और विश्व NoRead/NoWrite)

मैं कर रहा हूँ करने के लिए सेट है निश्चित नहीं है, लेकिन ऐसा प्रतीत होता है कि भले ही आपके पास एक अस्वीकार स्टेटमेंट है, फिर भी यदि फ़ाइल की सार्वजनिक अनुमति है (विश्व पढ़ें) तो फ़ाइल अभी भी पढ़ी जा सकती है।

इसके अलावा, यदि आप क्लाउडफ्रंट पर फ़ाइलों को वितरित कर रहे हैं तो भी इसे बाल्टी को पढ़ने की अनुमति दें। तो एक पूरी बाल्टी नीति देखो की तरह होगा:

{ 
"Version": "2008-10-17", 
"Id": "YourNetwork", 
"Statement": [ 
    { 
     "Sid": "Allow get requests to specific referrers", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::yourbucket/*", 
     "Condition": { 
      "StringLike": { 
       "aws:Referer": [ 
        "http://www.yourwebsite.com/*", 
        "http://yourwebsite.com/*" 
       ] 
      } 
     } 
    }, 
    { 
     "Sid": "Allow CloudFront get requests", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::12345678:root" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::yourbucket/*" 
    } 
] 
} 

(डैश के बिना आपके AWS खाते आईडी नंबर के लिए 12345678 बदल)

+0

जवाब के लिए धन्यवाद। यह जानकारी बाद में काम में आ जाएगी। अभी के लिए मैं अलग-अलग उद्देश्यों के लिए विभिन्न समाप्ति समय के साथ हस्ताक्षरित लिंक का उपयोग करता हूं। – blushrt