boto3
documentation列出了搜索凭据的顺序,并且仅在最后一次从EC2实例元数据服务获取凭据。
如何强制boto3
仅从EC2实例配置文件或实例元数据服务获取凭据?
我遇到了this,它允许我从元数据服务获取临时凭据,然后我可以将其传递给创建boto3
会话。
但我的问题是,是否有更好的方法来做到这一点?是否可以通过指定boto3
使用即provider
- link来创建InstanceMetadataProvider
会话?我试着搜索文档很多,但无法弄清楚。
原因 - 此脚本运行的上下文还包含设置了AWS密钥的环境变量,这显然优先,但是我需要脚本仅在分配给EC2实例的IAM角色下运行。
答案 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
这是一个相似的想法,但是我发现它返回的速度更快