如何最佳地读取AWS凭证文件

6
在我的Python代码中,我需要提取存储在明文文件中的AWS凭证 AWS_SECRET_ACCESS_KEY 和 AWS_ACCESS_KEY_ID ,具体描述请参见此处:https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html
我知道文件的名称:AWS_SHARED_CREDENTIALS_FILE和配置文件的名称:AWS_PROFILE。
我的当前方法是通过Python自己读取和解析该文件以获取 AWS_SECRET_ACCESS_KEY 和 AWS_ACCESS_KEY_ID。
但我希望已经有标准方法可以使用boto3或其他库来获取它。请给出建议。

1
你手动解析它而不是使用像session = boto3.Session(profile_name='dev'这样的东西,有什么原因吗?就像这里所描述的那样。 - Mark
1
马克,我需要从Python调用Hive脚本,并将AWS_SECRET_ACCESS_KEY和AWS_ACCESS_KEY_ID作为hiveconfig传递给它。 - user3440012
1
是的,解析文件可能更容易。顺便说一下,会话对象有一个get_credentials()方法。因此,session.get_credentials().access_keysession.get_credentials().secret_key会做你所期望的事情。 - Mark
2个回答

5

这样的方案对你是否可行,或者我误解了问题?基本上启动适当配置文件的会话(或默认配置文件),然后从凭据对象中查询这些值:

    session = boto3.Session(profile_name=<...your-profile...>)
    credentials = session.get_credentials()
    print("AWS_ACCESS_KEY_ID = {}".format(credentials.access_key))
    print("AWS_SECRET_ACCESS_KEY = {}".format(credentials.secret_key))
    print("AWS_SESSION_TOKEN = {}".format(credentials.token))

2
据我所知,AWS凭证文件使用标准的INI文件格式。您可以利用configparser轻松解析该文件。请参考:https://docs.python.org/3/library/configparser.html
对于boto3,如果将其放置在标准区域中,它将自动加载。
引用如下: Boto3在搜索凭证时会查找多个位置。 Boto3查找凭证的机制是搜索可能的位置列表,并在找到凭证后停止搜索。 Boto3搜索凭证的顺序如下: 1. 在boto.client()方法中传递凭证作为参数 2. 在创建Session对象时传递凭证作为参数 3. 环境变量 4. 共享凭证文件(~/.aws/credentials) 5. AWS配置文件(~/.aws/config) 6. 扮演角色提供程序 7. Boto2配置文件(/etc/boto.cfg和~/.boto) 8. 配置了IAM角色的Amazon EC2实例上的实例元数据服务。
参考文献:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html

我需要从Python调用Hive脚本,并将AWS_SECRET_ACCESS_KEY和AWS_ACCESS_KEY_ID作为hiveconf传递给它。 - user3440012

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接