Apache Airflow security hardening

Apache Airflow security hardening covers where credentials live, who can reach what, how workers are isolated, how images stay patched and how activity is logged. This page sets out the decisions, build order, effort drivers and checks for a self-hosted Airflow 3 deployment.

On this page

Why Apache Airflow security hardening matters before production data flows

Before production data flows through an Airflow deployment, the team has to be able to show that the platform is controlled. A working Airflow environment often already holds the credentials that matter most: source system passwords, cloud access keys, connection definitions and the DAG code that moves data between systems. Getting pipelines to run is the easy part. The harder question is whether anyone can explain who can read those secrets, who can change the code that uses them, and where the evidence of those answers lives.

Airflow is designed to get started quickly, and many defaults reflect that goal rather than a production threat model. The default metadata database is SQLite, which the production deployment guide describes as suitable for testing only, with a risk of data loss in production. Default role and authentication choices, the API server exposure, and the logging configuration all need an explicit decision before go-live. Treating the out-of-the-box state as a baseline to review, rather than as an approved configuration, is the first step.

Hardening covers several areas at once: the metadata database, the secrets backend, the API server, the DAG processor, the workers, the container images and the logs. Each has its own settings, but the difficult work sits in the interactions between them. For example, a worker that can reach the metadata database directly, a DAG processor that can read secrets it does not need, or a log file that echoes a connection value can each undo a control that looks correct on its own. Review the components as one system, and record which component owns each trust boundary.

Apache Airflow is licensed under the Apache License 2.0, and the project does not sell a hardened edition. That means the security posture of your deployment is your responsibility as the operator, including patching, configuration, access design and evidence. Before data flows, ask your team to confirm which Airflow version is in use and whether it is still within the support window described in the project's version life cycle. Also confirm who will track security fixes and who approves changes to the configuration baseline.

Which Airflow components hold credentials and reach the metadata database

An Airflow deployment spreads credentials and database access across several components, and each one widens or narrows the damage a compromise can do. The cards below list what each component can read or change, so you can decide where to isolate, restrict and monitor before you write a hardening plan.

Metadata database

The metadata database stores DAG runs, task instances, users, roles, variables and connection records, and every Airflow component connects to it. Airflow's production guide recommends PostgreSQL or MySQL, and the Airflow 3.3.2 prerequisites list PostgreSQL 14 to 18 and MySQL 8.0, 8.4 and Innovation releases. MariaDB is not supported for this role, and SQLite should not be used in production. Check who holds database credentials, which network paths reach it, and whether connection secrets are encrypted with the Fernet key.

API server

In Airflow 3 the API server replaces the webserver and serves the UI, the REST API and the execution API that task code calls. It is the main entry point for operators and automation, so its authentication settings, exposed endpoints and reverse proxy configuration define who can trigger runs and read logs. Confirm which auth manager is set, whether the API is reachable only from approved networks, and which roles can read connection details.

DAG processor

Airflow 3 requires the DAG processor to run as a separate component. It parses DAG files from the bundle location and writes serialized DAGs to the metadata database, so anyone who can change DAG code can run arbitrary Python in this process. Check where DAG files come from, who can merge changes to them, and whether this process can reach secrets or the database with more rights than parsing needs.

Scheduler

The scheduler decides which tasks run and when, and it reads and writes task state through the metadata database. Airflow supports running more than one scheduler at once, coordinated by database row-level locks. Each scheduler holds database credentials with broad write access to run state, so review its database role, confirm that only scheduler hosts hold those credentials, and monitor for unexpected run or state changes.

Executor workers

Workers run the task code, which is where DAG authors' Python executes with access to whatever the task is given. Depending on the executor chosen, workers may be Celery processes, Kubernetes pods, local processes or AWS Batch and ECS jobs. Workers usually receive the credentials needed for their own work, which makes them the most likely place for secrets to leak through logs or code. Limit each worker's network reach and the connections it can resolve, and keep worker images patched.

Triggerer

The triggerer runs deferrable operators' asynchronous triggers, which often poll external systems and hold their connection details while they wait. Because it runs long-lived code that talks to many external services, it can hold a wide set of credentials at once. Confirm which connections it can resolve, whether it needs the same database access as the scheduler, and how it is isolated from the API server network.

Connections, variables and secrets backend

