--- libcloud/compute/drivers/ec2.py	2016-03-31 05:30:05.158345000 +0000
+++ libcloud.bak/compute/drivers/ec2.py	2016-03-31 05:29:52.023282996 +0000
@@ -5302,7 +5302,12 @@
 
     def _ex_connection_class_kwargs(self):
         kwargs = super(BaseEC2NodeDriver, self)._ex_connection_class_kwargs()
-        kwargs['signature_version'] = self.signature_version
+        if self.token is None:
+            kwargs['signature_version'] = self.signature_version
+        else:
+            kwargs['token'] = self.token
+            # Force signature_version 4 for tokens or auth breaks
+            kwargs['signature_version'] = '4'
         return kwargs
 
     def _to_nodes(self, object, xpath):
@@ -6236,15 +6241,17 @@
     }
 
     def __init__(self, key, secret=None, secure=True, host=None, port=None,
-                 region='us-east-1', **kwargs):
+                 token=None, region='us-east-1', **kwargs):
         if hasattr(self, '_region'):
             region = self._region
 
         if region not in VALID_EC2_REGIONS:
             raise ValueError('Invalid region: %s' % (region))
 
+
         details = REGION_DETAILS[region]
         self.region_name = region
+        self.token = token
         self.api_name = details['api_name']
         self.country = details['country']
         self.signature_version = details.get('signature_version',

