import base64 from botocore.exceptions import ClientError from secrets_manager.python_ext import PythonSecretsManager from utils.pkey import PRIVATE_KEY from conf import config def get_secret(service_name, secret_name): """Get secret value from SWFSecretsManager. For dev environment it loads value from environ instead of secrets manager. Args: service_name: service name defined in terraform configuration secret_name: key name for the secret Returns: secrets value or None if secrets not created """ secrets_manager_client = PythonSecretsManager( environment=config.ENV, service_name=service_name, force_remote=True) try: print(config.ENV, service_name, secret_name) return secrets_manager_client.get_cred(secret_name) except ClientError as e: # The secret is empty if e.response['Error']['Code'] == 'ResourceNotFoundException': return None else: raise e def get_sf_config(secrets_path): """Return Snowflake config with credentials. Args: secrets_path (str): Secrets manager path of the flow. Returns: dict: SF credentials """ private_key = None private_key_string = get_secret(secrets_path, 'SNOWFLAKE_KEY') if private_key_string: private_key = base64.b64decode( bytes(private_key_string, encoding='utf-8')) if not private_key and config.ENV == 'dev': # Default for local dev private_key = PRIVATE_KEY config.SF_CONFIG['private_key'] = private_key return config.SF_CONFIG