Connections and variables are stored in the metadata database unless a secrets backend supplies them. Connection passwords and tokens are encrypted with the Fernet key, so the key must be stored separately from the database and rotated under a documented procedure. A secrets backend moves storage to an external vault and changes how components fetch values. Check which components can read the backend, how its access policies are scoped, and whether the Fernet key is held by the same people as the database.

Which secrets backend, auth manager and worker placement to choose

This table compares the four main hardening choices for a self-hosted Airflow 3 deployment: where connections live, which auth manager serves users, and how workers are placed on the network. Read each row for the fit, the rotation and key custody work, the on-call load and the testing effort each option adds.

ChoiceOperational cost and when it fitsWhat to confirm before deciding
Connections in the metadata database encrypted with the Fernet keyLowest setup effort and no extra service to run. Rotation means re-encrypting stored values under a new key, and whoever holds the Fernet key can decrypt every connection. Fits small or early deployments with few connections and a tightly controlled database.Who holds the Fernet key and where it is stored, how rotation is rehearsed, and whether database backups are encrypted and access-controlled.
External secrets backend read at task run timeCredentials stay in the vault your security team already operates, so rotation happens in one place. Costs include the vault's own availability, access policies for each worker identity, and testing lookups for every connection type. Fits organizations with an existing vault and audit requirements for secret access.Which backend the provider package supports, how workers authenticate to it, and what happens to running tasks when the vault is unreachable.
Simple auth manager (the Airflow 3 default)No separate identity system to build or maintain, and no extra integration to test. User management and role assignment are handled inside Airflow, which means manual account lifecycle work and limited central control. Fits small teams or non-production environments where the risk of unmanaged accounts is accepted in writing.Whether leavers and role changes can be processed in time without a central directory, and whether the default meets the access review evidence your assessor expects.
Another auth manager set through the auth_manager optionUsers and groups come from your identity provider, which reduces account sprawl but adds configuration, group-to-role mapping and login testing. Only one auth manager can be active at a time, so the choice is hard to reverse without a planned change window. The FAB auth manager is provided by the FAB provider package and must be installed and version-matched.The provider package version for your Airflow release, the identity protocol your directory supports, and how API access and service accounts are handled.
Workers on a shared networkSimpler routing and fewer firewall rules, with fast onboarding of new DAGs and connections. Any compromised task can reach databases, internal APIs and metadata services that it does not need. Operational load is lower, but the blast radius of one bad DAG is higher. Fits low-sensitivity pipelines only.Which internal systems workers can reach today, and whether outbound destinations are documented well enough to build an allow list.
Workers in a segmented network with restricted egressEach worker subnet gets an explicit allow list of databases, APIs, vault endpoints and package sources. This adds firewall change requests, DNS and proxy maintenance, and tests that confirm blocked paths stay blocked after each release. On-call work rises when a new source system must be opened, so ownership of that process should be agreed first. Fits regulated data and shared platforms.Named owners for egress approvals, the list of required destinations per DAG family, and whether the executor and image registry can run inside the restricted zone.
Executor and worker modelThe executor decides where task processes run and therefore which network paths and secrets each worker needs. Kubernetes-based workers can use namespace-level policies, while other executors need host or subnet rules. Changing executors later changes the placement work, so decide them together.Which executors the target deployment will use, since hybrid executors are not supported in Airflow 3.0.0 and later.
Secret access testing and evidenceEach option needs its own test set: a connection lookup from a worker, a denied lookup from an unauthorized identity, and a failed-login or revoked-access check. Keep results with the change record so an assessor can trace how each control was verified. Plan this testing as recurring work after every upgrade, not only at go-live.Which test environment mirrors production network rules, and who signs off the evidence before cutover.

Apache Airflow security hardening steps in the order that avoids rework

