मैं उसी उत्तर के साथ स्वीकृत उत्तर के रूप में उत्तर दे रहा हूं लेकिन छोटे (महत्वपूर्ण) अंतर के साथ और अधिक विवरण जोड़ रहा हूं।
नीचे विन्यास पर विचार करें:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:ListBucket"],
"Resource": ["arn:aws:s3:::<Bucket-Name>"]
},
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
}
]
}
नीति कार्यक्रम संबंधी अनुदान लिखने हटाने का उपयोग और दो भागों में विभाजित किया गया है: कार्रवाई बाल्टी स्तर पर अनुमतियाँ प्रदान करता है और अन्य कार्यों बाल्टी के अंदर की वस्तुओं पर अनुमति की आवश्यकता।
ListBucket
PutObject/DeleteObject
पहला संसाधन तत्व कार्रवाई के arn:aws:s3:::<Bucket-Name>
लिए निर्दिष्ट करता ListBucket
है ताकि एप्लिकेशन बाल्टी में सभी वस्तुओं को सूचीबद्ध कर सकें।
दूसरा संसाधन तत्व , और कार्यों के arn:aws:s3:::<Bucket-Name>/*
लिए निर्दिष्ट करता है ताकि एप्लिकेशन बाल्टी में किसी भी ऑब्जेक्ट को लिख या हटा सकें।PutObject
DeletObject
बाल्टी-स्तर और ऑब्जेक्ट-स्तरीय ठीक दाने वाली अनुमतियों को निर्दिष्ट करने के लिए सुरक्षा कारणों से दो अलग-अलग 'आरएनएस' में अलगाव महत्वपूर्ण है।
ध्यान दें कि यदि मैंने केवल GetObject
दूसरे ब्लॉक में निर्दिष्ट किया होता तो क्या होता, प्रोग्रामेटिक एक्सेस के मामलों में मुझे एक त्रुटि प्राप्त होती है जैसे:
Upload failed: <file-name> to <bucket-name>:<path-in-bucket> An error occurred (AccessDenied) when calling the PutObject operation: Access Denied
।
aws
एक उपयोगकर्ता के लिए कॉन्फ़िगर किया था और इसे किसी अन्य उपयोगकर्ता से क्रोनजोब-कॉल स्क्रिप्ट के अंदर उपयोग किया था, जिसका अर्थ है कि एक्सेस कुंजी और एक्सेस टोकन गलत / परेशान थे। मेरा समाधान सीधे मेरे bash स्क्रिप्ट फ़ाइल में क्रेडेंशियल्स (AWS_ACCESS_KEY_ID
औरAWS_SECRET_ACCESS_KEY
) को यहाँ वर्णित के रूप में रखना था ।