Modified: nifi/site/trunk/docs/nifi-docs/html/user-guide.html
URL: 
http://svn.apache.org/viewvc/nifi/site/trunk/docs/nifi-docs/html/user-guide.html?rev=1834461&r1=1834460&r2=1834461&view=diff
==============================================================================
--- nifi/site/trunk/docs/nifi-docs/html/user-guide.html (original)
+++ nifi/site/trunk/docs/nifi-docs/html/user-guide.html Wed Jun 27 00:37:46 2018
@@ -1,4 +1,20 @@
-<!DOCTYPE html>
+<!--
+                        Licensed to the Apache Software Foundation (ASF) under 
one or more
+                        contributor license agreements.  See the NOTICE file 
distributed with
+                        this work for additional information regarding 
copyright ownership.
+                        The ASF licenses this file to You under the Apache 
License, Version 2.0
+                        (the "License"); you may not use this file except in 
compliance with
+                        the License.  You may obtain a copy of the License at
+
+                        http://www.apache.org/licenses/LICENSE-2.0
+
+                        Unless required by applicable law or agreed to in 
writing, software
+                        distributed under the License is distributed on an "AS 
IS" BASIS,
+                        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
express or implied.
+                        See the License for the specific language governing 
permissions and
+                        limitations under the License.
+                        -->
+                        <!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
@@ -499,6 +515,8 @@ body.book #toc,body.book #preamble,body.
 <li><a href="user-guide.html#change-version">Change Version</a></li>
 <li><a href="user-guide.html#stop-version-control">Stop Version 
Control</a></li>
 <li><a href="user-guide.html#nested-versioned-flows">Nested Versioned 
Flows</a></li>
+<li><a href="user-guide.html#Variables_in_Versioned_Flows">Variables in 
Versioned Flows</a></li>
+<li><a 
href="user-guide.html#Restricted_Components_in_Versioned_Flows">Restricted 
Components in Versioned Flows</a></li>
 </ul>
 </li>
 <li><a href="user-guide.html#templates">Templates</a>
@@ -857,12 +875,16 @@ of restrictions. If permission is grante
 <td class="tableblock halign-left valign-top"><p class="tableblock">Allows 
users to modify component configuration details</p></td>
 </tr>
 <tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">view 
provenance</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allows 
users to view provenance events generated by this component</p></td>
+</tr>
+<tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">view the 
data</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Allows 
users to view metadata and content for this component through provenance data 
and flowfile queues in outbound connection</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allows 
users to view metadata and content for this component in flowfile queues in 
outbound connections and through provenance events</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">modify the 
data</p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">Allows 
users to empty flowfile queues in outbound connections and to submit 
replays</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allows 
users to empty flowfile queues in outbound connections and submit replays 
through provenance events</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">view the 
policies</p></td>
@@ -955,20 +977,17 @@ Processors that allow us to ingest files
 <div class="paragraph">
 <p>Restricted components will be marked with a
 <span class="image"><img src="images/restricted.png" alt="Restricted"></span>
-icon next to their name. Hovering over the tooltip will display the specific 
restrictions this component requires. If the component
-does not list any specific restrictions it will require access to restricted 
components regardless of restrictions. These are components
+icon next to their name. These are components
 that can be used to execute arbitrary unsanitized code provided by the 
operator through the NiFi REST API/UI or can be used to obtain
 or alter data on the NiFi host system using the NiFi OS credentials. These 
components could be used by an otherwise authorized NiFi
 user to go beyond the intended use of the application, escalate privilege, or 
could expose data about the internals of the NiFi process
 or the host system. All of these capabilities should be considered privileged, 
and admins should be aware of these capabilities and
-explicitly enable them for a subset of trusted users.</p>
-</div>
-<div class="paragraph">
-<p>Before a user is allowed to create and modify restricted components they 
must be granted access to restricted components. This can be
+explicitly enable them for a subset of trusted users. Before a user is allowed 
to create and modify restricted components they must be granted access. 
Hovering over the <span class="image"><img src="images/restricted.png" 
alt="Restricted"></span>
+icon will display the specific permissions a restricted component requires. 
Permissions can be
 assigned regardless of restrictions. In this case, the user will have access 