Apache Airflow security hardening follows a fixed order because each control depends on the one before it. The release and database choice determine what can be patched, the Fernet key protects everything written to the metadata database, and network and image decisions assume the access model is already settled.

  1. Confirm a supported release and production database

    Confirm that the Airflow line you plan to run still receives security fixes. Airflow 3 is the current major line, with 3.3.2 listed as the current patch release, while Airflow 2 reached end of life on April 22, 2026 and gets no fixes. Choose PostgreSQL 14 to 18 or MySQL 8.0, 8.4, or an Innovation release for the metadata database, because MariaDB is not supported and SQLite should not be used in production. The platform team and the database administrator own this step. It is done when the database version appears in the prerequisites for your chosen release and a restore test of the database has succeeded.

  2. Generate and custody the Fernet key

    Airflow uses a Fernet key to encrypt stored connection passwords and variables in the metadata database. Generate the key once per environment and store it in your secrets manager or hardware-backed vault, with read access limited to the named operators who need it. Keep it out of DAG code and out of the image. Record who holds a copy and the procedure for rotating it, because losing the key makes stored encrypted values unreadable. Check the step by decrypting a test connection with the key from the vault, then confirming that the stored value cannot be read without the key. Confirm the same key is loaded by every component that reads the database, since a mismatch causes failures.

  3. Move sensitive connections to a secrets backend

    Replace inline connection passwords and variables with references to your chosen secrets backend, so credentials live in one store that you can audit. Confirm that the backend is supported by your Airflow release and provider set, and that the API server, scheduler, and workers can each authenticate to it with their own identity. Rotate any credentials that were already stored in the metadata database, because moving them does not remove the old copies. The check is to create a test connection, confirm the metadata database holds no password for it, and confirm that a DAG task resolves the credential at runtime from the backend.

  4. Choose the auth manager and design roles

    Airflow 3 uses the Simple auth manager by default and allows only one auth manager at a time, set through the auth_manager option. Decide whether the Simple manager fits your environment or whether the FAB auth manager from the FAB provider is needed for your identity integration. Map job functions to least-privilege roles, such as viewers, DAG operators, and a small admin group, and keep connection and variable editing separate from DAG authoring. Remove default accounts and review service API tokens. The check is to sign in as a restricted user and confirm that an admin page returns access denied, and to confirm that an automation token can call only the endpoints it was issued for.

  5. Segment the network by component

    Give each component only the network paths it needs. Workers should reach the metadata database, the secrets backend, and the systems their tasks call, but not each other's administrative ports or arbitrary external hosts. The API server should be the only component exposed to user networks. In Airflow 3 the DAG processor runs as a separate component, so the scheduler, DAG processor, and triggerer each need their own rule set. The network team and the platform team own this step. The check is to test from a worker subnet that the metadata database is reachable and that an unlisted external host is blocked, and to test from a user subnet that the scheduler and database ports are unreachable.

  6. Build and pin the image from the official base

    Build your image from the official Apache Airflow Docker image, add only the providers and dependencies your DAGs need, and pin the base tag and every package version. Rebuild and redeploy on each Airflow patch release, because limited-maintenance lines receive security and critical fixes only and the image is the unit you patch. If you deploy on Kubernetes with the official community Helm chart, point the chart at the same pinned image so that chart and runtime match. The check is to run the image and confirm that the Airflow and provider versions match your build manifest, then confirm that the image digest recorded in the deployment matches the digest you built.

  7. Enable audit logs and route them out

    Turn on logging for logins, connection and variable changes, manual DAG triggers, and permission changes, then ship the logs to a central store outside the Airflow components. Confirm with the logging documentation for your release which events it records, and fill any gap with your own audit hooks. Set retention to match your policy and make sure the log shipper can read the files while Airflow users cannot edit or delete them. The check is to perform a test login, trigger a test DAG run, and edit a test connection, then confirm that all three events appear in the central store with user identity and timestamp.

How the Fernet key protects stored connections and variables

Airflow encrypts sensitive values before it writes them to the metadata database. Connection passwords, connection extras and variables marked as sensitive are stored as ciphertext, and the Fernet key is the secret that encrypts and decrypts them. The key is set through the fernet_key option in the [core] section of the Airflow configuration, or through the matching AIRFLOW__CORE__FERNET_KEY environment variable. Treat it as a root credential for everything Airflow stores: anyone who holds it and can read the metadata database can recover every stored secret in plaintext.

The risk runs in both directions. If the key is lost, the encrypted values in the database cannot be decrypted, so connections and variables must be re-entered by hand after recovery. If the key leaks, an attacker with a database backup or read access to the metadata database can decrypt those values offline. Protecting the key therefore matters as much as protecting the database itself. Create it with the cryptography library's Fernet generator, which the Airflow documentation describes, and generate it in the environment where it will be used rather than copying one from a shared document or example.

