@@ -70,15 +70,14 @@ def _refresh_creds(self: IdentityClient):
7070 def try_get_vefaas_credentials ():
7171 """Attempt to retrieve credentials from VeFaaS IAM."""
7272 try :
73- logger .info ("Attempting to fetch credentials from VeFaaS IAM..." )
7473 ve_iam_cred = get_credential_from_vefaas_iam ()
7574 return (
7675 ve_iam_cred .access_key_id ,
7776 ve_iam_cred .secret_access_key ,
7877 ve_iam_cred .session_token ,
7978 )
80- except FileNotFoundError as e :
81- logger . warning ( f" VeFaaS IAM credentials not available: { e } " )
79+ except FileNotFoundError :
80+ pass # If VeFaaS IAM file not found, ignore
8281 except Exception as e :
8382 logger .warning (f"Failed to retrieve credentials from VeFaaS IAM: { e } " )
8483 return None
@@ -92,8 +91,20 @@ def try_get_vefaas_credentials():
9291 if credentials :
9392 ak , sk , session_token = credentials
9493
95- # If we have AK/SK but no session token, try to get complete credentials
94+ # If we have AK/SK but no session token, or STS credentials are expired,
95+ # try to get complete credentials
96+ need_refresh = False
9697 if ak and sk and not session_token :
98+ need_refresh = True
99+ elif ak and sk and session_token :
100+ # Check if STS credentials are expired
101+ if self ._is_sts_credential_expired ():
102+ logger .info ("STS credentials expired, refreshing..." )
103+ need_refresh = True
104+ # Clear expired session token to force refresh
105+ session_token = ""
106+
107+ if need_refresh :
97108 # First attempt: try VeFaaS IAM
98109 credentials = try_get_vefaas_credentials ()
99110 if credentials :
@@ -107,12 +118,10 @@ def try_get_vefaas_credentials():
107118
108119 if role_trn :
109120 try :
110- logger .info (f"Attempting AssumeRole with role: { role_trn } " )
111121 sts_credentials = self ._assume_role (ak , sk , role_trn )
112122 ak = sts_credentials .access_key_id
113123 sk = sts_credentials .secret_access_key
114124 session_token = sts_credentials .session_token
115- logger .info ("Successfully obtained credentials via AssumeRole" )
116125 except Exception as e :
117126 logger .warning (f"Failed to assume role: { e } " )
118127
@@ -192,16 +201,9 @@ def __init__(
192201 self ._sts_credential_expires_at : Optional [int ] = None
193202
194203 def _get_iam_role_trn_from_vefaas_iam (self ) -> Optional [str ]:
195- logger .info (
196- f"Try to get IAM Role TRN from VeFaaS IAM file (path={ VEFAAS_IAM_CRIDENTIAL_PATH } )."
197- )
198-
199204 path = Path (VEFAAS_IAM_CRIDENTIAL_PATH )
200205
201206 if not path .exists ():
202- logger .error (
203- f"Get IAM Role TRN from IAM file failed, and VeFaaS IAM file (path={ VEFAAS_IAM_CRIDENTIAL_PATH } ) not exists. Please check your configuration."
204- )
205207 return None
206208
207209 with open (VEFAAS_IAM_CRIDENTIAL_PATH , "r" ) as f :
@@ -233,6 +235,9 @@ def _assume_role(
233235 ) -> AssumeRoleCredential :
234236 """Execute AssumeRole to get STS temporary credentials.
235237
238+ This method performs the AssumeRole operation and caches the result.
239+ Cache validation is handled by the caller (refresh_credentials decorator).
240+
236241 Args:
237242 access_key: VolcEngine access key
238243 secret_key: VolcEngine secret key
@@ -244,16 +249,9 @@ def _assume_role(
244249 Raises:
245250 Exception: If AssumeRole fails
246251 """
247- # Check if the cached credentials are still valid
248- if (
249- self ._cached_sts_credential is not None
250- and not self ._is_sts_credential_expired ()
251- ):
252- logger .info ("Using cached STS credentials" )
253- return self ._cached_sts_credential
254-
255252 logger .info (
256- "Cached STS credentials expired or not found, requesting new credentials..."
253+ f"Requesting new STS credentials for role: { role_trn } , "
254+ f"session: { settings .veidentity .role_session_name } "
257255 )
258256
259257 # Create STS client configuration
@@ -272,11 +270,7 @@ def _assume_role(
272270 role_session_name = settings .veidentity .role_session_name ,
273271 )
274272
275- logger .info (
276- f"Executing AssumeRole for role: { role_trn } , "
277- f"session: { settings .veidentity .role_session_name } "
278- )
279-
273+ # Execute AssumeRole
280274 response : volcenginesdksts .AssumeRoleResponse = sts_client .assume_role (
281275 assume_role_request
282276 )
@@ -298,18 +292,19 @@ def _assume_role(
298292 expires_at_timestamp = calendar .timegm (dt .timetuple ())
299293 except Exception as e :
300294 logger .warning (f"Failed to parse STS credential expiration time: { e } " )
301- # Expires in 1 hour by default
295+ # Default to 1 hour expiration
302296 import time
303297
304298 expires_at_timestamp = int (time .time ()) + 3600
305299
300+ # Create credential object
306301 sts_credential = AssumeRoleCredential (
307302 access_key_id = credentials .access_key_id ,
308303 secret_access_key = credentials .secret_access_key ,
309304 session_token = credentials .session_token ,
310305 )
311306
312- # Cached credentials and expiration time
307+ # Cache credentials and expiration time
313308 self ._cached_sts_credential = sts_credential
314309 self ._sts_credential_expires_at = expires_at_timestamp
315310
0 commit comments