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

Python 3.11+ Apache Airflow 3.x License

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 (coming soon)

pip install airflow-file-auth-manager

From Source

git clone https://github.com/yeonguk/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.1.tar.gz (22.7 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.1-py3-none-any.whl (26.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: airflow_file_auth_manager-0.1.1.tar.gz
  • Upload date:
  • Size: 22.7 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.1.tar.gz
Algorithm Hash digest
SHA256 cedb3b4483eebf9b241434d0436d96a0f37270ad0593393fce7dfe59ec4c3605
MD5 d55929354edb769f2e31cffb273ab322
BLAKE2b-256 372444ac738b274476843a4951989fbb1a9e4bbe53fa0c9616bcddefd2e9180c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: airflow_file_auth_manager-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 26.6 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8903429ad3a7ad9d1cf999d0e9581554dfeff1ab4052a65884868b1aec9923ff
MD5 428c42c26b5de0131b08b65be5467cc1
BLAKE2b-256 6d29cca890ef8ad8d24036e023472c5a40257e06181ff447d6480d1b8236b59a

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