Keep the key out of the container image, the DAG repository and any file committed to version control. Inject it at runtime from the secrets store your platform already uses, such as a Kubernetes Secret populated by an external secrets operator, a cloud key management service, or the vault your organization runs. Confirm with your security team who can read that store, whether access is logged, and how the key is backed up. A backup of the key should live in a separate control domain from the database backup, so one compromise does not expose both.

Every component that reads encrypted values must hold the same key. In a deployment with separate scheduler, API server, DAG processor, triggerer and worker processes, a component started with a different key will fail to decrypt connections it needs and the failure may only appear at task runtime. Verify this by listing your components and their environment sources, then running a test task that uses a stored connection after each configuration change. Also confirm how your chosen version handles multiple keys, because rotation depends on it.

Rotation needs a written plan before the first key change. Airflow's documentation describes accepting a list of Fernet keys, where the first key encrypts new values and the others remain available for decryption, which allows re-encryption of stored values before an old key is retired. The exact steps, the command used to re-encrypt, and any restart order are version-specific, so confirm them against the Airflow release you run in its documentation. Rehearse the full procedure on a copy of the metadata database and a non-production environment first, record the time it takes, and keep the previous key available until every stored value has been verified.

How Apache Airflow security hardening changes across VMs, Kubernetes and air-gapped networks

On a single host or a small set of virtual machines, most hardening depends on operating system controls rather than cluster primitives. Airflow components run as processes under a service account, so isolation comes from how you create that account, which files it can read, and which ports are open. The hard part is that a scheduler and its workers often share a host, which means a task that runs code can reach the same configuration and credentials the scheduler uses.

What to plan for:

  • Process isolation: run each Airflow component under its own dedicated, non-login service account where the layout allows it.
  • File permissions on configuration: restrict the airflow configuration file and any environment files that hold the Fernet key, database connection strings and secrets backend settings to the service accounts that need them.
  • Scheduler and worker separation: separating components on the same host is difficult to do cleanly, so confirm whether your executor and layout can put workers on separate machines with no access to scheduler-side secrets.
  • Network exposure: limit which hosts can reach the API server and the metadata database port, since no cluster policy applies here.
  • Patch ownership: the operating system team and the Airflow team both patch these hosts, so assign who updates Python packages and the Airflow release.

Before sign-off, confirm with your platform team exactly which files each service account can read and whether a task can write to the scheduler's configuration directory.

What drives Apache Airflow security hardening cost and how to contain it

This table lists the factors that most change the effort of hardening a self-hosted Airflow deployment, with a containment step for each. Read it before requesting a quote, because the same driver can add scope or be reduced by a decision you make early. Most of the cost comes from scope that nobody has written down, so fixing the boundaries in writing before work starts is the main lever.

DriverWhy it changes effortHow to keep it down
Number of environments and teamsEach environment needs its own DAG bundles, connections, roles and network rules, and each team adds access reviews and separation checks.Limit the first hardening pass to production and one non-production environment, then agree in writing how later environments follow the same baseline.
Number and type of connections holding credentialsEvery connection to a database, cloud account or SaaS API is a credential that needs storage, rotation, scoping and review. Connections that reach production data carry the most review time.Narrow the connection inventory before work starts, retire unused connections, and group the remaining ones by sensitivity so the review effort follows the risk.
Choice of secrets backend and whether one already existsStoring secrets in the Airflow metadata database needs the most custom handling. Reusing a secrets platform that already has access control and audit logging means integrating rather than building.Reuse the secrets platform your organization already operates if Airflow can read from it, and confirm the backend integration with the Airflow secrets documentation for your version before estimating.
Network segmentation needsIsolating the scheduler, API server, DAG processor, workers and metadata database into separate zones requires firewall rules, routing and testing for each path between them.Document the required traffic paths first, then agree which zones exist in your environment. Ask whether your network team will own the firewall change requests, since that work is often outside the Airflow scope.
Custom operators and provider packages to reviewEach custom operator, hook, sensor, plugin or third-party provider package runs code inside the Airflow environment and needs a review of its dependencies, permissions and network calls.Inventory the installed packages and custom code with your team, remove anything unused, and fix the review list by name in the statement of work so additions go through change control.
Compliance evidence requirementsAssessors often ask for proof of configuration, access reviews, log retention and change records. Each control you must evidence adds collection, formatting and walkthrough time.Agree the control list and the evidence format in writing before work starts. DeployOpen prepares evidence for assessments, but independent auditors decide what they accept.
Airflow version current or in limited maintenanceAirflow 2 entered limited maintenance on October 22, 2025 and reached end of life on April 22, 2026, according to the Airflow version support table. Hardening a release that gets no fixes can mean upgrading first, which adds a separate piece of work.Confirm your release against the version life cycle before scoping. If you are on Airflow 2, decide whether upgrading to Airflow 3 is in the same statement of work or a separate one, so the hardening estimate is not mixed with migration effort.

