仅从EC2实例配置文件获取boto3凭据

时间:2018-03-26 16:20:30

标签: amazon-ec2 boto3

boto3 documentation列出了搜索凭据的顺序,并且仅在最后一次从EC2实例元数据服务获取凭据。

如何强制boto3仅从EC2实例配置文件或实例元数据服务获取凭据?

我遇到了this,它允许我从元数据服务获取临时凭据,然后我可以将其传递给创建boto3会话。

但我的问题是,是否有更好的方法来做到这一点?是否可以通过指定boto3使用即provider - link来创建InstanceMetadataProvider会话?我试着搜索文档很多,但无法弄清楚。

原因 - 此脚本运行的上下文还包含设置了AWS密钥的环境变量,这显然优先,但是我需要脚本仅在分配给EC2实例的IAM角色下运行。

2 个答案:

答案 0 :(得分:1)

所以我最终这样做,按预期工作。始终使用实例角色中的临时信用。脚本是短暂的,因此信用证的有效性不是问题。

from botocore.credentials import InstanceMetadataProvider, InstanceMetadataFetcher

provider = InstanceMetadataProvider(iam_role_fetcher=InstanceMetadataFetcher(timeout=1000, num_attempts=2))
creds = provider.load().get_frozen_credentials()
client = boto3.client('ssm', region_name='us-east-1', aws_access_key_id=creds.access_key, aws_secret_access_key=creds.secret_key, aws_session_token=creds.token)

如果有更好的方法,请随时发布。

答案 1 :(得分:1)

您也可以使用boto3。

>>> session = boto3.Session(region_name='foo_region')
>>> credentials = session.get_credentials()
>>> credentials = credentials.get_frozen_credentials()
>>> credentials.access_key
u'ABC...'
>>> credentials.secret_key
u'DEF...'
>>> credentials.token
u'ZXC...'
>>> access_key = credentials.access_key
>>> secret_key = credentials.secret_key

这是一个相似的想法,但是我发现它返回的速度更快