# 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}}