How to test that Airflow hardening holds and fails safely

The clearest way to test Airflow hardening is to turn each control into a check that someone can rerun, then run those checks against the deployed environment rather than relying on configuration files alone. Start with the metadata database. Confirm that the connection string points to PostgreSQL or MySQL on a supported version, and that no scheduler, API server, worker or DAG processor falls back to SQLite. The Airflow prerequisites state that SQLite should not be used in production and that MariaDB is not supported as a metadata database, so any component that reports either one has failed the control. Query each running component directly, because a value set in one image or environment file can differ from the one another component reads.

Next, test secrets at rest. Create a connection with a recognizable dummy password through the interface or API, then read the metadata database table with a privileged database account. The stored value should be ciphertext and should not be readable as plain text. Restore a copy of the database into a separate environment where the Fernet key is absent, and confirm the values remain unreadable. Also check that the Fernet key is injected from your secret store at runtime and does not appear in image layers, container logs or the values file in your deployment repository. Record the key version in use so that rotation tests can be compared against it later.

Role tests need one test user for each role in the auth manager you run in production. Airflow 3 uses the Simple auth manager by default, and only one auth manager can be active at a time, so confirm which one is set before writing any test. For each user, attempt the actions that role should not have, such as triggering a DAG, editing a connection, reading a variable or calling the REST API with that user's token. Each attempt should return a denial and produce an audit entry. For workers, run a network probe from a worker pod or host to a destination outside the allowlist and confirm the connection fails. Then probe an allowed destination, so you know the test is not simply blocking all traffic.

Test fail-closed behavior in staging by pointing the secrets backend at an address that does not respond, triggering a task that needs a connection, and confirming that the task fails. It should not fall back to a value in an environment variable, a cached copy or a default. Then scan the image for baked-in credentials. Search the filesystem, environment metadata and build history for private keys, tokens and passwords, and confirm that nothing from the build context was copied in unintentionally. Use a secret scanning tool, and record its name and version so the scan can be repeated with the same settings.

Finally, prove that the tests can fail. In a staging copy, remove one control on purpose, such as the worker egress allowlist, then rerun the matching probe and confirm that it now reaches the blocked host and the test reports a failure. Repeat the exercise with a second control, such as the metadata database setting. A suite that has never failed against a broken configuration gives little assurance. Record every result as evidence: the command or query, the environment, Airflow and image versions, the date, the tester, the output and the reviewer's approval. Store the record with the change ticket so that your team or an independent auditor can rerun the same checks after each upgrade.

Role design and worker isolation controls to review

These controls decide who can change what in Airflow and what a compromised task can reach. Review them together, because a broad role or an over-permissioned worker undoes network and secrets work done elsewhere in the hardening plan.

Separate DAG author, operator and admin roles

Assign DAG authors, operators who trigger and monitor runs, and administrators who manage connections, users and configuration to different roles. The failure this prevents is a DAG author who can also read production credentials or change the scheduler's settings. Test it by signing in as each role and attempting to pause a DAG, edit a connection and change a user's role. Each attempt should succeed or fail exactly as the role matrix says.

Restrict who can view and edit connections

Connections and variables often hold database passwords, API tokens and cloud keys, so they need their own access rules rather than inheriting broad DAG permissions. Confirm which roles can list, read secret fields and edit each connection, and whether any role can export them through the UI or API. Test by checking that a non-admin account cannot retrieve a connection's password through either path.

Keep the Simple auth manager out of exposed use

Airflow 3 uses the Simple auth manager by default, which is suited to testing rather than internet-facing or multi-team production. Unless your team has reviewed and accepted its scope, plan a production auth manager and confirm the auth_manager setting in your configuration. Test by reviewing the effective configuration on each API server and confirming the expected manager is loaded.

Treat worker credentials as API-scoped

In Airflow 3, task code no longer uses Airflow database sessions or models directly and reaches Airflow through the REST API or Task SDK. Workers therefore need credentials for those interfaces, not the metadata database password, so confirm that database credentials are absent from worker environments. Test by running a sample task and checking which Airflow credentials it can read from its environment and whether it can open a connection to the metadata database.

