Boto3:动态获取凭据?

Mo.*_*Mo. 24 amazon-web-services python-3.x boto3

我正在努力找出如何从我的代码动态获取我的aws_access_key_id和aws_secret_access_key.

在boto2中,我可以执行以下操作:boto.config.get_value('Credentials', 'aws_secret_access_key')但我似乎无法在boto3中找到类似的方法.如果我看到的话,我能够找到钥匙,boto3.Session()._session._credentials但这对我来说似乎是所有黑客的母亲,我宁愿不去那条路.

Jor*_*ips 33

通常只使用临时凭证是最佳做法.您可以获得临时凭证STS.get_session_token.

编辑:从此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')
...
Run Code Online (Sandbox Code Playgroud)

我仍然建议使用作用于红移所需的临时凭证.

  • @Jordon Phillips,您好,如果我们使用“get_frozen_credentials()”,令牌会再次过期吗?或者它会继续工作而不需要刷新令牌吗? (5认同)

hel*_*loV 14

使用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'
Run Code Online (Sandbox Code Playgroud)


jak*_*ann 5

我可以建议使用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,
)
Run Code Online (Sandbox Code Playgroud)

请注意,我注释掉了访问密钥,因为1

从这个会话创建的任何客户端将使用的凭据从[my-profile]一节~/.aws/credentials