boto

2015-06-09 8 views
5

के साथ सार्वजनिक एस 3 बाल्टी से फ़ाइलों तक पहुंचने में असमर्थ मैंने हाल ही में एक नया एडब्लूएस खाता बनाया है (चलिए इसे "खाता ए" कहते हैं) और इस खाते में एक एस 3 बाल्टी बनाई है (चलो इसे "बकेटटा" कहते हैं), एक फ़ाइल foo अपलोड करना ।टेक्स्ट। advicefromtheinternet के बाद, मैं की स्थापना की है कि मैं क्या होने के लिए सबसे अनुमोदक बाल्टी नीति संभव है (यह किसी भी उपयोगकर्ता द्वारा उपयोग की किसी भी प्रकार की अनुमति चाहिए) का मानना ​​है: खाता एक के लिए एक IAM उपयोगकर्ता बनाने के बादboto

{ 
    "Version": "2012-10-17", 
    "Id": "PolicyABCDEF123456", 
    "Statement": [ 
    { 
     "Sid": "StmtABCDEF123456", 
     "Effect": "Allow", 
     "Principal": "*", 
     "Action": "s3:*", 
     "Resource": [ 
     "arn:aws:s3:::bucketa/*", 
     "arn:aws:s3:::bucketa" 
     ] 
    } 
    ] 
} 

(" पहचान & एक्सेस प्रबंधन -> उपयोगकर्ता -> नए उपयोगकर्ता बनाएं "और उपयोगकर्ता को" प्रत्येक उपयोगकर्ता के लिए एक्सेस कुंजी जेनरेट करें "के साथ बनाना और उस उपयोगकर्ता के क्रेडेंशियल को ~/.boto में संग्रहीत करना, बोटो एस 3 इंटरफ़ेस का उपयोग करके एक साधारण स्क्रिप्ट एक्सेस कर सकते हैं अपलोड की गई फ़ाइल foo.txt:

import boto 
conn = boto.connect_s3() 
b = conn.get_bucket("bucketa", validate=False) 
k = boto.s3.key.Key(b) 
k.key = "foo.txt" 
print len(k.get_contents_as_string()) 
# 9 

मैंने फिर एक नया एडब्लूएस खाता बनाया (चलिए इसे "खाता बी" कहते हैं), और उसी चरण का पालन किया, आईओएम क्रेडेंशियल्स को .boto फ़ाइल में संग्रहीत किया और उसी पायथन स्क्रिप्ट को चलाया।

Traceback (most recent call last): 
    File "access.py", line 7, in <module> 
    print len(k.get_contents_as_string()) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1775, in get_contents_as_string 
    response_headers=response_headers) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1643, in get_contents_to_file 
    response_headers=response_headers) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1475, in get_file 
    query_args=None) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 1507, in _get_file_internal 
    override_num_retries=override_num_retries) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 343, in open 
    override_num_retries=override_num_retries) 
    File "/usr3/josilber/.local/lib/python2.7/site-packages/boto/s3/key.py", line 291, in open_read 
    self.resp.reason, body) 
boto.exception.S3ResponseError: S3ResponseError: 403 Forbidden 
<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>7815726085F966F2</RequestId><HostId>EgFfldG4FoA5csuUVEKBq15gg3QQlQbPyqnyZjc2fp5DewlqDZ4F4HNjXYWQtBl5MUlSyLAOeKA=</HostId></Error> 

क्यों खाता बी इसकी बहुत अनुमोदक बाल्टी नीति के बावजूद bucketa उपयोग करने में सक्षम नहीं है: जब लाइन print len(k.get_contents_as_string()) क्रियान्वित हालांकि इस मामले में मैं एक 403 त्रुटि मिलती है? क्या अन्य एडब्ल्यूएस खातों द्वारा सार्वजनिक पहुंच को सक्षम करने के लिए मुझे अतिरिक्त अनुमतियां सेट करने की आवश्यकता है?

नोट: मैं पहले से ही एक ही बाल्टी नीति ("bucketa" दो पंक्तियों में "bucketb" से, के साथ खाता बी से एक S3 बाल्टी bucketb बनाकर अपराधी के रूप में खाता बी के .boto फ़ाइल में अमान्य क्रेडेंशियल्स की संभावना से इनकार किया है); इस मामले में मैं खाता बी के क्रेडेंशियल्स के साथ बाल्टीबेट तक पहुंच सकता हूं लेकिन बाल्टी ए के क्रेडेंशियल्स का उपयोग करते समय वही 403 त्रुटि प्राप्त कर सकता हूं।

उत्तर

4

आपके द्वारा दी गई नीति अज्ञात उपयोगकर्ताओं को बाल्टी तक पहुंचने की अनुमति देती है। हालांकि, आपके मामले में खाता बी अज्ञात उपयोगकर्ता नहीं है, यह एक प्रमाणीकृत एडब्ल्यूएस उपयोगकर्ता है और यदि आप चाहते हैं कि उस उपयोगकर्ता को पहुंच प्राप्त हो, तो आपको इसे नीति में स्पष्ट रूप से प्रदान करना होगा। या, आप बस इसे बेटो में गुमनाम रूप से एक्सेस कर सकते हैं:

conn = boto.connect_s3(anon=True) 

यह चाल चलाना चाहिए। यह शायद कहने के बिना चला जाता है लेकिन मैं उस नीति को छोड़ दूंगा, जैसा कि है। यह किसी को भी बाल्टी में कुछ भी डंप करने की अनुमति देगा।

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