Restrict worker egress

Workers run arbitrary task code, so an unrestricted outbound path lets a malicious or buggy DAG send data to any host. Limit egress to the systems each worker needs, such as the metadata database, the API server, the secrets backend and approved data sources. Test by launching a task from a test DAG that attempts to reach an unapproved external address and confirm the connection is blocked and logged.

Keep secrets out of DAG files

DAG files are code, often stored in git and read by several components, so a password written into one is exposed to everyone with repository or file access. Reference secrets through connections or a secrets backend instead, and scan the DAG repository for literal credentials before each release. Test by searching the DAG bundle for common credential patterns and confirming that DAG parsing does not print secret values in logs.

What to audit, patch and document after Apache Airflow security hardening

Hardening is not finished at go-live. The recurring work falls into three areas: reviewing logs, keeping images and packages current, and keeping documentation accurate enough that someone other than the builder can prove each control still works. Start by setting a review schedule for audit and access logs and naming who reads them. Airflow records user actions in its audit log, and access to the API server and the metadata database produces its own records in your logging stack. Decide in advance who reviews each source, how often, what counts as an exception, and who approves a change to a role or connection. A log that nobody is assigned to read provides no control, even if it is retained correctly.

Patching has two tracks. The first is the Airflow core and its runtime image. Each new patch release should trigger a rebuild of your container image from the official Airflow image, a re-run of your tests, and a redeploy on a set cadence. The second is provider packages, which are versioned separately from core and often carry the connection and hook code that touches your secrets. Keep a dependency manifest that pins each provider version, and review the release notes for each update. Confirm the support status of your installed minor line against the version life cycle table before each planning cycle. Airflow 2 entered limited maintenance on October 22, 2025 and reached end of life on April 22, 2026. Limited maintenance means only security and critical bug fixes. End of life means no fixes at all, so a deployment still on 2.x after that date carries known exposure with no upstream remedy.

The documentation set should cover five items, each of which doubles as audit evidence. First, the Fernet key custody process: where the key is stored, who can read it, how it is backed up, and how a key rotation is performed without losing access to encrypted connection values. Second, the role matrix, listing each Airflow role, the people or groups mapped to it, and the last review date. Third, the network rules for the scheduler, workers, API server and metadata database, including which ports are open between them. Fourth, the image build pipeline, covering source of base images, scanning steps, signing, and promotion to production. Fifth, the rotation runbook for database credentials, connection secrets and API tokens, with the steps, owners and rollback plan.

For each control, record the evidence it produces and where that evidence lives. A role review produces a signed list of memberships. A rebuild produces an image digest, a scan report and a deployment record. A rotation produces a change ticket and a before and after check that old credentials fail. Ask your auditor or assessor which evidence formats they accept before you design the collection process, since that decides whether you need exports, screenshots or pipeline artifacts. Confirm each item against your own environment and your vendor documentation rather than relying on a template. Keeping this record current is the work that most often lapses after go-live, so assign it an owner and review it on the same cycle as the patch plan.

Finally, review the whole set at least once per Airflow minor release and after any change to executors, auth managers or the metadata database. Airflow 3 changed several security-relevant components, including the API server, the DAG processor and the default Simple auth manager, so a control written for Airflow 2 may no longer describe what runs. Treat each upgrade as a trigger to re-check the role matrix, the network rules and the rotation runbook, and to record that the re-check happened. This keeps the documentation tied to the running system instead of to the day the hardening project closed.

Questions buyers ask about hardening Airflow

Is there a license fee for hardening Apache Airflow?

