Boto3: get credentials dynamically?

后端 未结 3 1245
暗喜
暗喜 2020-12-08 09:58

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.con

相关标签:
3条回答
  • 2020-12-08 10:21

    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.

    0 讨论(0)
  • 2020-12-08 10:21

    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 1:

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

    0 讨论(0)
  • 2020-12-08 10:41

    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'
    
    0 讨论(0)
提交回复
热议问题