@@ -136,21 +136,31 @@ def _auth_aws(deployment, service_key=None, role_arn=None, role_session_name=Non
136136 assert role_session_name , "always pass role_session_name along with role_arn"
137137
138138 try :
139+ original_access_key_id = os .environ .get ("AWS_ACCESS_KEY_ID" , None )
140+ original_secret_access_key = os .environ .get ("AWS_SECRET_ACCESS_KEY" , None )
141+ original_session_token = os .environ .get ("AWS_SESSION_TOKEN" , None )
139142 if service_key :
140143 original_credential_file_loc = os .environ .get (
141144 "AWS_SHARED_CREDENTIALS_FILE" , None
142145 )
143146
144147 # Get path to service_key and validate its around
145- service_key_path = os .path .join (
148+ encrypted_service_key_path = os .path .join (
146149 "deployments" , deployment , "secrets" , service_key
147150 )
148- if not os .path .isfile (service_key_path ):
151+ if not os .path .isfile (encrypted_service_key_path ):
149152 raise FileNotFoundError (
150- f"The service_key file { service_key_path } does not exist"
153+ f"The service_key file { encrypted_service_key_path } does not exist"
151154 )
152155
153- os .environ ["AWS_SHARED_CREDENTIALS_FILE" ] = service_key_path
156+ logger .info (f"Decrypting service key { encrypted_service_key_path } " )
157+ with decrypt_file (encrypted_service_key_path ) as decrypted_service_key_path :
158+ auth = yaml .load (open (decrypted_service_key_path ))
159+ os .environ ["AWS_ACCESS_KEY_ID" ] = auth ["creds" ]["aws_access_key_id" ]
160+ os .environ ["AWS_SECRET_ACCESS_KEY" ] = auth ["creds" ][
161+ "aws_secret_access_key"
162+ ]
163+ logger .info ("Set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY" )
154164
155165 elif role_arn :
156166 original_access_key_id = os .environ .get ("AWS_ACCESS_KEY_ID" , None )
@@ -173,15 +183,16 @@ def _auth_aws(deployment, service_key=None, role_arn=None, role_session_name=Non
173183 finally :
174184 if service_key :
175185 unset_env_var ("AWS_SHARED_CREDENTIALS_FILE" , original_credential_file_loc )
186+ unset_env_var ("AWS_ACCESS_KEY_ID" , original_access_key_id )
187+ unset_env_var ("AWS_SECRET_ACCESS_KEY" , original_secret_access_key )
188+ unset_env_var ("AWS_SESSION_TOKEN" , original_session_token )
176189 elif role_arn :
177190 unset_env_var ("AWS_ACCESS_KEY_ID" , original_access_key_id )
178191 unset_env_var ("AWS_SECRET_ACCESS_KEY" , original_secret_access_key )
179192 unset_env_var ("AWS_SESSION_TOKEN" , original_session_token )
180193
181194
182- def cluster_auth_aws (
183- deployment , account_id , cluster , region , service_key = None , role_arn = None
184- ):
195+ def cluster_auth_aws (deployment , cluster , region , service_key = None , role_arn = None ):
185196 """
186197 Setup AWS authentication with service_key or with a role
187198
@@ -298,6 +309,13 @@ def decrypt_file(encrypted_path):
298309 except json .JSONDecodeError :
299310 yield encrypted_path
300311 return
312+ elif ext == ".cfg" :
313+ try :
314+ with open (encrypted_path ) as f :
315+ encrypted_data = f .read ()
316+ except Exception :
317+ yield encrypted_path
318+ return
301319
302320 if "sops" not in encrypted_data :
303321 logger .info ("File is not sops encrypted, returning path" )
0 commit comments