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.7.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.7-py3-none-any.whl (26.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: airflow_file_auth_manager-0.1.7.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.7.tar.gz
Algorithm Hash digest
SHA256 79819712c12afb99d0aeaf2b839f6a1b60c11fb3d230c95a65b07528adfd881c
MD5 a83bb070da25a20daf340ec2644f3966
BLAKE2b-256 e7728d51a8d3be54783f4cae29dbaf90ec1b1ec59e418d7e1754949786ac0565

See more details on using hashes here.

File details

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

File metadata

  • Download URL: airflow_file_auth_manager-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 26.7 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.7-py3-none-any.whl
Algorithm Hash digest
SHA256 907f3d86b8e171b9aa3f870dc71ca59f172cfc22ac155f47f9ec079c9cabc698
MD5 9ac4d903fcc5bb40fd85093e81f1fe06
BLAKE2b-256 56fb9a351c716752904fb4fe12b5aa2721d703b148c21733571ba8dec1325601

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