@@ -66,38 +66,54 @@ def _refresh_creds(self: IdentityClient):
6666 "VOLCENGINE_SESSION_TOKEN" , ""
6767 )
6868
69- # If credentials are not available, try to get from VeFaaS IAM
70- if not (ak and sk ):
69+ # Helper function to attempt VeFaaS IAM credential retrieval
70+ def try_get_vefaas_credentials ():
71+ """Attempt to retrieve credentials from VeFaaS IAM."""
7172 try :
72- logger .info (
73- "Credentials not found in environment, attempting to fetch from VeFaaS IAM..."
74- )
73+ logger .info ("Attempting to fetch credentials from VeFaaS IAM..." )
7574 ve_iam_cred = get_credential_from_vefaas_iam ()
76- ak = ve_iam_cred .access_key_id
77- sk = ve_iam_cred .secret_access_key
78- session_token = ve_iam_cred .session_token
79- logger .info ("Successfully retrieved credentials from VeFaaS IAM" )
75+ if ve_iam_cred .access_key_id and ve_iam_cred .secret_access_key :
76+ logger .info ("Successfully retrieved credentials from VeFaaS IAM" )
77+ return (
78+ ve_iam_cred .access_key_id ,
79+ ve_iam_cred .secret_access_key ,
80+ ve_iam_cred .session_token or "" ,
81+ )
8082 except FileNotFoundError as e :
8183 logger .warning (f"VeFaaS IAM credentials not available: { e } " )
8284 except Exception as e :
8385 logger .warning (f"Failed to retrieve credentials from VeFaaS IAM: { e } " )
86+ return None
8487
85- if not session_token and ak and sk :
86- role_trn = self ._get_iam_role_trn_from_vefaas_iam ()
87- if not role_trn :
88- role_trn = os .getenv ("RUNTIME_IAM_ROLE_TRN" , "" )
89- # If there is no session_token and role_trn is configured, execute AssumeRole
90- if role_trn :
91- try :
92- logger .info (
93- f"No session token found, attempting AssumeRole with role: { role_trn } "
94- )
95- sts_credentials = self ._assume_role (ak , sk , role_trn )
96- ak = sts_credentials .access_key_id
97- sk = sts_credentials .secret_access_key
98- session_token = sts_credentials .session_token
99- except Exception as e :
100- logger .warning (f"Failed to assume role: { e } " )
88+ # If no AK/SK, try to get from VeFaaS IAM
89+ if not (ak and sk ):
90+ credentials = try_get_vefaas_credentials ()
91+ if credentials :
92+ ak , sk , session_token = credentials
93+
94+ # If we have AK/SK but no session token, try to get complete credentials
95+ if ak and sk and not session_token :
96+ # First attempt: try VeFaaS IAM
97+ credentials = try_get_vefaas_credentials ()
98+ if credentials :
99+ ak , sk , session_token = credentials
100+
101+ # Second attempt: if still no session token, try AssumeRole
102+ if not session_token :
103+ role_trn = self ._get_iam_role_trn_from_vefaas_iam () or os .getenv (
104+ "RUNTIME_IAM_ROLE_TRN" , ""
105+ )
106+
107+ if role_trn :
108+ try :
109+ logger .info (f"Attempting AssumeRole with role: { role_trn } " )
110+ sts_credentials = self ._assume_role (ak , sk , role_trn )
111+ ak = sts_credentials .access_key_id
112+ sk = sts_credentials .secret_access_key
113+ session_token = sts_credentials .session_token
114+ logger .info ("Successfully obtained credentials via AssumeRole" )
115+ except Exception as e :
116+ logger .warning (f"Failed to assume role: { e } " )
101117
102118 # Update configuration with the credentials
103119 self ._api_client .api_client .configuration .ak = ak
0 commit comments