2016-03-29 7 views
11

मैं यह जानने के लिए संघर्ष कर रहा हूं कि मैं अपने कोड से अपनी aws_access_key_id और aws_secret_access_key गतिशील रूप से कैसे प्राप्त कर सकता हूं।Boto3: गतिशील रूप से प्रमाण पत्र प्राप्त करें?

boto2 में मैं निम्नलिखित कर सकता था: boto.config.get_value('Credentials', 'aws_secret_access_key') लेकिन मुझे boto3 में एक समान विधि नहीं मिल रही है। अगर मैं boto3.Session()._session._credentials में देखता हूं तो मैं चाबियाँ ढूंढने में सक्षम था लेकिन यह मेरे लिए सभी हैक की मां की तरह लगता है और मैं उस सड़क पर नहीं जाऊंगा।

+0

botocore आप स्पष्ट कर सकते हैं कि आप अपने कोड में साख के लिए सीधी पहुँच की आवश्यकता है? साथ ही, यह एक एपीआई परिवर्तन में राय या निराशा व्यक्त करने के लिए जगह नहीं है। एडब्ल्यूएस मंचों पर ले लो। –

+0

मुझे इसकी आवश्यकता है क्योंकि मैं S3 से Redshift तक डेटा कॉपी करता हूं और इसलिए मुझे 'aws_access_key_id' और' aws_secret_access_key' की आवश्यकता है। मुझे कोड लिखना नहीं होगा जो कॉन्फ़िगर/क्रेडेंशियल फाइलों में जाता है और जब बोटो पहले से ही करता है तो उन्हें ढूंढता है। –

+0

हाँ, एस 3 एक्सेस के लिए उन चाबियों को Redshift में गुजरना एक बड़ा दर्द है। काश वे हमें ऐसा करने की आवश्यकता से बचने के लिए रेडशिफ्ट को आईएएम भूमिका नियुक्त करने की अनुमति देंगे। मुझे चिंता होगी कि आपका समाधान एक आईएएम इंस्टेंस प्रोफाइल, या लैम्ब्डा फ़ंक्शन में ईसी 2 इंस्टेंस पर काम नहीं करेगा। –

उत्तर

12

यह आमतौर पर केवल use temporary credentials के लिए सबसे अच्छा अभ्यास है। आप STS.get_session_token के साथ अस्थायी प्रमाण-पत्र प्राप्त कर सकते हैं।

संपादित करें: this PR के रूप में, आप वर्तमान सत्र साख इतनी तरह उपयोग कर सकते हैं:

import boto3 

session = boto3.Session() 
credentials = session.get_credentials() 

# Credentials are refreshable, so accessing your access key/secret key 
# separately can lead to a race condition. Use this to get an actual matched 
# set. 
credentials = credentials.get_frozen_credentials() 
access_key = credentials.access_key 
secret_key = credentials.secret_key 

redshift = session.client('redshift') 
... 

मैं अभी भी अस्थायी क्रेडेंशियल्स का उपयोग की सिफारिश करेंगे कि वास्तव में क्या लाल विचलन आवश्यकताओं के scoped।

5

उपयोग

>>> import botocore.session 
>>> session = botocore.session.get_session() 

>>> session.get_credentials().access_key 
'AKIAABCDEF6RWSGI234Q' 

>>> session.get_credentials().secret_key 
'abcdefghijkl+123456789+qbcd' 

>>> session.get_config_variable('region') 
'us-east-1' 
संबंधित मुद्दे