# Konfiguracija Airflow-a

{{#include ../../banners/hacktricks-training.md}}

## Konfiguracioni Fajl

**Apache Airflow** generiše **config fajl** na svim airflow mašinama pod nazivom **`airflow.cfg`** u home direktorijumu korisnika airflow. Ovaj config fajl sadrži informacije o konfiguraciji i **može sadržati zanimljive i osetljive informacije.**

**Postoje dva načina da se pristupi ovom fajlu: kompromitovanjem neke airflow mašine ili pristupanjem web konzoli.**

Imajte na umu da **vrednosti unutar config fajla** **možda nisu one koje se koriste**, jer ih možete prepisati postavljanjem env varijabli kao što su `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`.

Ako imate pristup **config fajlu na web serveru**, možete proveriti **pravu aktivnu konfiguraciju** na istoj stranici na kojoj se prikazuje konfiguracija.\
Ako imate **pristup nekoj mašini unutar airflow okruženja**, proverite **okruženje**.

Neke zanimljive vrednosti koje treba proveriti prilikom čitanja config fajla:

### \[api]

- **`access_control_allow_headers`**: Ovo označava **dozvoljene** **zaglavlja** za **CORS**
- **`access_control_allow_methods`**: Ovo označava **dozvoljene metode** za **CORS**
- **`access_control_allow_origins`**: Ovo označava **dozvoljene izvore** za **CORS**
- **`auth_backend`**: [**Prema dokumentaciji**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) nekoliko opcija može biti postavljeno za konfiguraciju ko može pristupiti API-ju:
- `airflow.api.auth.backend.deny_all`: **Podrazumevano niko** ne može pristupiti API-ju
- `airflow.api.auth.backend.default`: **Svi mogu** pristupiti bez autentifikacije
- `airflow.api.auth.backend.kerberos_auth`: Za konfiguraciju **kerberos autentifikacije**
- `airflow.api.auth.backend.basic_auth`: Za **osnovnu autentifikaciju**
- `airflow.composer.api.backend.composer_auth`: Koristi autentifikaciju kompozitora (GCP) (iz [**ovde**](https://cloud.google.com/composer/docs/access-airflow-api)).
- `composer_auth_user_registration_role`: Ovo označava **ulogu** koju će **korisnik kompozitora** dobiti unutar **airflow-a** (**Op** podrazumevano).
- Takođe možete **napraviti svoju vlastitu autentifikaciju** metodom u python-u.
- **`google_key_path`:** Putanja do **GCP servisnog naloga**

### **\[atlas]**

- **`password`**: Atlas lozinka
- **`username`**: Atlas korisničko ime

### \[celery]

- **`flower_basic_auth`** : Akreditivi (_user1:password1,user2:password2_)
- **`result_backend`**: Postgres url koji može sadržati **akreditive**.
- **`ssl_cacert`**: Putanja do cacert
- **`ssl_cert`**: Putanja do certifikata
- **`ssl_key`**: Putanja do ključa

### \[core]

- **`dag_discovery_safe_mode`**: Omogućeno podrazumevano. Prilikom otkrivanja DAG-ova, ignorišite sve fajlove koji ne sadrže stringove `DAG` i `airflow`.
- **`fernet_key`**: Ključ za čuvanje enkriptovanih varijabli (simetričan)
- **`hide_sensitive_var_conn_fields`**: Omogućeno podrazumevano, sakrijte osetljive informacije o konekcijama.
- **`security`**: Koji sigurnosni modul koristiti (na primer kerberos)

### \[dask]

- **`tls_ca`**: Putanja do ca
- **`tls_cert`**: Putanja do certifikata
- **`tls_key`**: Putanja do tls ključa

### \[kerberos]

- **`ccache`**: Putanja do ccache fajla
- **`forwardable`**: Omogućeno podrazumevano

### \[logging]

- **`google_key_path`**: Putanja do GCP JSON akreditiva.

### \[secrets]

- **`backend`**: Puno ime klase backend-a za tajne koje treba omogućiti
- **`backend_kwargs`**: Parametar backend_kwargs se učitava u rečnik i prosleđuje **init** klasi backend-a za tajne.

### \[smtp]

- **`smtp_password`**: SMTP lozinka
- **`smtp_user`**: SMTP korisnik

### \[webserver]

- **`cookie_samesite`**: Podrazumevano je **Lax**, tako da je već najslabija moguća vrednost
- **`cookie_secure`**: Postavite **sigurnu oznaku** na sesijskom kolačiću
- **`expose_config`**: Podrazumevano je False, ako je tačno, **config** se može **pročitati** iz web **konzole**
- **`expose_stacktrace`**: Podrazumevano je True, prikazaće **python tracebacks** (potencijalno korisno za napadača)
- **`secret_key`**: Ovo je **ključ koji koristi flask za potpisivanje kolačića** (ako imate ovo možete **imitirati bilo kog korisnika u Airflow-u**)
- **`web_server_ssl_cert`**: **Putanja** do **SSL** **certifikata**
- **`web_server_ssl_key`**: **Putanja** do **SSL** **ključa**
- **`x_frame_enabled`**: Podrazumevano je **True**, tako da podrazumevano clickjacking nije moguć

### Web Autentifikacija

Podrazumevano je **web autentifikacija** specificirana u fajlu **`webserver_config.py`** i konfiguriše se kao
```bash
AUTH_TYPE = AUTH_DB
```
Što znači da se **autentifikacija proverava u odnosu na bazu podataka**. Međutim, druge konfiguracije su moguće kao
```bash
AUTH_TYPE = AUTH_OAUTH
```
Da se **autentifikacija prepusti uslugama trećih strana**.

Međutim, postoji i opcija da se **omogući pristup anonimnim korisnicima**, postavljanjem sledećeg parametra na **željenu ulogu**:
```bash
AUTH_ROLE_PUBLIC = 'Admin'
```
{{#include ../../banners/hacktricks-training.md}}
