Skip to main content

YAML file-based lightweight Auth Manager for Apache Airflow 3.x

Project description

airflow-file-auth-manager

A lightweight YAML file-based Auth Manager for Apache Airflow 3.x

PyPI version Python 3.11+ Apache Airflow 3.x License CI

Overview

airflow-file-auth-manager provides simple file-based authentication for Apache Airflow 3.x without requiring LDAP or external authentication services. Perfect for small teams of 1-3 people who need basic authentication with role-based access control.

Key Features

  • Secure Password Storage: bcrypt hashing with configurable work factor
  • Three-Tier Role System: Admin, Editor, and Viewer roles
  • JWT Token Authentication: Stateless session management
  • YAML-Based Configuration: Simple, human-readable user management
  • CLI Tools: Command-line interface for user administration
  • Modern Login UI: Clean, responsive login page

Installation

From PyPI

pip install airflow-file-auth-manager

From Source

git clone https://github.com/choo121600/airflow-file-auth-manager.git
cd airflow-file-auth-manager
pip install -e .

Quick Start

1. Create Users File

# Initialize with an admin user
python -m airflow_file_auth_manager.cli init \
    -f /path/to/users.yaml \
    -e admin@example.com

# Add additional users
python -m airflow_file_auth_manager.cli add-user \
    -f /path/to/users.yaml \
    -u developer \
    -r editor \
    -e dev@example.com

2. Configure Airflow

Add to your airflow.cfg:

[core]
auth_manager = airflow_file_auth_manager.FileAuthManager

[file_auth_manager]
users_file = /path/to/users.yaml

Or use environment variables:

export AIRFLOW__CORE__AUTH_MANAGER=airflow_file_auth_manager.FileAuthManager
export AIRFLOW_FILE_AUTH_USERS_FILE=/path/to/users.yaml

3. Start Airflow

airflow standalone
# or
astro dev start

Role-Based Access Control

Role Description
Admin Full access including Connection, Variable, Pool, and Configuration management
Editor DAG execution and management, read access to all resources
Viewer Read-only access to all resources

Permission Matrix

Resource Viewer Editor Admin
DAGs (view)
DAGs (trigger/manage)
Connections (view)
Connections (modify)
Variables (view)
Variables (modify)
Pools (view)
Pools (modify)
Configuration ✅ (read) ✅ (read)

Users File Format

version: "1.0"
users:
  - username: admin
    password_hash: "$2b$12$..."  # bcrypt hash
    role: admin
    email: admin@example.com
    first_name: Admin
    last_name: User
    active: true

  - username: developer
    password_hash: "$2b$12$..."
    role: editor
    email: dev@example.com
    active: true

  - username: analyst
    password_hash: "$2b$12$..."
    role: viewer
    email: analyst@example.com
    active: true

CLI Reference

Initialize Users File

python -m airflow_file_auth_manager.cli init \
    -f users.yaml \
    [-p password] \
    [-e email] \
    [--force]

Add User

python -m airflow_file_auth_manager.cli add-user \
    -f users.yaml \
    -u username \
    -r admin|editor|viewer \
    [-p password] \
    [-e email] \
    [--firstname "First"] \
    [--lastname "Last"]

Update User

python -m airflow_file_auth_manager.cli update-user \
    -f users.yaml \
    -u username \
    [-p]  # Prompt for new password
    [-r role] \
    [-e email] \
    [--active true|false]

Delete User

python -m airflow_file_auth_manager.cli delete-user \
    -f users.yaml \
    -u username \
    [-y]  # Skip confirmation

List Users

python -m airflow_file_auth_manager.cli list-users -f users.yaml

Generate Password Hash

python -m airflow_file_auth_manager.cli hash-password [-p password]

API Authentication

Obtain Token

curl -X POST http://localhost:8080/auth/file/token \
    -H "Content-Type: application/json" \
    -d '{"username": "admin", "password": "your_password"}'

Response:

{
    "access_token": "eyJ...",
    "token_type": "Bearer",
    "expires_in": 36000
}

