# Airflow Configuration

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

## Configuration File

**Apache Airflow** は、すべての airflow マシンに **`airflow.cfg`** という **config file** を生成します。この config file は、設定情報を含み、**興味深く、機密性の高い情報を含む可能性があります。**

**このファイルにアクセスする方法は2つあります：airflow マシンを侵害するか、ウェブコンソールにアクセスすることです。**

**config file 内の値** は **使用されているものではない可能性がある**ことに注意してください。環境変数を設定することで上書きできます。例えば、`AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'`。

**ウェブサーバーの config file にアクセスできる場合**、同じページで表示されている **実際の実行設定** を確認できます。\
**airflow 環境内のマシンにアクセスできる場合**、**環境**を確認してください。

config file を読む際に確認すべき興味深い値：

### \[api]

- **`access_control_allow_headers`**: これは **CORS** のための **許可された** **ヘッダー** を示します
- **`access_control_allow_methods`**: これは **CORS** のための **許可されたメソッド** を示します
- **`access_control_allow_origins`**: これは **CORS** のための **許可されたオリジン** を示します
- **`auth_backend`**: [**ドキュメントによると**](https://airflow.apache.org/docs/apache-airflow/stable/security/api.html)、API にアクセスできるユーザーを設定するためのいくつかのオプションがあります：
- `airflow.api.auth.backend.deny_all`: **デフォルトでは誰も** API にアクセスできません
- `airflow.api.auth.backend.default`: **誰でも** 認証なしでアクセスできます
- `airflow.api.auth.backend.kerberos_auth`: **kerberos 認証** を設定するため
- `airflow.api.auth.backend.basic_auth`: **基本認証** のため
- `airflow.composer.api.backend.composer_auth`: 作成者の認証を使用します (GCP) ([**こちら**](https://cloud.google.com/composer/docs/access-airflow-api)から)。
- `composer_auth_user_registration_role`: これは **composer ユーザー** が **airflow** 内で取得する **役割** を示します (**Op** がデフォルト)。
- また、Python で **独自の認証** メソッドを作成することもできます。
- **`google_key_path`:** **GCP サービスアカウントキー** へのパス

### **\[atlas]**

- **`password`**: Atlas パスワード
- **`username`**: Atlas ユーザー名

### \[celery]

- **`flower_basic_auth`** : 認証情報 (_user1:password1,user2:password2_)
- **`result_backend`**: **認証情報** を含む可能性のある Postgres URL。
- **`ssl_cacert`**: cacert へのパス
- **`ssl_cert`**: 証明書へのパス
- **`ssl_key`**: キーへのパス

### \[core]

- **`dag_discovery_safe_mode`**: デフォルトで有効。DAG を発見する際、`DAG` と `airflow` の文字列を含まないファイルは無視されます。
- **`fernet_key`**: 暗号化された変数を保存するためのキー (対称)
- **`hide_sensitive_var_conn_fields`**: デフォルトで有効、接続の機密情報を隠します。
- **`security`**: 使用するセキュリティモジュール (例えば kerberos)

### \[dask]

- **`tls_ca`**: ca へのパス
- **`tls_cert`**: 証明書へのパス
- **`tls_key`**: tls キーへのパス

### \[kerberos]

- **`ccache`**: ccache ファイルへのパス
- **`forwardable`**: デフォルトで有効

### \[logging]

- **`google_key_path`**: GCP JSON 認証情報へのパス。

### \[secrets]

- **`backend`**: 有効にする秘密のバックエンドの完全なクラス名
- **`backend_kwargs`**: backend_kwargs パラメータは辞書に読み込まれ、秘密のバックエンドクラスの **init** に渡されます。

### \[smtp]

- **`smtp_password`**: SMTP パスワード
- **`smtp_user`**: SMTP ユーザー

### \[webserver]

- **`cookie_samesite`**: デフォルトでは **Lax** で、すでに最も弱い値です
- **`cookie_secure`**: セッション cookie に **secure flag** を設定します
- **`expose_config`**: デフォルトは False で、true の場合、**config** はウェブ **console** から **読み取る** ことができます
- **`expose_stacktrace`**: デフォルトでは True で、**python tracebacks** を表示します (攻撃者にとって潜在的に有用)
- **`secret_key`**: これは **flask が cookie に署名するために使用するキー** です (これを持っていると、**Airflow の任意のユーザーを偽装**できます)
- **`web_server_ssl_cert`**: **SSL** **証明書** への **パス**
- **`web_server_ssl_key`**: **SSL** **キー** への **パス**
- **`x_frame_enabled`**: デフォルトは **True** で、デフォルトではクリックジャッキングは不可能です

### Web Authentication

デフォルトでは **web authentication** は **`webserver_config.py`** ファイルに指定され、次のように設定されています。
```bash
AUTH_TYPE = AUTH_DB
```
これは、**認証がデータベースに対してチェックされる**ことを意味します。ただし、他の構成も可能です。
```bash
AUTH_TYPE = AUTH_OAUTH
```
**認証をサードパーティサービスに委ねる**こと。

ただし、**匿名ユーザーのアクセスを許可する**オプションもあり、次のパラメータを**希望するロール**に設定します：
```bash
AUTH_ROLE_PUBLIC = 'Admin'
```
{{#include ../../banners/hacktricks-training.md}}
