2016-03-29 3 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

Не могли бы вы пояснить, почему необходим прямой доступ к учетным данным в коде? Кроме того, это не место для выражения мнений или разочарования в изменении API. Возьмите это на форумы AWS. –

+0

Мне это нужно, потому что я копирую данные из S3 в Redshift, поэтому мне нужны 'aws_access_key_id' и' aws_secret_access_key'. Я бы предпочел не писать код, который входит в файлы config/credential, и обнаруживать их, когда Boto уже делает это. –

+0

Да, передача этих ключей в Redshift для доступа S3 - главная боль. Мне жаль, что они не позволят нам назначить роль IAM для Redshift, чтобы избежать необходимости этого. Я был бы обеспокоен тем, что ваше решение не будет работать с экземпляром EC2 с использованием профиля экземпляра IAM или функции Lambda. –

ответ

12

Как правило, лучше всего использовать только use temporary credentials. Вы можете получить временные учетные данные с помощью STS.get_session_token.

EDIT: На 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') 
... 

Я бы еще рекомендовал использовать временные полномочия в области видимости именно то, что потребности красного смещения.

5

Использование botocore

>>> 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' 
Смежные вопросы