2013-04-17 8 views
7

हमारे पास बड़ी संख्या में फाइलों के साथ अमेज़ॅन एस 3 पर एक बाल्टी में एक झाड़ी का पेड़ है। मैंने अभी पाया है कि कुछ फ़ाइलों में दो अनुमति प्रविष्टियां हैं, जैसा कि देखा गया है कि कोई एडब्ल्यूएस प्रबंधन कंसोल में किसी फ़ाइल पर क्लिक करता है, फिर गुण -> अनुमतियां, एक पंक्ति "हर कोई" और अन्य कुछ विशिष्ट उपयोगकर्ता, अन्य फाइलों में केवल एक है उस उपयोगकर्ता के लिए प्रवेश। नतीजों के रूप में, हमें उन फ़ाइलों को बोटो या कर्ल का उपयोग करके अमेज़ॅन ईसी 2 उदाहरणों में डाउनलोड करने में समस्याएं आ रही हैं।मैं प्रोग्राम के रूप में अमेज़ॅन एस 3 अनुमतियों को बोटो के साथ कैसे देख सकता हूं?

मुझे क्या करना है बाल्टी में सभी फ़ाइलों पर जाना और उनका निरीक्षण करना है। मुझे पता है कि उपसर्ग के लिए कुंजी की पूरी सूची कैसे प्राप्त करें। क्या मैं एक कुंजी के लिए अनुमतियों को निकालने के लिए बोटो का उपयोग कर सकता हूं, और क्या परीक्षण की एक मानक तरीका है यदि उन अनुमतियां सभी के लिए हैं या किसी विशिष्ट हैं, और वे क्या हैं?

इसके अलावा, एक बार जब मैं निर्धारित करता हूं कि किसी कुंजी पर प्रतिबंधक अनुमतियां हैं, तो क्या मैं प्रोग्रामिंग रूप से उन्हें "हर किसी" को पढ़ने की अनुमति जोड़कर बदल सकता हूं?

Thx

उत्तर

11

यहाँ कुछ पायथन कोड, Boto का उपयोग कर, एक बाल्टी में चाबियाँ पूरी तरह देखने होता है कि है। कुंजी कुंजी की सामग्री पढ़ने की "प्रत्येक" की अनुमति नहीं है, तो यह है कि कुंजी को public-read अनुमतियाँ जोड़ देगा:

import boto 

all_users = 'http://acs.amazonaws.com/groups/global/AllUsers' 
conn = boto.connect_s3() 
bucket = conn.get_bucket('mybucket') 

for key in bucket: 
    readable = False 
    acl = key.get_acl() 
    for grant in acl.acl.grants: 
     if grant.permission == 'READ': 
      if grant.uri == all_users: 
       readable = True 
    if not readable: 
     key.make_public() 

इस कोड को अच्छी तरह से परीक्षण नहीं किया गया है तो आप चीजों को बाहर पहली कोशिश करनी चाहिए। साथ ही, स्पष्ट हो जाएं कि इसका शुद्ध परिणाम सभी वस्तुओं को किसी भी द्वारा पठनीय बाल्टी में बनाना है। यह भी ध्यान रखें कि यह स्क्रिप्ट बाल्टी में प्रत्येक ऑब्जेक्ट का वर्तमान एसीएल ला रही है, इसलिए यदि लाखों ऑब्जेक्ट्स हैं, तो लाखों अनुरोध हैं जो बहुत समय ले सकते हैं और इसके साथ कुछ लागत जुड़ी है।

एक और दृष्टिकोण बाल्टी में प्रत्येक कुंजी पर make_public() पर कॉल करना होगा, चाहे वह वर्तमान एसीएल हो।

+1

मेरे पास मेरी बाल्टी में कई वस्तुएं हैं, इसलिए मैं इस प्रक्रिया को बहुप्रचारित बनाना चाहता था। अगर कोई और इसे उपयोगी पाता है तो मेरा कोड यहां दिया गया है: http://www.pixelchef.net/working-amazon-s3-using-boto-multithreaded-edition – northben

+0

क्या आपके पास boto3 के लिए एक समान समाधान है? –

संबंधित मुद्दे