# Airflow-Konfiguration {{#include ../../banners/hacktricks-training.md}} ## Konfigurationsdatei **Apache Airflow** generiert eine **Konfigurationsdatei** auf allen Airflow-Maschinen namens **`airflow.cfg`** im Home-Verzeichnis des Airflow-Benutzers. Diese Konfigurationsdatei enthält Konfigurationsinformationen und **kann interessante und sensible Informationen enthalten.** **Es gibt zwei Möglichkeiten, auf diese Datei zuzugreifen: Indem man eine Airflow-Maschine kompromittiert oder auf die Webkonsole zugreift.** Beachten Sie, dass die **Werte in der Konfigurationsdatei** **nicht die verwendeten sein müssen**, da Sie sie überschreiben können, indem Sie Umgebungsvariablen wie `AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'` setzen. Wenn Sie Zugriff auf die **Konfigurationsdatei im Webserver** haben, können Sie die **tatsächliche laufende Konfiguration** auf derselben Seite überprüfen, auf der die Konfiguration angezeigt wird.\ Wenn Sie **Zugriff auf eine Maschine innerhalb der Airflow-Umgebung** haben, überprüfen Sie die **Umgebung**. Einige interessante Werte, die Sie beim Lesen der Konfigurationsdatei überprüfen sollten: ### \[api] - **`access_control_allow_headers`**: Dies gibt die **erlaubten** **Header** für **CORS** an. - **`access_control_allow_methods`**: Dies gibt die **erlaubten Methoden** für **CORS** an. - **`access_control_allow_origins`**: Dies gibt die **erlaubten Ursprünge** für **CORS** an. - **`auth_backend`**: [**Laut den Dokumenten**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html) können einige Optionen vorhanden sein, um zu konfigurieren, wer auf die API zugreifen kann: - `airflow.api.auth.backend.deny_all`: **Standardmäßig kann niemand** auf die API zugreifen. - `airflow.api.auth.backend.default`: **Jeder kann** ohne Authentifizierung darauf zugreifen. - `airflow.api.auth.backend.kerberos_auth`: Um **Kerberos-Authentifizierung** zu konfigurieren. - `airflow.api.auth.backend.basic_auth`: Für **Basis-Authentifizierung**. - `airflow.composer.api.backend.composer_auth`: Verwendet die Authentifizierung von Composern (GCP) (von [**hier**](https://cloud.google.com/composer/docs/access-airflow-api)). - `composer_auth_user_registration_role`: Dies gibt die **Rolle** an, die der **Composer-Benutzer** innerhalb von **Airflow** erhält (**Op** standardmäßig). - Sie können auch **Ihre eigene Authentifizierung**smethode mit Python erstellen. - **`google_key_path`:** Pfad zum **GCP-Dienstkonto-Schlüssel**. ### **\[atlas]** - **`password`**: Atlas-Passwort. - **`username`**: Atlas-Benutzername. ### \[celery] - **`flower_basic_auth`** : Anmeldeinformationen (_user1:password1,user2:password2_). - **`result_backend`**: Postgres-URL, die **Anmeldeinformationen** enthalten kann. - **`ssl_cacert`**: Pfad zum cacert. - **`ssl_cert`**: Pfad zum Zertifikat. - **`ssl_key`**: Pfad zum Schlüssel. ### \[core] - **`dag_discovery_safe_mode`**: Standardmäßig aktiviert. Beim Entdecken von DAGs werden alle Dateien ignoriert, die nicht die Zeichenfolgen `DAG` und `airflow` enthalten. - **`fernet_key`**: Schlüssel zum Speichern verschlüsselter Variablen (symmetrisch). - **`hide_sensitive_var_conn_fields`**: Standardmäßig aktiviert, verbirgt sensible Informationen zu Verbindungen. - **`security`**: Welches Sicherheitsmodul verwendet werden soll (zum Beispiel Kerberos). ### \[dask] - **`tls_ca`**: Pfad zur CA. - **`tls_cert`**: Pfad zum Zertifikat. - **`tls_key`**: Pfad zum TLS-Schlüssel. ### \[kerberos] - **`ccache`**: Pfad zur ccache-Datei. - **`forwardable`**: Standardmäßig aktiviert. ### \[logging] - **`google_key_path`**: Pfad zu GCP JSON-Anmeldeinformationen. ### \[secrets] - **`backend`**: Vollständiger Klassenname des Secrets-Backends, das aktiviert werden soll. - **`backend_kwargs`**: Der Parameter backend_kwargs wird in ein Wörterbuch geladen und an **init** der Secrets-Backend-Klasse übergeben. ### \[smtp] - **`smtp_password`**: SMTP-Passwort. - **`smtp_user`**: SMTP-Benutzer. ### \[webserver] - **`cookie_samesite`**: Standardmäßig ist es **Lax**, also ist es bereits der schwächste mögliche Wert. - **`cookie_secure`**: Setzt das **sichere Flag** für das Sitzungscookie. - **`expose_config`**: Standardmäßig ist es False, wenn es wahr ist, kann die **Konfiguration** von der Web-**Konsole** **gelesen** werden. - **`expose_stacktrace`**: Standardmäßig ist es True, es zeigt **Python-Tracebacks** an (potenziell nützlich für einen Angreifer). - **`secret_key`**: Dies ist der **Schlüssel, der von Flask verwendet wird, um die Cookies zu signieren** (wenn Sie dies haben, können Sie **jeden Benutzer in Airflow impersonieren**). - **`web_server_ssl_cert`**: **Pfad** zum **SSL**-**Zertifikat**. - **`web_server_ssl_key`**: **Pfad** zum **SSL**-**Schlüssel**. - **`x_frame_enabled`**: Standard ist **True**, sodass standardmäßig Clickjacking nicht möglich ist. ### Web-Authentifizierung Standardmäßig ist die **Web-Authentifizierung** in der Datei **`webserver_config.py`** angegeben und konfiguriert als ```bash AUTH_TYPE = AUTH_DB ``` Was bedeutet, dass die **Authentifizierung gegen die Datenbank überprüft wird**. Es sind jedoch auch andere Konfigurationen möglich, wie ```bash AUTH_TYPE = AUTH_OAUTH ``` Um die **Authentifizierung an Drittanbieterdienste** zu übergeben. Es gibt jedoch auch eine Option, **anonymen Benutzern den Zugriff zu erlauben**, indem der folgende Parameter auf die **gewünschte Rolle** gesetzt wird: ```bash AUTH_ROLE_PUBLIC = 'Admin' ``` {{#include ../../banners/hacktricks-training.md}}