Boto3: получать учетные данные динамически?

Я изо всех сил пытаюсь выяснить, как я могу получить свои aws_access_key_id и aws_secret_access_key динамически из моего кода.

В boto2 я мог бы сделать следующее: boto.config.get_value('Credentials', 'aws_secret_access_key'), но я не могу найти аналогичный метод в boto3. Мне удалось найти ключи, если я смотрю в boto3.Session()._session._credentials, но это кажется матерью всех хаков для меня, и я бы предпочел не идти по этой дороге.

Ответ 1

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

EDIT: с этот 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')
...

Я бы порекомендовал использовать временные учетные данные в соответствии с тем, что нужно красному значению.

Ответ 2

Используйте 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'