Thanks David, Thanks for laying that out! I want to dig into the specific claim that "the ability to create and configure a Processor effectively allows manipulation of the entire configuration," because I think that claim is true today, but I don't believe for the reason being presented.
For PG-scoped write to actually equal Controller-wide write, a user would need some kind of pivot — a way to get from "I can configure Processors in my Process Group" to "I can change anything in the system." As far as I can tell there are really only two pivots: 1. A Processor with filesystem write access (PutFile, ExecuteScript, ExecuteProcess, etc.) directly overwriting NiFi's persisted state on disk, flow.json.gz, authorizations.xml, users.xml, etc. 2. Script-executing code reaching into the live FlowController object graph and modifying flow state directly, again without going through any authorized API call. Both are possible in an unsandboxed JVM. Both require the user to be able to add a small and specific category of component, one capable of arbitrary fil-system writes or code execution. A user restricted to ordinary routing/transform processors in their PG has no path to either pivot. That category of "dangerous" component is exactly what the Restricted annotation used to gate, separately from ordinary PG-level write. Before NIP-24, an admin could grant a user write access to a Process Group without also granting Restricted-component authorization; so that user could design flows within their PG but could not add ExecuteScript, ExecuteProcess, or anything else with WRITE_FILESYSTEM/EXECUTE_CODE. PG-scoped write did not imply the escalation path you're describing, because the dangerous-component gate was a real, independent checkpoint standing in the way. So "PG-level write already equals Controller-wide write" is a downstream consequence of having already removed the Restricted gate in NIP-24. Once any PG-write user can add any component type, including the dangerous ones, PG-scoped write does degrade toward Controller-wide write via that pivot, but that's the earlier removal creating the very problem now being used to justify this next removal, not a pre-existing limitation of PG/component-level authorization itself right?? Perhaps worth separating two things that were bundled into one: a 'requires elevated trust' flag, AND the sub-permission types (EXECUTE_CODE, WRITE_FILESYSTEM, etc.) layered on top of it. I believe the elastic problem and the CVEs were specifically about the sub-permission layer, since permission types couldn't actually be isolated from each other once code was running? The binary trust flag itself was never making that promise; it was just gating the whole dangerous-component category behind one trust check. NIP-24 removed both together, since they were implemented as a single mechanism, there's nothing that separates them. What I'm proposing is to reintroduce only one piece of what was removed: the binary flag, not the sub-permission enumeration that was added in NIFI-4885. If that's right, the proportionate fix isn't to remove PG/component-level authorization for everything. It's to restore just the binary flag: "can this user add components capable of unconstrained code execution or arbitrary filesystem/network access," yes or no. Not the sub-permission enumeration, which was rightly removed — just that one flag, checked once, separate from ordinary PG/component-scoped write. That directly closes the actual pivot mechanism without discarding the separation that the majority of components and use cases genuinely rely on. It's also compatible with NAR curation per instance, which I raised earlier — a curated, non-dangerous NAR set for a given trust boundary accomplishes the same goal upstream of authorization entirely, and works fine alongside PG-scoped write staying meaningful. If I'm talking crazy... certainly tell me so! :) Thanks, Phil On Fri, Aug 21, 2026 at 9:57 AM David Handermann < [email protected]> wrote: > Phil and Lucas, > > Thanks for following up on this question, it is worth unpacking the > implications a bit more as the project moves forward. > > At the basic level, the goal of moving to Controller-Level > Authorization is to remove the boundaries between Process Groups, and > other resource types for that matter. In other words, if a user has > authorization to write configuration at the Controller Level, it means > they can make any changes to anything in the system. Right now, the > framework checks whether a user has authorization to write to each > Process Group, so the improvement proposal eliminates this boundary. > > As described in the proposal, the fundamental problem is that the > framework is providing an appearance of security for something it > cannot actually enforce. The ability to create and configure a > Processor effectively allows manipulation of the entire configuration. > This was worse with the Restricted components annotation, because one > type of limitation often opened up the ability to do more than > advertised, which was the driver behind removing the Restricted > annotation in NIP-24. > > Given the impact of this change, the eventual removal most likely > makes sense in a major release version. It could be argued that > removing it after deprecation in a minor version is reasonable, > because the current restrictions do not provide effective protection, > so the change would align behavior with reality. However, there are a > number of things in the queue for a major release version, and I plan > to start a discussion thread on that topic soon. > > I understand that deploying multiple instances of Apache NiFi is not a > small task. However, the current multi-tenant feature does not match > the actual capabilities granted based on what is possible through > various Processors. This may come as a surprise to some, but it is > better to be clear going forward than continuing with the status quo. > > Including the removal in a major release is probably the best way to > publicize the fundamental changes, so that seems like the optimal > direction. > > Regards, > David Handermann > > On Thu, Aug 20, 2026 at 10:55 PM Lucas Ottersbach <[email protected]> > wrote: > > > > Hi Phil, David, and Team, > > > > I agree with Phil that multi-tenant functionality, specifically regarding > > the assignment of process groups, is a very practical feature. Although > > multi-tenancy is often solved nowadays by using multiple, smaller > > deployments, I personally know of deployments that still rely on larger > > setups subdivided by process groups. Solving this at the infrastructure > > level is not easily feasible for all teams, especially when the > deployment > > is not yet based on Kubernetes. Would it make sense to involve the user > > mailing list here to get an impression of how widely this feature is > still > > being used? > > > > Additionally, have I understood the NIP correctly that the actual > > transition and removal of these features would only take place with a new > > major version? Otherwise, a minor update would suddenly soften or alter > > existing access rights. > > > > Best regards, > > Lucas > > > > Phil Lord <[email protected]> schrieb am Fr., 21. Aug. 2026, 05:31: > > > > > Hey David, > > > > > > I meant to get this out before the vote period, but life got in the > way. > > > Anyway, hear me out... > > > > > > Aren't we just removing an optional finer grained "security" boundary? > > > Whether the authorization is at /controller or /process-groups/ etc... > it's > > > the same logic regardless of granularity. The authorizer policies > don't > > > care about runtime containment at any level right? Once a component is > > > running there's nothing preventing it from executing code, etc. > Previously > > > the restricted-components enforcement controlled who could > create/modify > > > these types of components. > > > > > > Assuming write permissions at the controller level, this isn't adding > any > > > additional security boundary. That would have to be something done by > > > admins through NAR restrictions to an instance, or total isolation via > > > maybe separate JVMs/containers per a defined trust boundary. Something > > > like that perhaps? > > > > > > Component/pg level authorization was never about controlling anything > at > > > runtime. It was about being able to authorize different users for > > > different components/pgs, "don't like Group A play in Group B's > sandbox. > > > While I agree with Mark to some extent that most Nifi deployments have > > > "evolved" or shrunken in size over time, this isn't really a legitimate > > > argument for removing the feature. If anything, limiting the feature > to > > > process-group level rather than component level is certainly worth > > > considering, perhaps some could simply be moved to the controller > level? > > > > > > Regards, > > > Phil > > > > > > > > > > > > On Mon, Aug 17, 2026 at 4:29 PM David Handermann < > > > [email protected]> wrote: > > > > > > > Mike, > > > > > > > > Thanks for the reply. I agree with you that the other Resource Types > > > > should also be included in this change for consistency, ending the > > > > multi-tenant authorization strategy for these Resources. I had > > > > originally considered decoupling the approach from those other > > > > Resource Types, but the argument for making a change across the board > > > > applies to those as well. > > > > > > > > I adjusted the wording of that sentence to read: > > > > > > > > "Authorization for other Resource Types, such as Provenance, Data > > > > Content Viewing, Tenants, and Policies, should also be moved to the > > > > Controller level for consistency." > > > > > > > > To that end, yes, Policies for other types of extensions should also > > > > be limited to the Controller level. The above sentence was not > > > > intended to be exhaustive, but I'm glad to clarify it if that would > be > > > > helpful. > > > > > > > > Regards, > > > > David Handermann > > > > > > > > On Mon, Aug 17, 2026 at 3:18 PM Michael Moser <[email protected]> > > > wrote: > > > > > > > > > > I understand the desire to simplify NiFi security boundaries to > make > > > them > > > > > both understandable and enforceable. I agree this is a worthwhile > > > > effort. > > > > > However, I feel like we should acknowledge that this will > effectively > > > end > > > > > multi-tenant authorization to different parts of a flow. > > > > > > > > > > I know the NIP-39 says "Authorization for other Resource Types, > such as > > > > > Provenance, Data Content Viewing, Tenants, and Policies, should be > > > > > unchanged" but in this regard I don't agree. I don't see the > value of > > > > > component-level fine-grained authorization for only some resource > types > > > > but > > > > > not all. It would be hard to explain the motivation behind what's > > > > allowed > > > > > and what isn't. For example, I think this NIP proposes to allow: > "You > > > > can > > > > > restrict who can empty flowfile queues in this Process Group, but > you > > > > > cannot restrict who can modify/operate processors in this Group". > I > > > > > wouldn't be able to answer "Why?" > > > > > > > > > > So, at the end of this effort, would flow-level Policies go away > and > > > only > > > > > controller-level Policies remain? I'm considering policies > applied to > > > > > Parameter Providers and the other "Management" components to be in > the > > > > > category of controller-level Policies. > > > > > > > > > > Thanks, > > > > > -- Mike Moser > > > > > > > > > > > > > > > > > > > > On Fri, Aug 14, 2026 at 10:48 AM David Handermann < > > > > > [email protected]> wrote: > > > > > > > > > > > Mark, > > > > > > > > > > > > Thanks for the thoughtful reply and concurrence with the > approach. I > > > > > > agree that more focused deployments provide a better security > surface > > > > > > in general, eliminating some of the earlier motivation behind the > > > > > > attempts to provide fine-grained authorization. > > > > > > > > > > > > I will leave this discussion open until Monday and then start a > vote > > > > > > thread. > > > > > > > > > > > > Regards, > > > > > > David Handermann > > > > > > > > > > > > On Wed, Aug 12, 2026 at 3:56 PM Mark Payne <[email protected] > > > > > > wrote: > > > > > > > > > > > > > > Thanks David. This is one of those proposals that sounds, on > the > > > > > > surface, almost like we’re going backward. But I absolutely 100% > > > agree > > > > with > > > > > > this direction. First and foremost of the reasons outlined in the > > > > > > “Motivation” section of the NIP. But even beyond that, I think > it’s > > > > worth > > > > > > noting that the typical NiFi deployment today is VERY different > than > > > > it was > > > > > > when the fine-grained access control was initially released. At > that > > > > time, > > > > > > the typical deployment footprint was huge, with large enterprises > > > > running 1 > > > > > > or a handful of big NiFi clusters that span 32+ core machines. > The > > > > > > fine-grained approach alleviated the need for many instances > based on > > > > > > security controls. But today, we see many smaller deployments, > and > > > > those > > > > > > smaller deployments fall much more cleanly into those security > > > > boundaries. > > > > > > And to me that alone may be enough to justify making these > changes as > > > > well. > > > > > > +1 from me. > > > > > > > > > > > > > > Thanks > > > > > > > -Mark > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Aug 12, 2026, at 4:33 PM, David Handermann < > > > > > > [email protected]> wrote: > > > > > > > > > > > > > > > > Team, > > > > > > > > > > > > > > > > I have drafted NIP-39 [1] proposing a simplified approach to > > > > framework > > > > > > > > authorization for the REST API. > > > > > > > > > > > > > > > > This proposal follows along from the more focused proposal, > > > NIP-24 > > > > [2] > > > > > > > > that deprecated the Restricted component annotation for > removal. > > > > > > > > > > > > > > > > The Controller-Level Authorization strategy aims to align > > > > implemented > > > > > > > > capabilities with enforceable security boundaries. This > approach > > > > would > > > > > > > > eliminate the current mismatch between fine-grained > authorization > > > > > > > > configuration and full control over the system through > Processors > > > > and > > > > > > > > other extension components. > > > > > > > > > > > > > > > > Regards, > > > > > > > > David Handermann > > > > > > > > > > > > > > > > [1] https://issues.apache.org/jira/browse/NIP-39 > > > > > > > > [2] https://issues.apache.org/jira/browse/NIP-24 > > > > > > > > > > > > > > > > > > > > >
