# Configurazione di Airflow {{#include ../../banners/hacktricks-training.md}} ## File di Configurazione **Apache Airflow** genera un **file di configurazione** in tutte le macchine airflow chiamato **`airflow.cfg`** nella home dell'utente airflow. Questo file di configurazione contiene informazioni di configurazione e **potrebbe contenere informazioni interessanti e sensibili.** **Ci sono due modi per accedere a questo file: compromettendo qualche macchina airflow, o accedendo alla console web.** Nota che i **valori all'interno del file di configurazione** **potrebbero non essere quelli utilizzati**, poiché puoi sovrascriverli impostando variabili d'ambiente come `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`. Se hai accesso al **file di configurazione nel server web**, puoi controllare la **configurazione reale in esecuzione** nella stessa pagina in cui viene visualizzata la configurazione.\ Se hai **accesso a qualche macchina all'interno dell'ambiente airflow**, controlla l'**ambiente**. Alcuni valori interessanti da controllare quando leggi il file di configurazione: ### \[api] - **`access_control_allow_headers`**: Questo indica gli **header** **consentiti** per **CORS** - **`access_control_allow_methods`**: Questo indica i **metodi consentiti** per **CORS** - **`access_control_allow_origins`**: Questo indica le **origini consentite** per **CORS** - **`auth_backend`**: [**Secondo la documentazione**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) alcune opzioni possono essere in atto per configurare chi può accedere all'API: - `airflow.api.auth.backend.deny_all`: **Per impostazione predefinita nessuno** può accedere all'API - `airflow.api.auth.backend.default`: **Tutti possono** accedervi senza autenticazione - `airflow.api.auth.backend.kerberos_auth`: Per configurare **l'autenticazione kerberos** - `airflow.api.auth.backend.basic_auth`: Per **l'autenticazione di base** - `airflow.composer.api.backend.composer_auth`: Usa l'autenticazione dei compositori (GCP) (da [**qui**](https://cloud.google.com/composer/docs/access-airflow-api)). - `composer_auth_user_registration_role`: Questo indica il **ruolo** che l'**utente compositore** avrà all'interno di **airflow** (**Op** per impostazione predefinita). - Puoi anche **creare il tuo metodo di autenticazione** con python. - **`google_key_path`:** Percorso alla **chiave dell'account di servizio GCP** ### **\[atlas]** - **`password`**: Password di Atlas - **`username`**: Nome utente di Atlas ### \[celery] - **`flower_basic_auth`** : Credenziali (_user1:password1,user2:password2_) - **`result_backend`**: URL Postgres che può contenere **credenziali**. - **`ssl_cacert`**: Percorso al cacert - **`ssl_cert`**: Percorso al certificato - **`ssl_key`**: Percorso alla chiave ### \[core] - **`dag_discovery_safe_mode`**: Abilitato per impostazione predefinita. Quando si scoprono i DAG, ignora eventuali file che non contengono le stringhe `DAG` e `airflow`. - **`fernet_key`**: Chiave per memorizzare variabili crittografate (simmetrica) - **`hide_sensitive_var_conn_fields`**: Abilitato per impostazione predefinita, nasconde informazioni sensibili delle connessioni. - **`security`**: Quale modulo di sicurezza utilizzare (ad esempio kerberos) ### \[dask] - **`tls_ca`**: Percorso al ca - **`tls_cert`**: Percorso al certificato - **`tls_key`**: Percorso alla chiave tls ### \[kerberos] - **`ccache`**: Percorso al file ccache - **`forwardable`**: Abilitato per impostazione predefinita ### \[logging] - **`google_key_path`**: Percorso alle credenziali JSON GCP. ### \[secrets] - **`backend`**: Nome completo della classe del backend dei segreti da abilitare - **`backend_kwargs`**: Il parametro backend_kwargs viene caricato in un dizionario e passato a **init** della classe del backend dei segreti. ### \[smtp] - **`smtp_password`**: Password SMTP - **`smtp_user`**: Utente SMTP ### \[webserver] - **`cookie_samesite`**: Per impostazione predefinita è **Lax**, quindi è già il valore più debole possibile - **`cookie_secure`**: Imposta il **flag sicuro** sul cookie di sessione - **`expose_config`**: Per impostazione predefinita è False, se vero, la **configurazione** può essere **letta** dalla **console** web - **`expose_stacktrace`**: Per impostazione predefinita è True, mostrerà **tracce di python** (potenzialmente utili per un attaccante) - **`secret_key`**: Questa è la **chiave utilizzata da flask per firmare i cookie** (se hai questo puoi **impersonare qualsiasi utente in Airflow**) - **`web_server_ssl_cert`**: **Percorso** al **certificato** **SSL** - **`web_server_ssl_key`**: **Percorso** alla **chiave** **SSL** - **`x_frame_enabled`**: Il valore predefinito è **True**, quindi per impostazione predefinita il clickjacking non è possibile ### Autenticazione Web Per impostazione predefinita, **l'autenticazione web** è specificata nel file **`webserver_config.py`** ed è configurata come ```bash AUTH_TYPE = AUTH_DB ``` Ciò significa che **l'autenticazione viene verificata rispetto al database**. Tuttavia, sono possibili altre configurazioni come ```bash AUTH_TYPE = AUTH_OAUTH ``` Per lasciare l'**autenticazione ai servizi di terze parti**. Tuttavia, c'è anche un'opzione per **consentire l'accesso agli utenti anonimi**, impostando il seguente parametro al **ruolo desiderato**: ```bash AUTH_ROLE_PUBLIC = 'Admin' ``` {{#include ../../banners/hacktricks-training.md}}