Use Token

curl http://localhost:8080/api/v1/dags \
    -H "Authorization: Bearer eyJ..."

Configuration Options

airflow.cfg

[file_auth_manager]
# Path to users YAML file
users_file = /opt/airflow/users.yaml

[api_auth]
# JWT token expiration in seconds (default: 36000 = 10 hours)
jwt_expiration_seconds = 36000

Environment Variables

Variable Description
AIRFLOW_FILE_AUTH_USERS_FILE Path to users YAML file
AIRFLOW__FILE_AUTH_MANAGER__USERS_FILE Alternative config path

Security Considerations

  1. Protect the users file: Set appropriate permissions (chmod 600 users.yaml)
  2. Use strong passwords: Enforce password policies in your organization
  3. Secure file location: Store outside web-accessible directories
  4. Regular rotation: Periodically update passwords
  5. HTTPS: Always use HTTPS in production for secure cookie transmission

Development

Setup

git clone https://github.com/yeonguk/airflow-file-auth-manager.git
cd airflow-file-auth-manager
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

Run Tests

pytest tests/ -v

Run Tests with Coverage

pytest tests/ -v --cov=airflow_file_auth_manager --cov-report=html

Architecture

┌─────────────────────────────────────────────────────────────┐
│                    Apache Airflow 3.x                       │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────┐    ┌─────────────────┐                │
│  │  FileAuthManager │◄───│  BaseAuthManager │                │
│  └────────┬────────┘    └─────────────────┘                │
│           │                                                 │
│  ┌────────▼────────┐    ┌─────────────────┐                │
│  │   UserStore     │◄───│   users.yaml    │                │
│  └────────┬────────┘    └─────────────────┘                │
│           │                                                 │
│  ┌────────▼────────┐    ┌─────────────────┐                │
│  │ FileAuthPolicy  │    │   FastAPI App   │                │
│  │ (RBAC rules)    │    │ (login/logout)  │                │
│  └─────────────────┘    └─────────────────┘                │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Comparison with Other Auth Managers

Feature File Auth Simple Auth FAB Auth LDAP Auth
External Dependencies None None Database LDAP Server
Password Storage bcrypt Plain text Database LDAP
Role System 3 roles 4 roles Flexible Group-based
User Management YAML + CLI Config Web UI LDAP Admin
Production Ready Yes No Yes Yes
Best For Small teams Development Medium teams Enterprise

Troubleshooting

Common Issues

"Users file not found"

  • Ensure the file path is correct and accessible
  • Check file permissions

"Invalid username or password"

  • Verify the password hash was generated correctly
  • Check if the user is marked as active: true

"Module not found: airflow"

  • The CLI works without Airflow for basic operations
  • Install Airflow for full functionality

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

This project is licensed under the Apache License 2.0 - see the LICENSE file for details.

Acknowledgments

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

airflow_file_auth_manager-0.1.5.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

airflow_file_auth_manager-0.1.5-py3-none-any.whl (26.8 kB view details)

Uploaded Python 3

File details

Details for the file airflow_file_auth_manager-0.1.5.tar.gz.

File metadata

  • Download URL: airflow_file_auth_manager-0.1.5.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for airflow_file_auth_manager-0.1.5.tar.gz
Algorithm Hash digest
SHA256 ba486bad680f5f18666ffa0c02ba625b879337d6f71ca9db17949e907b4787dc
MD5 25f77873453fa14a25e93307297e50c2
BLAKE2b-256 48235ef35783cb8073a97c312f0b6b4fa2de690efb3a29989354b5bea8c54e57

See more details on using hashes here.

File details

Details for the file airflow_file_auth_manager-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: airflow_file_auth_manager-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 26.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for airflow_file_auth_manager-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 933a9cd1817bc12ad9248d30c520e8fb553aed3db166df12c062291c5bc259f3
MD5 632158890a4191ca135636be42cdeb88
BLAKE2b-256 4bf9974e0b4d52d6e0274bda8e30570425b53d854f47d135d12e17a1d4cf8437

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page