to all restricted components. Alternatively, users can
 be assigned access to specific restrictions. If the user has been granted 
access to all restrictions a component requires, they will
 have access to that component assuming otherwise sufficient permissions. For 
more information refer to
-<a href="user-guide.html#UI-with-multi-tenant-authorization">Accessing the UI 
with Multi-Tenant Authorization</a>.</p>
+<a href="user-guide.html#UI-with-multi-tenant-authorization">Accessing the UI 
with Multi-Tenant Authorization</a> and <a 
href="user-guide.html#Restricted_Components_in_Versioned_Flows">Restricted 
Components in Versioned Flows</a>.</p>
 </div>
 <div class="paragraph">
 <p>Clicking the <code>Add</code> button or double-clicking on a Processor Type 
will add the selected Processor to the canvas at the
@@ -1434,20 +1453,20 @@ such as when a DFM starts an entire Proc
 <p>Below the Name configuration, the Processor&#8217;s unique identifier is 
displayed along with the Processor&#8217;s type and NAR bundle. These values 
cannot be modified.</p>
 </div>
 <div class="paragraph">
-<p>Next are two dialogues for configuring `Penalty duration' and `Yield 
duration'. During the normal course of processing a
+<p>Next are two dialogues for configuring 'Penalty Duration' and 'Yield 
Duration'. During the normal course of processing a
 piece of data (a FlowFile), an event may occur that indicates that the data 
cannot be processed at this time but the
 data may be processable at a later time. When this occurs, the Processor may 
choose to Penalize the FlowFile. This will
 prevent the FlowFile from being Processed for some period of time. For 
example, if the Processor is to push the data
 to a remote service, but the remote service already has a file with the same 
name as the filename that the Processor
-is specifying, the Processor may penalize the FlowFile. The `Penalty duration' 
allows the DFM to specify how long the
+is specifying, the Processor may penalize the FlowFile. The 'Penalty Duration' 
allows the DFM to specify how long the
 FlowFile should be penalized. The default value is 30 seconds.</p>
 </div>
 <div class="paragraph">
 <p>Similarly, the Processor may determine that some situation exists such that 
the Processor can no longer make any progress,
 regardless of the data that it is processing. For example, if a Processor is 
to push data to a remote service and that
-service is not responding, the Processor cannot make any progress. As a 
result, the Processor should `yield,' which will
+service is not responding, the Processor cannot make any progress. As a 
result, the Processor should 'yield', which will
 prevent the Processor from being scheduled to run for some period of time. 
That period of time is specified by setting
-the `Yield duration.' The default value is 1 second.</p>
+the 'Yield Duration'. The default value is 1 second.</p>
 </div>
 <div class="paragraph">
 <p>The last configurable option on the left-hand side of the Settings tab is 
the Bulletin level. Whenever the Processor writes
@@ -1456,7 +1475,7 @@ shown in the User Interface. By default,
 bulletins.</p>
 </div>
 <div class="paragraph">
-<p>The right-hand side of the Settings tab contains an `Auto-terminate 
relationships' section. Each of the Relationships that is
+<p>The right-hand side of the Settings tab contains an 'Automatically 
Terminate Relationships' section. Each of the Relationships that is
 defined by the Processor is listed here, along with its description. In order 
for a Processor to be considered valid and
 able to run, each Relationship defined by the Processor must be either 
connected to a downstream component or auto-terminated.
 If a Relationship is auto-terminated, any FlowFile that is routed to that 
Relationship will be removed from the flow and
@@ -1480,13 +1499,13 @@ auto-terminated, the auto-termination st
 </div>
 <div class="paragraph">
 <p><strong>Timer driven</strong>: This is the default mode. The Processor will 