No. Apache Airflow is released under the Apache License 2.0 (Apache-2.0), and the project offers no paid edition, so there is no license line in the budget. The cost is the work and the environment it runs in. Expect three components: the people doing the hardening (your staff, or a partner's fixed-scope fee), the infrastructure for the metadata database, schedulers, workers, API server, DAG processor and secrets integration, and the recurring effort to patch images, rotate the Fernet key and review audit logs. Ask any quote to separate one-time hardening from recurring operations so you can compare it fairly with an internal estimate.

What should a fixed-scope hardening quote list?

A fixed-scope quote should name each deliverable, the environment it covers and what the client must supply. Look for an inventory of current components and versions, the secrets backend choice and how connections and variables are read from it, Fernet key storage, rotation and recovery steps, role and permission design for users and service accounts, network isolation rules for workers and the metadata database, the image build and patching process, audit log destinations and retention, and verification tests with stated pass criteria. It should also list handover documentation, named client owners, the change windows required, exclusions, and how a change in scope is priced and approved in writing.

How long does Airflow hardening take in our environment?

Duration depends on the environment and the scope, so no general figure is reliable. The main drivers are how many Airflow components you run (API server, scheduler, DAG processor, workers, triggerer), whether you run on Kubernetes or on virtual machines, how many connections and secrets must move to a secrets backend, the state of your DAG code, and how quickly your team can approve production changes. A mixed Airflow 2 and Airflow 3 estate, or an existing secrets platform with unclear ownership, usually adds time. Ask for the duration in the written scope along with the assumptions behind it, and check those assumptions against your own inventory before you sign.

Can our internal team harden Airflow without outside help?

Yes, if the team already runs Airflow in production and has people who know the platform, the secrets tooling and the network. Airflow 3 changed the architecture: the webserver is replaced by an API server, the DAG processor runs as its own component, and the Simple auth manager is the default, so older hardening checklists may not apply as written. The usual risks are time and blind spots, since internal teams often lack a second review of role design and network paths. A practical test is whether one or two engineers can own the work and its runbooks once the change window closes.

What does a hardening engagement need from our team?

Plan for access, decisions and calendar time from your side. You will typically need read access to the environment, or a delegated account with rights to deploy; diagrams or exports of networks, identity and any existing secrets platform such as a vault or a cloud secrets service; a decision on which secrets backend you will use; change windows for the Fernet key rotation, image rollout and database changes; and named owners for security, the data platform, identity and on-call. Ask who approves production changes and how long those approvals take. Missing owners can stall the work more than any technical issue.

Does hardening Airflow replace security testing or an audit?

No. Hardening changes the configuration and the operating model. Security testing checks whether those controls hold up against an attacker, and an audit assesses controls against a stated framework. DeployOpen plans, implements, hardens and documents self-hosted platforms and runs security testing, but it does not issue audit reports, attestations or certifications. Independent auditors and certification bodies do that work. Hardening can prepare systems, controls and evidence for a compliance assessment, so ask the auditor which evidence they will need before the work starts. Schedule security testing after the hardening is in place so findings relate to the final configuration.

Which Airflow security settings should we check first?

Start with the Fernet key, the metadata database, the Airflow version and the secrets path. Airflow uses a Fernet key to encrypt stored connection credentials and variables, so decide where the key lives, who can read it and how it rotates before go-live. Production should use PostgreSQL 14 to 18 or MySQL 8.0, 8.4 or an Innovation release, because the default SQLite backend is for testing only and can lead to data loss. Confirm you are on a supported line: according to the Airflow version support table, Airflow 2 reached end of life on April 22, 2026 and gets no fixes, and limited maintenance gets security and critical fixes only. Then verify worker network paths, API access and audit logging.

How DeployOpen scopes and hands over Airflow hardening work

DeployOpen plans and hardens Apache Airflow inside infrastructure you control, working from a written scope that covers secrets, connections, roles, worker isolation, image patching and audit logging. The engagement ends with documented controls and a handover your team can run without us.

How we scope

  • Inventory the Airflow version, executor, metadata database and where DAGs and secrets currently live.
  • Agree the hardening controls in writing, including which secrets backend and Fernet key process apply.
  • Confirm whether engagements are fixed-scope and whether ongoing support is needed as a retainer.

How we build

  • Move connection and variable secrets into your chosen secrets backend and verify DAGs still resolve them.
  • Design role assignments and network isolation for workers, schedulers and API server against the agreed scope.
  • Set up image patching and audit log collection, then test each control against the written acceptance criteria.

How we hand over

  • Document each hardening control, its configuration location and the owner responsible for it.
  • Provide runbooks for Fernet key rotation, image rebuilds and reviewing audit logs.
  • Walk your platform and security teams through the configuration and the verification results before close.

How we support

  • Offer ongoing support, upgrades and continuous testing as a retainer after handover.
  • Track Airflow version support status so your team knows when a release reaches limited maintenance or end of life.
  • Retest hardened controls after Airflow, provider or base image upgrades, with the scope of each retest agreed in writing.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.