When one Airflow instance for several teams is a reasonable choice
Several data or platform teams want one self-hosted Airflow, and the question is whether the experimental [core] multi_team setting, added in Airflow 3.2.0 (released April 7, 2026), gives them enough separation. It does add access isolation: team-scoped RBAC in the UI and REST API, and team-scoped Variables and Connections, so a team sees and manages only the objects it owns. It does not add task-level isolation. Teams still share the Execution API, the signing keys and, by default, one DAG File Processor and one Triggerer. Treat it as a boundary that keeps teams from browsing or editing each other's configuration, not as a boundary that stops one team's code from reaching another team's work.
A shared instance is a reasonable choice when the teams trust each other's DAG code, the organization wants one scheduler, one metadata database and one upgrade path, and the main risk is accidental interference through the UI, API or shared connection names. It is a weaker choice when one team handles regulated data, when teams have different change-approval rules, or when a single DAG author could break another team's runs by mistake. Before committing, confirm with your Airflow platform team which settings are team-scoped in your version, and read the Apache Airflow security model against your threat model.
Check two dependencies before you design around multi-team mode. Managed services can rule it out: Amazon MWAA does not support Airflow multi-team mode, so a team that needs it must run Airflow itself. Also confirm that your identity approach and executor choice are supported alongside it, since the topic's sources do not establish compatibility for every combination. If the teams need strong separation of data, credentials or runtime, plan separate Airflow instances from the start, and treat the experimental status as a reason to validate the setup in staging before production use.
What multi-team mode isolates and what it leaves shared
Multi-team mode adds role-based access control to the web UI and REST API so that users are limited to the teams they belong to. Within those limits, a team member sees and manages only the DAGs and related objects assigned to that team, which keeps routine operations from crossing team lines. The isolation applies to what people can view and change through the interface and the API, not to what runs on the workers.
- Team-scoped views: Users see DAGs, runs and objects belonging to their own team in the UI.
- Scoped API permissions: REST API calls are checked against the same team-based roles as the UI.
- Admin reach: Users with global administrative roles can still see across teams, so limit who holds them.
- Authentication still shared: Team roles depend on the auth manager you configure, so the identity setup is a shared dependency.
- No task-level control: Access checks do not stop code in a DAG from calling services that other teams use.
Confirm with your team leads which users hold global roles and how team membership is assigned and removed in your identity provider.
Variables and Connections can be scoped to a team, so one team's credentials and configuration values are not listed for another team's users in the UI or API. This is the layer where teams most often expect a hard boundary, and it is narrower than that expectation. The scoping controls who can read and manage these objects through Airflow. It does not change what a running task can reach once it has the value it needs.
- Team ownership of objects: Each Variable and Connection is assigned to one team for management purposes.
- Hidden from other teams in Airflow: Other teams do not see these objects through the UI or REST API.
- Tasks still receive values: A DAG that is allowed to use a connection can read its credentials at run time.
- Shared storage remains: Values still live in the same metadata database and are protected by the same Fernet key.
- Naming still matters: Use team prefixes for keys so that audit records and reviews are easy to read.
Check whether your secrets backend, if you use one, enforces its own access policy per team, because that policy is separate from Airflow's scoping.
Multi-team mode does not give each team its own execution boundary. Per the Airflow security model, teams still share the Execution API and the signing keys that protect it, and by default they share one DAG File Processor and one Triggerer. Any DAG author who can run code on a worker can run code that other teams' tasks also run on, so the worker is a shared trust zone. Stronger separation at this layer comes from deployment decisions, not from the multi-team setting.
- Shared Execution API: All teams' tasks talk to the same Execution API and rely on the same signing keys.
- Shared DAG File Processor: Parsing of every team's DAG files happens in the same component by default.
- Shared Triggerer: Deferred tasks from all teams run through the same Triggerer by default.
- Shared worker trust: Code in one team's DAG can run in the same environment as another team's tasks.
- Separate instances when needed: If teams must not share these components, deploy separate Airflow instances.
Ask your platform team whether any component is deployed per team, and document that answer before you treat multi-team mode as an isolation control.
Multi-team configuration options and when each fits
This table compares the main configuration choices for an experimental multi-team Airflow setup, from the [core] multi_team setting to shared components such as the DAG File Processor, Triggerer and worker pools. Read each row as a question to answer for your environment: which option fits your teams, and what risk it leaves open.
| Option | When it fits | Risk it leaves open |
|---|---|---|
| Enable multi_team with team-scoped DAGs, Variables and Connections | Teams need separate UI and REST API views and their own Variables and Connections, and they accept that the feature is experimental in Airflow 3.2 | RBAC isolates the UI and API only; any team can still run code that reaches the shared Execution API and signing keys |
| Single DAG File Processor shared by all teams | Low DAG volume and a small platform team that wants one component to operate and monitor | One team's broken or slow DAG parsing can delay parsing for every other team |
| Separate DAG File Processor per team | Teams have heavy parsing loads or different release cadences and need parsing to stop at team boundaries | Confirm how each processor is scoped and deployed in your version; the default layout shares this component |
| Single Triggerer shared by all teams | Few deferrable tasks and a need to keep the number of running components low | Triggerer failures or overload affect deferred tasks from every team |
| Separate Triggerer per team | Teams run many deferrable sensors or long waits and need failure isolation for them | Adds components to run, patch and monitor, and must be confirmed against your deployment tooling |
| One shared worker pool | Team workloads are small and predictable, and capacity sharing is acceptable | Workers can execute any team's task, so a compromised DAG can reach other teams' runtime context |
| Separate worker pools per team | Teams handle regulated or sensitive data and need network and runtime separation from each other | Higher infrastructure and operations cost, and the Task Execution API and signing keys remain shared unless separate instances are used |
| Separate Airflow instances per team or environment | Teams must not share any metadata, signing keys, or execution path, or a regulator or contract requires hard boundaries | Each instance needs its own upgrades, database, backups and access reviews, so ask a partner to quote that recurring effort |
How to set up a multi-team Airflow safely
This sequence turns the experimental multi-team mode into a configured deployment where each team sees its own DAGs, Variables and Connections. It also records the shared components that remain, so the team that owns the platform can decide whether this isolation level is enough for its risk.
Confirm the release and accept experimental status
Confirm that the deployment runs Airflow 3.2 or later. The 3.2.0 release notes list multi-team deployments among its additions, and the current 3.x patch release is 3.3.2. Run
airflow versionon the API server, scheduler and DAG processor images to confirm they match. The platform owner should also record in writing that the multi-team setting is experimental and accept that risk for the deployment. Done when every component reports the same supported version and the acceptance is on file.Choose an auth manager that supports team RBAC
Airflow allows only one auth manager at a time, set by the
auth_manageroption. Confirm in the vendor documentation for each candidate auth manager whether it supports team-scoped role-based access control with multi-team mode. Do not assume support from the name of the manager. Map your identity provider groups to the roles that the chosen manager expects. Done when the written confirmation names the auth manager and version, and a test login returns the expected roles for two sample users in different groups.Enable the multi_team setting
Set the experimental
multi_teamoption in the[core]section of the configuration, or the equivalentAIRFLOW__CORE__MULTI_TEAMenvironment variable, on every component that reads it. Restart the API server, scheduler and DAG processor so the setting takes effect everywhere. Read the value back withairflow config get-value core multi_teamon each host or pod. Done when all components report the same value and the UI shows team-aware navigation.Define teams and bind identity groups
Create one team for each group of DAG authors and operators, using the team definitions in the UI or REST API for your version. Bind each team to the identity provider group that should carry its members, so access follows directory membership rather than manual grants. Keep a short list of platform administrators outside the team model. Done when each team lists its intended members and a test user from each group sees only its own team's entries in the team selector.
Assign DAGs, Variables and Connections to teams
Assign each DAG to exactly one owning team, and create every team-scoped Variable and Connection under the team that uses it. Record any object that must be shared, and name its owner so the exception is visible. Check naming conventions so a team's Connection IDs do not collide with another team's entries. Done when a spreadsheet or config export lists every DAG, Variable and Connection with one owner, and the list view for each team matches that export.
Document the shared components and accepted risk
Multi-team mode adds UI and REST API isolation and team-scoped Variables and Connections, but teams still share the Execution API and signing keys. By default they also share one DAG File Processor and one Triggerer. Read the Airflow security model before writing this down, and list each shared component in the deployment record with its owner and the risk accepted by the platform owner. Done when the risk record names every shared component and a decision-maker has signed off, or the record states that separate Airflow instances will be used for the sensitive teams.
Verify isolation through the UI and REST API
Sign in as a user from one team and attempt to reach another team's DAG, Variable and Connection through the UI, then through REST API list and detail calls using the same user's token. Expect hidden entries in lists and denied responses for direct IDs. Repeat the test for a user in each team and for a user with no team. Check that the audit log records the denied attempts. Done when every cross-team attempt fails in both interfaces, the results are saved with the test date and build version, and any failure blocks go-live.
When separate Airflow instances are the safer choice
Run a separate Airflow instance, not a team-scoped one, when the teams sharing a deployment differ in data classification, change-control rules, credential scopes or availability needs. The experimental [core] multi_team setting in Airflow 3.2 separates what users see and what Variables and Connections they can reach, but it does not separate execution. Teams still share the Execution API, the signing keys and, by default, one DAG File Processor and one Triggerer. If a team handling regulated customer records and a team running marketing reports share those components, a fault, a misconfigured DAG or a compromised worker in one team's pipeline sits in the same trust boundary as the other team's data. That is the core reason multi-team mode is a poor fit for strict separation, and the experimental label is a second reason to keep it out of regulated production paths.
Separate instances make sense in four situations: different data classifications that auditors treat as different systems, change windows that cannot be aligned (for example, one team must freeze releases during a close period), credential scopes that must never overlap, and availability targets that differ enough that one team's upgrade or scheduler incident would breach the other's commitments. In each case, ask whether the isolation you need is between users (RBAC can help) or between code and credentials (it cannot, in multi-team mode). Confirm the answer with the Airflow security model before deciding, because the answer usually settles the question.
The cost of separation is operational and recurs. Each instance needs its own metadata database, scheduler set, API server, DAG delivery path, secrets backend configuration and upgrade cycle, and each upgrade must be planned against the same Airflow version support windows. Costs rise with the number of instances and fall when they share a standard Helm chart or deployment template managed as code. Ask any implementation partner for a quote that itemizes the one-time build of the shared template and the recurring upgrade, monitoring and database work per instance, and confirm which of these your own platform team can absorb.
Security and operational controls for a shared instance
How do we review team assignments in a shared Airflow instance?
Review team assignments on a fixed schedule and after every organizational change, because multi-team mode only isolates what it is configured to isolate. Export the current mapping of users, roles and teams, then compare it with the ownership records in your identity provider and HR system. Remove access for people who changed teams or left. Confirm with your chosen auth manager how team membership is granted, since that determines whether the review can be driven from your identity system or must be done by hand in the UI. Check that DAG authors cannot also edit another team's connections or variables. Record each review with a date, reviewer and outcome so the evidence can be shown to an auditor. Use the Airflow security model as the reference for what teams still share, and review against it too. DeployOpen can plan the review procedure and evidence template as part of a hardening engagement.
Can audit logs show which team changed a shared DAG or connection?
Probably, but confirm the scope in your own environment before you rely on it. Airflow records actions taken through the UI, the REST API and the CLI, along with some system events, and permission to view those records is separate from ordinary DAG access. For a shared instance, check that each entry identifies the acting user and the team that owns the object changed, because a log that names a user but not a team makes review slow. Confirm retention, since database cleanup can remove old event rows. Plan to ship the events to your SIEM so they survive cleanup and sit outside the reach of the people they describe. Test with a deliberate change by a user in each team, then confirm the record appears where your reviewers will look. The Airflow security model explains the trust boundaries the log must support.
How should secrets be handled when teams share one Airflow instance?
Team scoping limits who sees a Variable or Connection in the UI and REST API. It does not change the fact that teams share the Execution API, the signing keys and the metadata database, so any secret stored there is reachable by anything that holds those keys or that database access. Keep the Fernet key under the same controls as a database password, and rotate it using the documented procedure. For higher-sensitivity credentials, move them to a secrets backend so the metadata database holds no stored values for them. Give each team its own backend path or prefix, with a naming convention that prevents collisions. Verify that values are masked in logs and the UI, and remember that XCom and environment variables need separate controls. Confirm each choice against the security model and your own threat model before go-live.
How should we plan upgrades for an experimental Airflow feature?
Expect to upgrade more often than a stable feature would require, and treat each upgrade as a change to a shared system. Multi-team mode is experimental, so its behavior can change between releases, and the Airflow release notes are the first place to check what changed. Stay on a supported minor line: under the Airflow support policy, a version in limited maintenance receives only security and critical fixes, and an end-of-life version receives none. Stage each upgrade in a production-like copy with the full team configuration, rerun your RBAC checks, and confirm that the API server, scheduler and DAG File Processor behave as expected. Keep a rollback path that includes a metadata database backup taken immediately before the change. DeployOpen can plan and carry out upgrades under a written scope, or run them under a retainer.
How do we back up and restore the Airflow metadata database?
Back up the metadata database on a schedule, and prove the schedule works by restoring from it. The Airflow production deployment guide recommends PostgreSQL or MySQL for this role and warns that the default SQLite backend is for testing only and can lose data in production. Use point-in-time recovery if your database platform offers it, store backups outside the cluster running Airflow, and encrypt them. Test a restore into an isolated environment and time it, because the restore duration determines how long a shared instance stays down. The database holds every team's encrypted connections and variables, so backup copies carry the same sensitivity as the live database. Document who may request a restore, since a restore can roll back team configuration. Validate recovery with all schedulers running, because they coordinate through database row-level locks.
What should we monitor across shared Airflow components?
Monitor each shared component separately, because a responsive web interface does not show that scheduling, parsing or triggering is keeping up. Teams share the API server, the scheduler, the DAG File Processor and the Triggerer. Per the security model, the DAG File Processor and Triggerer run as one instance by default, so a slow parse or a stuck trigger affects every team. Track scheduler heartbeats, DAG parse time and import errors, queued and running task counts, triggerer health, database connection use and metadata database growth. The Airflow scheduler documentation describes how multiple schedulers coordinate, which helps you set alert thresholds. Alert on stalled parsing or scheduling, and route alerts to owners by team where your tooling allows it. Confirm which metrics your Airflow version exposes and where to collect them.
Can DeployOpen run these controls for our shared Airflow instance?
Yes, within a written scope. DeployOpen plans, implements, hardens, backs up, upgrades, documents and supports self-hosted open-source platforms in your own infrastructure, so the access reviews, audit log routing, secrets handling, upgrade procedure, recovery testing and monitoring can be designed and built together. Most engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts. Recurring reviews, upgrades and monitoring support are available as retainers. Cost depends on the number of teams, the components in scope, the current state of the instance and how much evidence collection you want prepared. DeployOpen does not publish a price list, so ask for a quote based on the written scope. We prepare controls and evidence for compliance assessments, but independent auditors and certification bodies issue the reports and certifications.
Limits to confirm in your environment before go-live
Multi-team mode in Airflow 3.2 narrows what teams can see in the UI and API, but it does not isolate tasks, keys or processes. The cards below list the points to verify in your own release, identity setup and hosting model before any shared deployment goes live.
Confirm multi_team behavior in your release
Read the exact scope of the experimental [core] multi_team setting in the release you will run, not only the feature summary. Confirm which screens, REST API endpoints and team-scoped Variables and Connections are covered, and test that a user from one team cannot read or change another team's objects. Record the result against the specific version you plan to pin.
Confirm team RBAC support in your auth manager
Team-scoped RBAC depends on the auth manager you choose, and the Simple auth manager is not suitable for shared production use. Confirm with your vendor or the Airflow auth manager documentation that your chosen manager maps identity provider groups to teams for your identity provider. Test group changes, removed users and service accounts before relying on them.
Confirm DAG processor and triggerer separation
By default, teams share one DAG File Processor and one Triggerer, so a parsing or trigger fault can affect every team. Decide whether to run separate instances per team, and confirm the component layout in your deployment manifests. Check how a failing DAG from one team appears to others, and how resource limits are set for each component.
Confirm worker isolation requirements
Multi-team mode does not stop a DAG author's task code from running on a shared worker with access to shared signing keys and the Execution API. Map which credentials each worker holds, whether network policies separate team workloads, and whether a stricter model is required by your security policy. Document the gap so the risk owner accepts it explicitly.
Confirm managed service limits
Managed services can block multi-team mode even when self-hosted Airflow supports it. Amazon MWAA states that it does not support multi-team mode, citing its authentication, CeleryExecutor and environment-level secrets management. If you consider a managed service, confirm its current limits in writing, since the platform list changes with each release.
Confirm long-term support of the setting
The multi_team setting is experimental, so its behavior, configuration keys and defaults may change between patch and minor releases. Ask whether the feature has a stated path to stable status, and plan upgrade testing that includes RBAC, Variables and Connections. Keep separate instances as a fallback if the setting changes in a way your audit evidence cannot tolerate.
Questions buyers ask about multi-team Airflow
Is multi-team mode in Apache Airflow production ready?
Not yet, by the project's own label. The [core] multi_team setting is experimental in Airflow 3.2, and it adds team-scoped RBAC in the UI and REST API plus team-scoped Variables and Connections. It does not add task-level isolation. Teams still share the Execution API, the signing keys and, by default, one DAG File Processor and one Triggerer. Before you rely on it for regulated data, confirm the current status in the Airflow security model and the release notes for the version you plan to run, and decide whether the shared components are acceptable for your risk profile.
What drives the effort of a multi-team Airflow build?
The main drivers are the number of teams, how far their DAGs and credentials must be separated, and how many shared components you must split out. Effort rises when each team needs its own connections, secrets backend paths, role mappings from your identity provider, and a clear rule for who can edit shared Variables. It also rises when you add a separate DAG File Processor or Triggerer per team, or when you must prove separation to an auditor. Ask any partner for a quote that lists each team, each shared component, the identity integration, and the test cases for cross-team access, so you can compare scopes rather than headline numbers.
What does our team need to provide for a multi-team deployment?
You need a named owner for each team's DAGs, a list of the systems each team connects to, and a decision on identity. Your identity provider must map groups to Airflow roles, and the auth manager you choose must support the team-scoped model you design. You also need a secrets strategy, a repository and deployment process that keeps one team's code from reaching another team's DAG folder, and an environment for testing. Gathering these inputs early usually shortens the design phase more than any other step.
Can our own platform team set up multi-team mode without a partner?
Yes, if your team already runs Airflow 3 in production and has people who can work through the security model, auth manager configuration and secrets backend setup. The harder work is the testing: proving that a user in one team cannot see or change another team's DAGs, Variables, Connections, logs or runs, through both the UI and the REST API. Plan for that test suite and for keeping it running through upgrades, since an experimental feature may change between releases. A partner can take on any part of this, from design review to testing, under a written scope.
When is a separate Airflow instance safer than multi-team mode?
Choose separate instances when teams need task-level isolation, when they run code that must not share workers, Execution API signing keys or a DAG File Processor, or when their data classifications differ. Separate instances also suit teams that need different Airflow versions or different auth managers. The trade-off is more infrastructure, more upgrades and more monitoring to run. If you use a managed service, note that Amazon MWAA does not support multi-team mode, so separate environments are the only option there. Check the MWAA versions page for its current limits.
How does a partner scope a multi-team Airflow engagement?
A partner should start with a written inventory of teams, data sources, DAG authors, identity groups and compliance obligations, then decide whether multi-team mode fits or whether separate instances are the better design. The scope should name the deliverables: the architecture decision record, configuration for RBAC and secrets, the repository and deployment controls, an isolation test plan, documentation and handover. DeployOpen works on fixed scopes agreed in writing before work starts, and it can run ongoing upgrades and testing under a retainer. Ask for each deliverable and its acceptance test in the quote.
How DeployOpen scopes multi-team Airflow work
Whether multi-team mode in Airflow 3.2 is enough for your organization is a scoping question, and DeployOpen answers it in writing before any build starts. DeployOpen plans, implements and hardens self-hosted open-source platforms inside your own infrastructure, including your cloud accounts, data centers or air-gapped networks, so the Airflow control plane, metadata database, secrets backends and worker network stay under your control. A scope for this topic typically starts from the decisions already covered on this page: which teams share a deployment, which team-scoped Variables and Connections they need, whether the shared Execution API, signing keys and DAG File Processor are acceptable under your trust model, and whether a managed service is in play that cannot run multi-team mode.
Most engagements are fixed-scope. The written scope names the environments, the Airflow version and its upgrade path, the team boundaries, the RBAC mapping, the isolation controls you decide to add, the audit log routing, and the deliverables such as configuration, runbooks and verification evidence. Timelines and fees follow from that scope, so ask for a quote tied to a specific list of teams, environments and integrations rather than a general estimate. Where the scope concludes that separate Airflow instances are the safer choice, the written scope says so and prices that option instead.
Ongoing work is handled through retainers that cover support, Airflow upgrades, patching and continuous testing after go-live. Because multi-team mode is experimental, plan for retainer time to track changes in each release and to confirm behavior against the release notes before every upgrade. DeployOpen does not hold partner status with the Apache Software Foundation or with any managed service provider, and it does not issue audit reports or certifications. Where your evidence needs an independent assessment, the scope prepares the controls and records for the auditor or certification body you choose.

