B33 S3 से कनेक्ट करते समय क्रेडेंशियल कैसे निर्दिष्ट करें?


104

इस तरह से S3 से जुड़ने पर boto पर मैं अपनी साख निर्दिष्ट करता था:

import boto
from boto.s3.connection import Key, S3Connection
S3 = S3Connection( settings.AWS_SERVER_PUBLIC_KEY, settings.AWS_SERVER_SECRET_KEY )

फिर मैं अपने कार्यों को करने के लिए S3 का उपयोग कर सकता हूं (मेरे मामले में एक बाल्टी से किसी वस्तु को हटाने के लिए)।

बोटो 3 के साथ मुझे मिले सभी उदाहरण ऐसे हैं:

import boto3
S3 = boto3.resource( 's3' )
S3.Object( bucket_name, key_name ).delete()

मैं अपनी साख को निर्दिष्ट नहीं कर सका और इस प्रकार सभी प्रयास InvalidAccessKeyIdत्रुटि के साथ विफल हो गए ।

मैं boto3 के साथ क्रेडेंशियल्स कैसे निर्दिष्ट कर सकता हूं?


यह उत्तर आपकी मदद कर सकता है: stackoverflow.com/a/36913771/2681632
Ilja Everilä

1
आधिकारिक दस्तावेज में "कॉन्फ़िगर क्रेडेंशियल्स" अनुभाग देखें: boto3.readthedocs.io/en/latest/guide/configuration.html
Mark B

जवाबों:


159

आप एक सत्र बना सकते हैं :

import boto3
session = boto3.Session(
    aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY,
    aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY,
)

फिर S3 संसाधन प्राप्त करने के लिए उस सत्र का उपयोग करें:

s3 = session.resource('s3')

24
काम करता है, मैं इसे जवाब के रूप में ले जाऊंगा। पृथ्वी पर वे इसे करने के लिए स्पष्ट तरीके के रूप में दस्तावेज क्यों नहीं करते हैं? !!
रॉबर्ट ब्रेक्स

3
जैसा कि ऊपर एक टिप्पणी में उल्लेख किया है, यह है में वास्तव में प्रलेखन
मूट

69

आप clientनीचे की तरह सीधे नए सत्र के साथ प्राप्त कर सकते हैं ।

 s3_client = boto3.client('s3', 
                      aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, 
                      aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY, 
                      region_name=REGION_NAME
                      )

9
यह s3 क्लाइंट पाने के लिए काम करता है , लेकिन ओपी इसके बजाय एक s3 संसाधन चाहता था ।
अलास्दैर

मैं @Aldair से सहमत हूं। डॉक्स क्लाइंट के साथ कुछ भी करने का तरीका नहीं दिखाता है, और न ही आप ऐसा करते हैं, इसलिए मैं नहीं देखता कि यह उत्तर कैसे प्रासंगिक है।
सेरिन

मैंने यह कोशिश की, लेकिन यह मुझे "क्रेडेंशियल्स का पता लगाने में असमर्थ" त्रुटि देता है..मैंने पहले यह परीक्षण करने के लिए ~ / .aws फ़ोल्डर को हटा दिया था क्योंकि मुझे पता है कि बोटो डिफ़ॉल्ट रूप से वहाँ
क्रेडिट्स के

6

यह पुराना है, लेकिन इसे यहां मेरे संदर्भ के लिए भी रखा गया है। boto3.resource बस डिफ़ॉल्ट सत्र को लागू कर रहा है, आप boto3.resource सत्र विवरण से गुजर सकते हैं।

Help on function resource in module boto3:

resource(*args, **kwargs)
    Create a resource service client by name using the default session.

    See :py:meth:`boto3.session.Session.resource`.

https://github.com/boto/boto3/blob/86392b5ca26da57ce6a776365a52d3cab8487d60/boto3/session.py#L265

आप देख सकते हैं कि यह केवल Boto3.Session के समान तर्क लेता है

import boto3
S3 = boto3.resource('s3', region_name='us-west-2', aws_access_key_id=settings.AWS_SERVER_PUBLIC_KEY, aws_secret_access_key=settings.AWS_SERVER_SECRET_KEY)
S3.Object( bucket_name, key_name ).delete()

5

मैं @ JustAGuy के उत्तर पर विस्तार करना चाहूंगा। मेरे द्वारा पसंद की जाने वाली विधि AWS CLIएक विन्यास फाइल बनाने के लिए उपयोग करना है । इसका कारण है, कॉन्फ़िगर फ़ाइल के साथ, CLIया फ़ोल्डर SDKमें क्रेडेंशियल्स के लिए स्वचालित रूप से दिखेगा ~/.aws। और अच्छी बात यह है किAWS CLI इसे अजगर में लिखा गया है।

यदि आपके पास पहले से नहीं है तो आप पीआईआई से क्ली प्राप्त कर सकते हैं। यहाँ टर्मिनल से क्लि सेट करने के चरण दिए गए हैं

$> pip install awscli  #can add user flag 
$> aws configure
AWS Access Key ID [****************ABCD]:[enter your key here]
AWS Secret Access Key [****************xyz]:[enter your secret key here]
Default region name [us-west-2]:[enter your region here]
Default output format [None]:

इसके बाद आप botoचाबियाँ निर्दिष्ट किए बिना (जब तक आप एक अलग क्रेडेंशियल्स का उपयोग नहीं करना चाहते) तक पहुंच सकते हैं और एपीआई में से कोई भी।


1

Boto3.resource () का उपयोग करते समय क्रेडेंशियल्स को संग्रहीत करने के कई तरीके हैं। मैं स्वयं AWS CLI विधि का उपयोग कर रहा हूं। यह पूरी तरह से काम करता है।

https://boto3.amazonaws.com/v1/documentation/api/latest/guide/configuration.html?fbclid=IwAR2LlrS4O2gYH6xAF4QDVIH2Q2tzfF_VZ6loM3XfXsPAOR4qA-pX_qAILys

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.