[ 
https://issues.apache.org/jira/browse/NIFI-4993?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Koji Kawamura updated NIFI-4993:
--------------------------------
    Description: 
ReportLineageToAtlas 'complete path' strategy uses NiFi provenance lineage 
query with an anonymous user. If NiFi is secured and the user who made the 
lineage query request does not have required privilege, NiFi returns provenance 
event type as UNKNOWN, and also does not traverse lineage fully.

Specifically, the authorization is implemented here:
 
[https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/PersistentProvenanceRepository.java#L2641]
{code:java|title=PersistentProvenanceRepository$ComputeLineageRunnable.run}
final StandardLineageResult result = submission.getResult();
result.update(replaceUnauthorizedWithPlaceholders(matchingRecords, user), 
matchingRecords.size());
{code}
This affects to ReportLineageToAtlas 'complete path' strategy as it will not be 
able to traverse parent provenance events to analyze full lineage path for a 
FlowFile. As a result, the reporting task can not report lineage with some 
structures of flow.

 For example, with the following NiFi flow, the FlowFile that was RECEIVEd by 
GetFile went through Kafka route (the right branch). Also, the FlowFile was 
CLONEd to go Hive and HDFS routes.

!flow-screenshot.png|width=100%!

Then the original FlowFile that went through Kafka route would have NiFi 
lineage like this. This lineage can be retrieved by single lineage query and 
works even with an anonymous user. These routes can be reported to Atlas:
 !kafka-route.png|width=180!

However, the CLONEd routes would have following lineage. This graph was queried 
from NiFi UI by a NiFi user who has sufficient privilege. But with an anonymous 
user, the link from SEND (23) to the FlowFile then CLONE (18) is not returned. 
Because event types are masked as UNKNOWN and NiFi framework does not traverse 
the linkage. Thus, these cloned routes are not reported to Atlas.
 !hdfs-route.png!

ReportLineageToAtlas needs to have a property so that user can specify a NiFi 
user id to impersonate, so that required policies can be administrated.

This issue was originally reported by [~nayakmahesh616].

  was:
ReportLineageToAtlas 'complete path' strategy uses NiFi provenance lineage 
query with an anonymous user. If NiFi is secured and the user who made the 
lineage query request does not have required privilege, NiFi returns provenance 
event type as UNKNOWN, and also does not traverse lineage fully.

Specifically, the authorization is implemented here:
 
[https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/PersistentProvenanceRepository.java#L2641]
{code:java|title=PersistentProvenanceRepository$ComputeLineageRunnable.run}
final StandardLineageResult result = submission.getResult();
result.update(replaceUnauthorizedWithPlaceholders(matchingRecords, user), 
matchingRecords.size());
{code}
This affects to ReportLineageToAtlas 'complete path' strategy as it will not be 
able to traverse parent provenance events to analyze full lineage path for a 
FlowFile. As a result, the reporting task can not report lineage with some 
structures of flow.

 For example, with the following NiFi flow, the FlowFile that was RECEIVEd by 
GetFile went through Kafka route (the right branch). Also, the FlowFile was 
CLONEd to go Hive and HDFS routes.

!flow-screenshot.png|width=100!

Then the original FlowFile that went through Kafka route would have NiFi 
lineage like this. This lineage can be retrieved by single lineage query and 
works even with an anonymous user. These routes can be reported to Atlas:
 !kafka-route.png|width=180!

However, the CLONEd routes would have following lineage. This graph was queried 
from NiFi UI by a NiFi user who has sufficient privilege. But with an anonymous 
user, the link from SEND (23) to the FlowFile then CLONE (18) is not returned. 
Because event types are masked as UNKNOWN and NiFi framework does not traverse 
the linkage. Thus, these cloned routes are not reported to Atlas.
 !hdfs-route.png!

ReportLineageToAtlas needs to have a property so that user can specify a NiFi 
user id to impersonate, so that required policies can be administrated.

This issue was originally reported by [~nayakmahesh616].


> ReportLineageToAtlas complete path strategy does not report some lineages 
> with secured NiFi
> -------------------------------------------------------------------------------------------
>
>                 Key: NIFI-4993
>                 URL: https://issues.apache.org/jira/browse/NIFI-4993
>             Project: Apache NiFi
>          Issue Type: Bug
>          Components: Extensions
>    Affects Versions: 1.5.0
>            Reporter: Koji Kawamura
>            Assignee: Koji Kawamura
>            Priority: Major
>         Attachments: flow-screenshot.png, hdfs-route.png, kafka-route.png
>
>
> ReportLineageToAtlas 'complete path' strategy uses NiFi provenance lineage 
> query with an anonymous user. If NiFi is secured and the user who made the 
> lineage query request does not have required privilege, NiFi returns 
> provenance event type as UNKNOWN, and also does not traverse lineage fully.
> Specifically, the authorization is implemented here:
>  
> [https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-provenance-repository-bundle/nifi-persistent-provenance-repository/src/main/java/org/apache/nifi/provenance/PersistentProvenanceRepository.java#L2641]
> {code:java|title=PersistentProvenanceRepository$ComputeLineageRunnable.run}
> final StandardLineageResult result = submission.getResult();
> result.update(replaceUnauthorizedWithPlaceholders(matchingRecords, user), 
> matchingRecords.size());
> {code}
> This affects to ReportLineageToAtlas 'complete path' strategy as it will not 
> be able to traverse parent provenance events to analyze full lineage path for 
> a FlowFile. As a result, the reporting task can not report lineage with some 
> structures of flow.
>  For example, with the following NiFi flow, the FlowFile that was RECEIVEd by 
> GetFile went through Kafka route (the right branch). Also, the FlowFile was 
> CLONEd to go Hive and HDFS routes.
> !flow-screenshot.png|width=100%!
> Then the original FlowFile that went through Kafka route would have NiFi 
> lineage like this. This lineage can be retrieved by single lineage query and 
> works even with an anonymous user. These routes can be reported to Atlas:
>  !kafka-route.png|width=180!
> However, the CLONEd routes would have following lineage. This graph was 
> queried from NiFi UI by a NiFi user who has sufficient privilege. But with an 
> anonymous user, the link from SEND (23) to the FlowFile then CLONE (18) is 
> not returned. Because event types are masked as UNKNOWN and NiFi framework 
> does not traverse the linkage. Thus, these cloned routes are not reported to 
> Atlas.
>  !hdfs-route.png!
> ReportLineageToAtlas needs to have a property so that user can specify a NiFi 
> user id to impersonate, so that required policies can be administrated.
> This issue was originally reported by [~nayakmahesh616].



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to