Skip to content

Commit c744f93

Browse files
committed
Improve STS credential refresh and logging
Refactored credential refresh logic to handle expired STS credentials and avoid unnecessary AssumeRole calls. Reduced verbose logging and clarified cache handling for AssumeRole credentials.
1 parent 39712f5 commit c744f93

File tree

1 file changed

+24
-29
lines changed

1 file changed

+24
-29
lines changed

veadk/integrations/ve_identity/identity_client.py

Lines changed: 24 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)