connectors/keyvault.py (34 lines of code) (raw):

import os import logging import re from azure.identity.aio import ManagedIdentityCredential, AzureCliCredential, ChainedTokenCredential from azure.keyvault.secrets.aio import SecretClient as AsyncSecretClient from azure.core.exceptions import ResourceNotFoundError, ClientAuthenticationError ########################################################## # KEY VAULT ########################################################## async def get_secret(secretName): try: keyVaultName = os.environ["AZURE_KEY_VAULT_NAME"] KVUri = f"https://{keyVaultName}.vault.azure.net" async with ChainedTokenCredential( ManagedIdentityCredential(), AzureCliCredential() ) as credential: async with AsyncSecretClient(vault_url=KVUri, credential=credential) as client: retrieved_secret = await client.get_secret(secretName) value = retrieved_secret.value return value except KeyError: logging.info("Environment variable AZURE_KEY_VAULT_NAME not found.") return None except ClientAuthenticationError: logging.info("Authentication failed. Please check your credentials.") return None except ResourceNotFoundError: logging.info(f"Secret '{secretName}' not found in the Key Vault.") return None except Exception as e: logging.info(f"An unexpected error occurred: {e}") return None def generate_valid_secret_name(base_name: str) -> str: """ Generate a valid secret name that contains only alphanumeric characters and dashes. Args: base_name (str): The base name to convert into a valid secret name. Returns: str: A sanitized secret name with only valid characters. """ # Replace any non-alphanumeric characters with dashes sanitized_name = re.sub(r'[^a-zA-Z0-9-]', '-', base_name) # Ensure it does not start or end with a dash and limit its length sanitized_name = sanitized_name.strip('-')[:63] # Max length for Azure Key Vault secret names is 63 return sanitized_name or "default-secret"