Airflow Configuration

Support HackTricks

Archivo de Configuración

Apache Airflow genera un archivo de configuración en todas las máquinas de airflow llamado airflow.cfg en el directorio home del usuario de airflow. Este archivo de configuración contiene información de configuración y puede contener información interesante y sensible.

Hay dos formas de acceder a este archivo: Comprometiendo alguna máquina de airflow, o accediendo a la consola web.

Ten en cuenta que los valores dentro del archivo de configuración pueden no ser los utilizados, ya que puedes sobrescribirlos configurando variables de entorno como AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'.

Si tienes acceso al archivo de configuración en el servidor web, puedes verificar la configuración real en ejecución en la misma página donde se muestra la configuración. Si tienes acceso a alguna máquina dentro del entorno de airflow, verifica el entorno.

Algunos valores interesantes para verificar al leer el archivo de configuración:

[api]

  • access_control_allow_headers: Esto indica los encabezados permitidos para CORS

  • access_control_allow_methods: Esto indica los métodos permitidos para CORS

  • access_control_allow_origins: Esto indica los orígenes permitidos para CORS

  • auth_backend: Según la documentación hay algunas opciones que se pueden configurar para determinar quién puede acceder a la API:

  • airflow.api.auth.backend.deny_all: Por defecto, nadie puede acceder a la API

  • airflow.api.auth.backend.default: Todos pueden acceder sin autenticación

  • airflow.api.auth.backend.kerberos_auth: Para configurar autenticación kerberos

  • airflow.api.auth.backend.basic_auth: Para autenticación básica

  • airflow.composer.api.backend.composer_auth: Utiliza autenticación de compositores (GCP) (de aquí).

  • composer_auth_user_registration_role: Esto indica el rol que el usuario de composer obtendrá dentro de airflow (Op por defecto).

  • También puedes crear tu propio método de autenticación con python.

  • google_key_path: Ruta a la clave de cuenta de servicio de GCP

[atlas]

  • password: Contraseña de Atlas

  • username: Nombre de usuario de Atlas

[celery]

  • flower_basic_auth : Credenciales (user1:password1,user2:password2)

  • result_backend: URL de Postgres que puede contener credenciales.

  • ssl_cacert: Ruta al cacert

  • ssl_cert: Ruta al cert

  • ssl_key: Ruta a la clave

[core]

  • dag_discovery_safe_mode: Habilitado por defecto. Al descubrir DAGs, ignora cualquier archivo que no contenga las cadenas DAG y airflow.

  • fernet_key: Clave para almacenar variables encriptadas (simétrica)

  • hide_sensitive_var_conn_fields: Habilitado por defecto, oculta información sensible de las conexiones.

  • security: Qué módulo de seguridad usar (por ejemplo, kerberos)

[dask]

  • tls_ca: Ruta al ca

  • tls_cert: Ruta al cert

  • tls_key: Ruta a la clave tls

[kerberos]

  • ccache: Ruta al archivo ccache

  • forwardable: Habilitado por defecto

[logging]

  • google_key_path: Ruta a las credenciales JSON de GCP.

[secrets]

  • backend: Nombre completo de la clase del backend de secretos a habilitar

  • backend_kwargs: El parámetro backend_kwargs se carga en un diccionario y se pasa a init de la clase del backend de secretos.

[smtp]

  • smtp_password: Contraseña SMTP

  • smtp_user: Usuario SMTP

[webserver]

  • cookie_samesite: Por defecto es Lax, por lo que ya es el valor más débil posible

  • cookie_secure: Establecer bandera segura en la cookie de sesión

  • expose_config: Por defecto es False, si es verdadero, la configuración puede ser leída desde la consola web

  • expose_stacktrace: Por defecto es True, mostrará tracebacks de python (potencialmente útil para un atacante)

  • secret_key: Esta es la clave utilizada por flask para firmar las cookies (si tienes esto puedes suplantar a cualquier usuario en Airflow)

  • web_server_ssl_cert: Ruta al certificado SSL

  • web_server_ssl_key: Ruta a la clave SSL

  • x_frame_enabled: Por defecto es True, por lo que por defecto el clickjacking no es posible

Autenticación Web

Por defecto, la autenticación web se especifica en el archivo webserver_config.py y se configura como

AUTH_TYPE = AUTH_DB

Lo que significa que la autenticación se verifica contra la base de datos. Sin embargo, otras configuraciones son posibles como

AUTH_TYPE = AUTH_OAUTH

Para dejar la autenticación a servicios de terceros.

Sin embargo, también hay una opción para permitir el acceso a usuarios anónimos, configurando el siguiente parámetro al rol deseado:

AUTH_ROLE_PUBLIC = 'Admin'
Apoya a HackTricks

Last updated