所以我最终做了这个,效果如预期。它始终使用实例角色的临时凭证。脚本寿命短暂,因此凭证的有效性不是问题。
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)
如果有更好的方法,请随意发布。
import boto3
import botocore
botocore_session = botocore.session.get_session()
credential_provider = botocore_session.get_component('credential_provider')
instance_metadata_provider = credential_provider.get_provider('iam-role')
credential_provider.insert_before('env', instance_metadata_provider)
boto3_session = boto3.Session(botocore_session=botocore_session)
client = boto3_session.client(...)
resource = boto3_session.resource(...)
你也可以使用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
这是一个类似的想法,但我发现它返回得更快。
我们可以使用`--profile profile-name`,如果未给出配置文件标志,则可以使用IAM角色
如果我不提供“配置文件”它将优先使用已设置在脚本运行上下文中的环境变量中的AWS凭据。如何强制使用boto3
选择EC2实例角色 - Vivek Thomas