Skip to content Skip to sidebar Skip to footer

Boto3: Get Credentials Dynamically?

I am struggling to find out how I can get my aws_access_key_id and aws_secret_access_key dynamically from my code. In boto2 I could do the following: boto.config.get_value('Creden

Solution 1:

It's generally a best practice to only use temporary credentials. You can get temporary credentials with STS.get_session_token.

EDIT: As of this PR, you can access the current session credentials like so:

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')
...

I would still recommend using temporary credentials scoped to exactly what redshift needs.

Solution 2:

Use 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'

Solution 3:

Can I suggest that accessing the keys is WRONG using boto3:

import boto3
session = boto3.Session(profile_name="my-profile")

dynamodb = session.resource(
    "dynamodb",
    region_name=session.region_name,
    # aws_access_key_id=session.get_credentials().access_key,# aws_secret_access_key=session.get_credentials().secret_key,
)

Notice, I commented out accessing the keys because :

Any clients created from this session will use credentials from the [my-profile] section of ~/.aws/credentials.

Post a Comment for "Boto3: Get Credentials Dynamically?"