def security_credentials_role_name():
role_arn = _get_role_arn()
credentials = _credential_map.get(role_arn)
# Refresh credentials if going to expire soon.
now = datetime.datetime.now(tz=dateutil.tz.tzutc())
if not credentials or credentials['Expiration'] < now + _refresh_timeout:
try:
# Use any boto3 credential provider except the instance metadata provider.
botocore_session = botocore.session.Session()
botocore_session.get_component('credential_provider').remove('iam-role')
session = boto3.session.Session(botocore_session=botocore_session)
credentials = session.client('sts').assume_role(RoleArn=role_arn,
RoleSessionName="ectou-metadata")['Credentials']
credentials['LastUpdated'] = now
_credential_map[role_arn] = credentials
except Exception as e:
bottle.response.status = 404
bottle.response.content_type = 'text/plain' # EC2 serves json as text/plain
return json.dumps({
'Code': 'Failure',
'Message': e.message,
}, indent=2)
# Return current credential.
bottle.response.content_type = 'text/plain' # EC2 serves json as text/plain
return json.dumps({
'Code': 'Success',
'LastUpdated': _format_iso(credentials['LastUpdated']),
"Type": "AWS-HMAC",
'AccessKeyId': credentials['AccessKeyId'],
'SecretAccessKey': credentials['SecretAccessKey'],
'Token': credentials['SessionToken'],
'Expiration': _format_iso(credentials['Expiration'])
}, indent=2)
评论列表
文章目录