be scheduled to run on a regular interval. The interval
-       at which the Processor is run is defined by the `Run schedule' option 
(see below).</p>
+       at which the Processor is run is defined by the 'Run Schedule' option 
(see below).</p>
 </div>
 <div class="paragraph">
 <p><strong>Event driven</strong>: When this mode is selected, the Processor 
will be triggered to run by an event, and that event occurs when FlowFiles 
enter Connections
        feeding this Processor. This mode is currently considered experimental 
and is not supported by all Processors. When this mode is
-       selected, the `Run schedule' option is not configurable, as the 
Processor is not triggered to run periodically but
-        as the result of an event. Additionally, this is the only mode for 
which the `Concurrent tasks'
+       selected, the 'Run Schedule' option is not configurable, as the 
Processor is not triggered to run periodically but
+        as the result of an event. Additionally, this is the only mode for 
which the 'Concurrent Tasks'
        option can be set to 0. In this case, the number of threads is limited 
only by the size of the Event-Driven Thread Pool that
        the administrator has configured.</p>
 </div>
@@ -1591,7 +1610,7 @@ example, 1L indicates the last Sunday of
 <p>For additional information and examples, see the <a 
href="http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html";
 target="_blank">Chron Trigger Tutorial</a> in the Quartz documentation.</p>
 </div>
 <div class="paragraph">
-<p>Next, the Scheduling Tab provides a configuration option named 
<code>Concurrent tasks</code>. This controls how many threads the Processor
+<p>Next, the Scheduling Tab provides a configuration option named 'Concurrent 
Tasks'. This controls how many threads the Processor
 will use. Said a different way, this controls how many FlowFiles should be 
processed by this Processor at the same time. Increasing
 this value will typically allow the Processor to handle more data in the same 
amount of time. However, it does this by using system
 resources that then are not usable by other Processors. This essentially 
provides a relative weighting of Processors&#8201;&#8212;&#8201;it controls
@@ -1599,7 +1618,7 @@ how much of the system&#8217;s resources
 most Processors. There are, however, some types of Processors that can only be 
scheduled with a single Concurrent task.</p>
 </div>
 <div class="paragraph">
-<p>The "Run schedule" dictates how often the Processor should be scheduled to 
run. The valid values for this field depend on the selected
+<p>The 'Run Schedule' dictates how often the Processor should be scheduled to 
run. The valid values for this field depend on the selected
 Scheduling Strategy (see above). If using the Event driven Scheduling 
Strategy, this field is not available. When using the Timer driven
 Scheduling Strategy, this value is a time duration specified by a number 
followed by a time unit. For example, <code>1 second</code> or <code>5 
mins</code>.
 The default value of <code>0 sec</code> means that the Processor should run as 
often as possible as long as it has data to process. This is true
@@ -1609,12 +1628,25 @@ applicable for the CRON driven Schedulin
 <div class="paragraph">
 <p>When configured for clustering, an Execution setting will be available. 
This setting is used to determine which node(s) the Processor will be
 scheduled to execute. Selecting 'All Nodes' will result in this Processor 
being scheduled on every node in the cluster. Selecting
-'Primary Node' will result in this Processor being scheduled on the Primary 
Node only.</p>
+'Primary Node' will result in this Processor being scheduled on the Primary 
Node only.  Processors that have been configured for 'Primary Node' execution 
are identified by a "P" next to the processor icon:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/primary-node-processor.png" alt="Primary Node Processor">
+</div>
 </div>
 <div class="paragraph">
-<p>The right-hand side of the tab contains a slider for choosing the `Run 
duration.' This controls how long the Processor should be scheduled
-to run each time that it is triggered. On the left-hand side of the slider, it 
is marked `Lower latency' while the right-hand side
-is marked `Higher throughput.' When a Processor finishes running, it must 
update the repository in order to transfer the FlowFiles to
+<p>To quickly identify 'Primary Node' processors, the "P" icon is also shown 
in the Processors tab on the Summary page:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/primary-node-processors-summary.png" alt="Primary Node 
Processors in Summary Page">
+</div>
+</div>
+<div class="paragraph">
+<p>The right-hand side of the Scheduling tab contains a slider for choosing 
the 'Run Duration'. This controls how long the Processor should be scheduled
+to run each time that it is triggered. On the left-hand side of the slider, it 
is marked 'Lower latency' while the right-hand side
+is marked 'Higher throughput'. When a Processor finishes running, it must 
update the repository in order to transfer the FlowFiles to
 the next Connection. Updating the repository is expensive, so the more work 
that can be done at once before updating the repository,
 the more work the Processor can handle (Higher throughput). However, this 
means that the next Processor cannot start processing
 those FlowFiles until the previous Process updates this repository. As a 
