के साथ सार्वजनिक एस 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 त्रुटि प्राप्त कर सकता हूं।