Compartir a través de


Habilitación de Azure Key Vault como back-end secreto

Nota:

El trabajo de Apache Airflow funciona con Apache Airflow.

Apache Airflow ofrece varios back-ends que permiten almacenar información confidencial, como variables y conexiones, de forma segura. Una de estas opciones es Azure Key Vault. En este artículo se explica el proceso de configuración de Key Vault como back-end secreto para el trabajo de Apache Airflow.

Requisitos previos

  • Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
  • Azure Key Vault: puede seguir este tutorial para crear una nueva instancia de Key Vault si no tiene ninguna.
  • Entidad de servicio: puede crear una nueva entidad de servicio o usar una existente y concederle permiso para acceder a la instancia de Key Vault. Por ejemplo, puede conceder el rol key-vault-contributor al nombre de entidad de seguridad de servicio (SPN) para la instancia de Key Vault para que el SPN pueda administrarlo. También debe obtener el id. de cliente de la entidad de servicio y el secreto de cliente (clave de API) para agregarlos como variables de entorno, como se describe más adelante en este artículo.

Permisos

Asigne al SPN los siguientes roles en la instancia de Key Vault desde los roles integrados:

  • Colaborador de almacén de claves
  • Usuario de secretos de Key Vault

Configuraciones para habilitar Azure Key Vault como back-end secreto en el trabajo de Apache Airflow.

  • Requisitos de Airflow: instale apache-airflow-providers-microsoft-azure durante la configuración inicial del entorno de Airflow.

    Captura de pantalla que muestra la ventana de configuración del entorno de Airflow en la que se resaltan los requisitos de Airflow.

  • Invalidaciones de configuración: agregue las siguientes configuraciones para las invalidaciones de configuración de Airflow en las propiedades del entorno de ejecución de integración:

    • AIRFLOW__SECRETS__BACKEND: airflow.providers.microsoft.azure.secrets.key_vault.AzureKeyVaultBackend
    • AIRFLOW__SECRETS__BACKEND_KWARGS: {"connections_prefix": "airflow-connections", "variables_prefix": "airflow-variables", "vault_url": **\<your keyvault uri\>**}

    Captura de pantalla que muestra la configuración del ajuste de invalidación de configuración de Airflow en la configuración del entorno de Airflow.

  • Variables de entorno: agregue las siguientes variables para la configuración de Variable de entorno en las propiedades del entorno de ejecución de integración de Airflow:

    • AZURE_CLIENT_ID = <Id. de cliente de SPN>
    • AZURE_TENANT_ID = <Id. de inquilino>
    • AZURE_CLIENT_SECRET = <Secreto de cliente de SPN>
  • Con esta configuración, puede usar variables y conexiones dentro de los DAG de Airflow. Los nombres de las conexiones y variables deben seguir AIRFLOW__SECRETS__BACKEND_KWARGS, tal como se definió anteriormente. Por ejemplo, si el nombre de la variable es sample_var, debe almacenarla como airflow-variables-sample-var. Para más información, consulte Azure Key Vault como back-end secreto.

Ejemplo de DAG mediante Key Vault como back-end

  1. Cree el nuevo archivo adf.py de Python con el siguiente contenido:

    from datetime import datetime, timedelta
    from airflow.operators.python_operator import PythonOperator
    from textwrap import dedent
    from airflow.models import Variable
    from airflow import DAG
    import logging
    
    def retrieve_variable_from_akv():
        variable_value = Variable.get("sample-variable")
        logger = logging.getLogger(__name__)
        logger.info(variable_value)
    
    with DAG(
       "tutorial",
       default_args={
           "depends_on_past": False,
           "email": ["airflow@example.com"],
           "email_on_failure": False,
           "email_on_retry": False,
           "retries": 1,
           "retry_delay": timedelta(minutes=5),
        },
       description="This DAG shows how to use Azure Key Vault to retrieve variables in Apache Airflow DAG",
       schedule_interval=timedelta(days=1),
       start_date=datetime(2021, 1, 1),
       catchup=False,
       tags=["example"],
    ) as dag:
    
        get_variable_task = PythonOperator(
            task_id="get_variable",
            python_callable=retrieve_variable_from_akv,
        )
    
    get_variable_task
    
  2. Variable almacenada en Azure Key Vault.

    Captura de pantalla que muestra la configuración de secretos en Azure Key Vault.

Inicio rápido: creación de un trabajo de Apache Airflow