result, the latency will be longer (the time required to process
@@ -1634,7 +1666,7 @@ must define which Properties make sense
 </div>
 </div>
 <div class="paragraph">
-<p>This Processor, by default, has only a single property: `Routing Strategy.' 
The default value is `Route to Property name.' Next to
+<p>This Processor, by default, has only a single property: 'Routing Strategy'. 
The default value is 'Route to Property name'. Next to
 the name of this property is a small question-mark symbol (
 <span class="image"><img src="images/iconInfo.png" alt="Question Mark"></span>
 ). This help symbol is seen in other places throughout the User Interface, and 
it indicates that more information is available.
@@ -1690,7 +1722,7 @@ whatever comments are appropriate for th
 <div class="sect2">
 <h3 id="additional-help"><a class="anchor" 
href="user-guide.html#additional-help"></a>Additional Help</h3>
 <div class="paragraph">
-<p>You can access additional documentation about each Processor&#8217;s usage 
by right-clicking on the Processor and selecting `Usage' from the context menu. 
Alternatively, select Help from the Global Menu in the top-right corner of the 
UI to display a Help page with all of the documentation, including usage 
documentation for all the Processors that are available. Click on the desired 
Processor to view usage documentation.</p>
+<p>You can access additional documentation about each Processor&#8217;s usage 
by right-clicking on the Processor and selecting 'Usage' from the context menu. 
Alternatively, select Help from the Global Menu in the top-right corner of the 
UI to display a Help page with all of the documentation, including usage 
documentation for all the Processors that are available. Click on the desired 
Processor to view usage documentation.</p>
 </div>
 </div>
 <div class="sect2">
@@ -2136,7 +2168,7 @@ Connection between each component. When
 </div>
 <div class="paragraph">
 <p>The user drags the Connection bubble from one component to another until 
the second component is highlighted. When the user
-releases the mouse, a 'Create Connection' dialog appears. This dialog consists 
of two tabs: `Details' and `Settings'. They are
+releases the mouse, a 'Create Connection' dialog appears. This dialog consists 
of two tabs: 'Details' and 'Settings'. They are
 discussed in detail below. Note that it is possible to draw a connection so 
that it loops back on the same processor. This can be
 useful if the DFM wants the processor to try to re-process FlowFiles if they 
go down a failure Relationship. To create this type of looping
 connection, simply drag the connection bubble away and then back to the same 
processor until it is highlighted. Then release the mouse
@@ -2165,7 +2197,7 @@ Relationship must be selected. If only o
 </td>
 <td class="content">
 If multiple Connections are added with the same Relationship, any FlowFile 
that is routed to that Relationship will
-automatically be `cloned', and a copy will be sent to each of those 
Connections.
+automatically be 'cloned', and a copy will be sent to each of those 
Connections.
 </td>
 </tr>
 </table>
@@ -2216,6 +2248,7 @@ kilobytes, <code>MB</code> for megabytes
 </td>
 <td class="content">
 By default each new connection added will have a default Back Pressure Object 
Threshold of 10,000 objects and Back Pressure Data Size Threshold of 1 GB.
+These defaults can be changed by modifying the appropriate properties in the 
<code>nifi.properties</code> file.
 </td>
 </tr>
 </table>
@@ -2243,11 +2276,11 @@ By default each new connection added wil
 <h5 id="prioritization"><a class="anchor" 
href="user-guide.html#prioritization"></a>Prioritization</h5>
 <div class="paragraph">
 <p>The right-hand side of the tab provides the ability to prioritize the data 
in the queue so that higher priority data is
-processed first. Prioritizers can be dragged from the top (`Available 
prioritizers') to the bottom (`Selected prioritizers').
-Multiple prioritizers can be selected. The prioritizer that is at the top of 
the `Selected prioritizers' list is the highest
+processed first. Prioritizers can be dragged from the top ('Available 
prioritizers') to the bottom ('Selected prioritizers').
+Multiple prioritizers can be selected. The prioritizer that is at the top of 
the 'Selected prioritizers' list is the highest
 priority. If two FlowFiles have the same value according to this prioritizer, 
the second prioritizer will determine which
-FlowFile to process first, and so on. If a prioritizer is no longer desired, 
it can then be dragged from the `Selected
-prioritizers' list to the `Available prioritizers' list.</p>
+FlowFile to process first, and so on. If a prioritizer is no longer desired, 
it can then be dragged from the 'Selected
+prioritizers' list to the 'Available prioritizers' list.</p>
 </div>
 <div class="paragraph">
 <p>The following prioritizers are available:</p>
