[ 
https://issues.apache.org/jira/browse/NIP-20?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18054361#comment-18054361
 ] 

Mark Bean commented on NIP-20:
------------------------------

That is an accurate summary. I envision different tenants needing access to 
different Registry Clients. Originally, I thought the clients would be entirely 
different repositories, but there would be no reason it couldn't be different 
directories or branches within the same git repository.

I see your point of working around policies if a given user has the ability to 
create a client - and to define it however they wish. I thought 'modify the 
controller' would be used for this, but maybe we need a new controller-level 
policy for "create registry client". This would be a similar mechanism to how 
provenance work. You need a controller-level policy to query provenance at all, 
but a component-level to view specific events.

 

> Add support for more granular access controls to Registry Clients
> -----------------------------------------------------------------
>
>                 Key: NIP-20
>                 URL: https://issues.apache.org/jira/browse/NIP-20
>             Project: NiFi Improvement Proposal
>          Issue Type: Improvement
>            Reporter: Mark Bean
>            Priority: Major
>
> h2. Motivation
> NiFi Registry server allows policies for various forms of authorization. For 
> example, user policies manage which users can perform certain actions such as 
> creating new buckets. Bucket policies manage which users can read, write or 
> delete flows within a given bucket.
> When NiFi implements non-NiFiRegistryFlowRegistryClient, e.g. 
> GitHubFlowRegistryClient, these access controls are no longer available. The 
> Component Access Policy 'modify the component' is required in order to 
> create, modify or stop version control of a process group. This is a blunt 
> solution to an otherwise finer-grained authorization mechanism.
> It is worth mentioning that at this time, there is discussion of the 
> possibility of deprecating the NiFi Registry application. Should this occur, 
> all Registry access control capabilities will be lost.
> h2. Description
> New Global Access Policies will be created. The policies are required to be 
> global because they apply to controller-level components, i.e. Registry 
> Clients. Yet, they will behave similar to Component Access Policies in that 
> they apply to a specific component, a Registry Client. A notable difference 
> to traditional Component Access Policies is that there is no intended 
> implementation of inheritance since all Registry Clients are at the 
> controller level with no hierarchy.
> The new Access Policy is "access registry client" and contains two actions, 
> "view" and "modify". Using the GitHubFlowRegistryClient as an example, in 
> order to achieve bucket-level access controls, the client would specify a 
> specific Repository Path for a directory in git containing bucket(s) 
> requiring specific view/modify access controls. Multiple clients can be 
> created on a single git project, one for each access control requirement.
> The "view" option grants users the ability to view buckets and versioned 
> flows with a specific client. With this capability, authorized users may 
> import flows from the Registry Client. However, "view" alone does not allow 
> users to update a versioned flow nor create a new one within the client (nor 
> create buckets when this feature becomes available.) Similarly, the "modify" 
> option grants users the ability to create a new version of a flow including 
> the initial version of a new versioned flow. (It will also grant the ability 
> to create buckets when this feature becomes available.) The scope of both 
> "view" and "modify" are for the given Registry Client to which the policy is 
> attached.
> h2. Scope
> This feature will require additions to the API as well as implementing 
> classes.
> h2. Compatibility
> This proposal creates additions to the Registry Client API, but does not 
> remove any functionality. In addition, default values can be implemented 
> which do not change access or behavior of current clients.
> h2. Verification
> Standard unit test patterns should be applied to new code. Also, integration 
> tests or real-world testing should be performed to ensure interaction with 
> the UI, external registries and application of policies produces the desired 
> effect.
> h2. Alternatives
> The only existing alternative at this time is using the 'modify the 
> component' Component Access Policy as a catch-all which allows or denies 
> access to all Registry Client buckets in all Registry Clients. In addition, 
> this alternative applies across the entire data flow to which it is applied 
> and is independent of the Registry Client itself. Any similar Component 
> Access Policy would have the same global consequences.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to