@@ -2261,7 +2294,7 @@ prioritizers' list to the `Available pri
 <p><strong>NewestFlowFileFirstPrioritizer</strong>: Given two FlowFiles, the 
one that is newest in the dataflow will be processed first.</p>
 </li>
 <li>
-<p><strong>OldestFlowFileFirstPrioritizer</strong>: Given two FlowFiles, the 
one that is oldest in the dataflow will be processed first. 'This is the 
default scheme that is used if no prioritizers are selected.'</p>
+<p><strong>OldestFlowFileFirstPrioritizer</strong>: Given two FlowFiles, the 
one that is oldest in the dataflow will be processed first. 'This is the 
default scheme that is used if no prioritizers are selected'.</p>
 </li>
 <li>
 <p><strong>PriorityAttributePrioritizer</strong>: Given two FlowFiles that 
both have a "priority" attribute, the one that has the highest priority value 
will be processed first. Note that an UpdateAttribute processor should be used 
to add the "priority" attribute to the FlowFiles before they reach a connection 
that has this prioritizer set. Values for the "priority" attribute may be 
alphanumeric, where "a" is a higher priority than "z", and "1" is a higher 
priority than "9", for example.</p>
@@ -3468,7 +3501,7 @@ Versioned flows are stored and organized
 <i class="fa icon-note" title="Note"></i>
 </td>
 <td class="content">
-To see the most recent version states, it may be necessary to right-click on 
the NiFi canvas and select `Refresh' from the context menu.
+To see the most recent version states, it may be necessary to right-click on 
the NiFi canvas and select 'Refresh' from the context menu.
 </td>
 </tr>
 </table>
@@ -3596,7 +3629,7 @@ The root process group can not be placed
 <i class="fa icon-warning" title="Warning"></i>
 </td>
 <td class="content">
-Variables do not support sensitive values and will be included when versioning 
a Process Group.
+Variables do not support sensitive values and will be included when versioning 
a Process Group. See <a 
href="user-guide.html#Variables_in_Versioned_Flows">Variables in Versioned 
Flows</a> for more information.
 </td>
 </tr>
 </table>
@@ -3744,6 +3777,239 @@ For "Change version" to be an available
 <p>A versioned process group can contain other versioned process groups.  
However, local changes to a parent process group cannot be reverted or saved if 
it contains a child process group that also has local changes.  The child 
process group must first be reverted or have its changes committed for those 
actions to be performed on the parent process group.</p>
 </div>
 </div>
+<div class="sect2">
+<h3 id="Variables_in_Versioned_Flows"><a class="anchor" 
href="user-guide.html#Variables_in_Versioned_Flows"></a>Variables in Versioned 
Flows</h3>
+<div class="paragraph">
+<p>Variables are included when a process group is placed under version 
control.  If a versioned flow is imported that references a variable not 
defined in the versioned process group, the reference is maintained if the 
variable exists.  If the referenced variable does not exist, a copy of the 
variable will be defined in the process group.  To illustrate, assume the 
variable “RPG_Var" is defined in the root process group:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/rpg-variable.png" alt="Root Process Group Defined Variable">
+</div>
+</div>
+<div class="paragraph">
+<p>A process group PG1 is created:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/PG1_process_group.png" alt="PG1 Process Group">
+</div>
+</div>
+<div class="paragraph">
+<p>The GetFile processor in PG1 references the variable "RPG_Var":</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img 
src="http://localhost:8080/nifi-docs/html/images/PG1_variable_reference.png"; 
alt="PG1 References RPG Variable">
+</div>
+</div>
+<div class="paragraph">
+<p>PG1 is saved as a versioned flow:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/PG1_versioned_flow.png" alt="PG1 Versioned Flow">
+</div>
+</div>
+<div class="paragraph">
+<p>If PG1 versioned flow is imported into this same NiFi instance:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/PG1_imported_same.png" alt="PG1 Imported to Same NiFi">
+</div>
+</div>
+<div class="paragraph">
+<p>the added GetFile processor will also reference the "RPG_Var" variable that 
exists in the root process group:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/PG1_variable_ref_2.png" alt="Both PG1 Reference RPG Variable">
+</div>
+</div>
+<div class="paragraph">
+<p>If PG1 versioned flow is imported into a different NiFi instance where 
"RPG_Var" does not exist:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/PG1_imported_diff.png" alt="PG1 Imported to Different NiFi">
+</div>
+</div>
+<div class="paragraph">
+<p>A "RPG_Var" variable is created in the PG1 process group:</p>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/PG1_variable_ref_PG.png" alt="PG1 References PG Variable 
Copy">
+</div>
+</div>
+</div>
+<div class="sect2">
+<h3 id="Restricted_Components_in_Versioned_Flows"><a class="anchor" 
href="user-guide.html#Restricted_Components_in_Versioned_Flows"></a>Restricted 
Components in Versioned Flows</h3>
+<div class="paragraph">
+<p>To import a versioned flow or revert local changes in a versioned flow, a 
user must have access to all the components in the versioned flow. As such, it 
is recommended that restricted components are created at the root process group 
level if they are to be utilized in versioned flows. Let&#8217;s walk through 
some examples to illustrate the benefits of this configuration. Assume the 
following:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>There are two users, "sys_admin" and "test_user" who have access to both 
view and modify the root process group.</p>
+</li>
+<li>
+<p>"sys_admin" has access to all restricted components.</p>
+<div class="imageblock">
+<div class="content">
+<img src="images/sys_admin-restricted-component-access-policy.png" 
alt="Sys_admin Restricted Component Access Policy">
+</div>
+</div>
+</li>
+<li>
+<p>"test_user" has access to restricted components requiring 'read filesystem' 
and 'write filesystem'.</p>
+<div class="imageblock">
+<div class="content">
+<img src="images/test_user-restricted-component-read-filesystem.png" 
alt="Test_user Restricted Component Read Filesystem">
+</div>
+</div>
+<div class="imageblock">
+<div class="content">
+<img src="images/test_user-restricted-component-write-filesystem.png" 
alt="Test_user Restricted Component Write Filesystem">
+</div>
+</div>
+</li>
+</ul>
+</div>
+<div class="sect3">
+<h4 id="restricted-controller-service-created-in-root-process-group"><a 
class="anchor" 
href="user-guide.html#restricted-controller-service-created-in-root-process-group"></a>Restricted
 Controller Service Created in Root Process Group</h4>
+<div class="paragraph">
+<p>In this first example, sys_admin creates a KeytabCredentialsService 
controller service at the root process group level.</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/keytabCredentialsService-rpg.png" 
alt="KeytabCredentialsService Controller Service RPG Level"></span></p>
+</div>
+<div class="paragraph">
+<p>KeytabCredentialService controller service is a restricted component that 
requires 'access keytab' permissions:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img 
src="images/keytabcredentialsservice-permissions.png" 
alt="KeytabCredentialService Required Permissions"></span></p>
+</div>
+<div class="paragraph">
+<p>Sys_admin creates a process group ABC containing a flow with GetFile and 
PutHDFS processors:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/abc-restricted-component-flow.png" 
alt="Restricted Component Flow"></span></p>
+</div>
+<div class="paragraph">
+<p>GetFile processor is a restricted component that requires 'write 
filesystem' and 'read filesystem' permissions:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/getfile-permissions.png" alt="GetFile 
Required Permissions"></span></p>
+</div>
+<div class="paragraph">
+<p>PutHDFS is a restricted component that requires 'write filesystem' 
permissions:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/puthdfs-permissions.png" alt="PutHDFS 
Required Permissions"></span></p>
+</div>
+<div class="paragraph">
+<p>The PutHDFS processor is configured to use the root process group level 
KeytabCredentialsService controller service:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/puthdfs-properties.png" alt="PutHDFS 
Properties"></span></p>
+</div>
+<div class="paragraph">
+<p>Sys_admin saves the process group as a versioned flow:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/abc-versioned-flow.png" alt="ABC 
Versioned Flow"></span></p>
+</div>
+<div class="paragraph">
+<p>Test_user changes the flow by removing the KeytabCredentialsService 
controller service:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/puthdfs-no-kerberosCS.png" 
alt="PutHDFS No Kerberos CS"></span></p>
+</div>
+<div class="paragraph">
+<p>If test_user chooses to revert this change:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/test_user-revert-local-changes.png" 
alt=""Test_user Revert Local Changes"></span></p>
+</div>
+<div class="paragraph">
+<p>the revert is successful:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/revert-success.png" alt="Revert Local 
Changes Successful"></span></p>
+</div>
+<div class="paragraph">
+<p>Additionally, if test_user chooses to import the ABC versioned flow:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/test_user-import-abc-flow.png" 
alt="Test_user Import Flow"></span></p>
+</div>
+<div class="paragraph">
+<p>The import is successful:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/test_user-import-success.png" 
alt="Test_user Import Successful"></span></p>
+</div>
+</div>
+<div class="sect3">
+<h4 id="restricted-controller-service-created-in-process-group"><a 
class="anchor" 
href="user-guide.html#restricted-controller-service-created-in-process-group"></a>Restricted
 Controller Service Created in Process Group</h4>
+<div class="paragraph">
+<p>Now, consider a second scenario where the controller service is created on 
the process group level.</p>
+</div>
+<div class="paragraph">
+<p>Sys_admin creates a process group XYZ:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/xyz-process-group.png" alt="XYZ 
Process Group"></span></p>
+</div>
+<div class="paragraph">
+<p>Sys_admin creates a KeytabCredentialsService controller service at the 
process group level:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/keytabCredentialsService-pg.png" 
alt="KeytabCredentialsService Controller Service PG Level"></span></p>
+</div>
+<div class="paragraph">
+<p>The same GetFile and PutHDFS flow is created in the process group:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/xyz-flow.png" alt="XYZ Versioned 
Flow"></span></p>
+</div>
+<div class="paragraph">
+<p>However, PutHDFS now references the process group level controller 
service:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/puthdfs-properties_2.png" alt="PutHDFS 
Properties"></span></p>
+</div>
+<div class="paragraph">
+<p>Sys_admin saves the process group as a versioned flow.</p>
+</div>
+<div class="paragraph">
+<p>Test_user changes the flow by removing the KeytabCredentialsService 
controller service. However, with this configuration, if test_user attempts to 
revert this change:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/test_user-revert-local-changes-2.png" 
alt="Test_user Revert Local Changes"></span></p>
+</div>
+<div class="paragraph">
+<p>the revert is unsuccessful because test_user does not have the 'access 
keytab' permissions required by the KeytabCredentialService controller 
service:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/revert-failure.png" alt="Revert Local 
Changes Fails"></span></p>
+</div>
+<div class="paragraph">
+<p>Similarly, if test_user tries to import the XYZ versioned flow:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/test_user-import-xyz-flow.png" 
alt="Test_user Import Flow"></span></p>
+</div>
+<div class="paragraph">
+<p>The import fails:</p>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="images/import-xyz-flow-fails.png" alt="XYZ 
Import Fails"></span></p>
+</div>
+</div>
+</div>
 </div>
 </div>
 <div class="sect1">
@@ -3883,6 +4149,11 @@ replay data at any point within the data
 (These features are described in depth below.)</p>
 </div>
 <div class="paragraph">
+<p>When authorization is enabled, accessessing Data Provenance information 
requires the 'query provenance' Global Policy as well as the 'view provenance'
+Component Policy for the component which generated the event. In addition, 
access to event details which include FlowFile attributes and content require
+the 'view the data' Component Policy for the component which generated the 
event.</p>
+</div>
+<div class="paragraph">
 <p><span class="image"><img src="images/provenance-annotated.png" 
alt="Provenance Table"></span></p>
 </div>
 <div class="sect2">
@@ -4319,7 +4590,7 @@ the <a href="administration-guide.html">
 </div>
 <div id="footer">
 <div id="footer-text">
-Last updated 2018-04-03 08:25:54 -07:00
+Last updated 2018-06-19 22:13:11 -07:00
 </div>
 </div>
 </body>


Reply via email to