Modified: nifi/site/trunk/docs/nifi-docs/html/administration-guide.html
URL: 
http://svn.apache.org/viewvc/nifi/site/trunk/docs/nifi-docs/html/administration-guide.html?rev=1771892&r1=1771891&r2=1771892&view=diff
==============================================================================
--- nifi/site/trunk/docs/nifi-docs/html/administration-guide.html (original)
+++ nifi/site/trunk/docs/nifi-docs/html/administration-guide.html Tue Nov 29 
12:03:34 2016
@@ -455,82 +455,83 @@ body.book #toc,body.book #preamble,body.
 <div id="toc" class="toc">
 <div id="toctitle">Table of Contents</div>
 <ul class="sectlevel1">
-<li><a href="administration-guide.html#system-requirements">System 
Requirements</a></li>
-<li><a href="administration-guide.html#how-to-install-and-start-nifi">How to 
install and start NiFi</a></li>
-<li><a 
href="administration-guide.html#configuration-best-practices">Configuration 
Best Practices</a></li>
-<li><a href="administration-guide.html#security-configuration">Security 
Configuration</a>
+<li><a href="#system-requirements">System Requirements</a></li>
+<li><a href="#how-to-install-and-start-nifi">How to install and start 
NiFi</a></li>
+<li><a href="#configuration-best-practices">Configuration Best 
Practices</a></li>
+<li><a href="#security-configuration">Security Configuration</a>
 <ul class="sectlevel2">
-<li><a href="administration-guide.html#tls-generation-toolkit">TLS Generation 
Toolkit</a></li>
+<li><a href="#tls-generation-toolkit">TLS Generation Toolkit</a></li>
 </ul>
 </li>
-<li><a href="administration-guide.html#user-authentication">User 
Authentication</a>
+<li><a href="#user-authentication">User Authentication</a>
 <ul class="sectlevel2">
-<li><a 
href="administration-guide.html#lightweight-directory-access-protocol-ldap">Lightweight
 Directory Access Protocol (LDAP)</a></li>
-<li><a 
href="administration-guide.html#kerberos_login_identity_provider">Kerberos</a></li>
+<li><a href="#lightweight-directory-access-protocol-ldap">Lightweight 
Directory Access Protocol (LDAP)</a></li>
+<li><a href="#kerberos_login_identity_provider">Kerberos</a></li>
 </ul>
 </li>
-<li><a 
href="administration-guide.html#multi-tenant-authorization">Multi-Tenant 
Authorization</a>
+<li><a href="#multi-tenant-authorization">Multi-Tenant Authorization</a>
 <ul class="sectlevel2">
-<li><a href="administration-guide.html#authorizer-configuration">Authorizer 
Configuration</a></li>
-<li><a href="administration-guide.html#authorizers-setup">Authorizers.xml 
Setup</a></li>
-<li><a 
href="administration-guide.html#config-users-access-policies">Configuring Users 
&amp; Access Policies</a></li>
+<li><a href="#authorizer-configuration">Authorizer Configuration</a></li>
+<li><a href="#authorizers-setup">Authorizers.xml Setup</a></li>
+<li><a href="#config-users-access-policies">Configuring Users &amp; Access 
Policies</a></li>
 </ul>
 </li>
-<li><a href="administration-guide.html#encryption">Encryption Configuration</a>
+<li><a href="#encryption">Encryption Configuration</a>
 <ul class="sectlevel2">
-<li><a href="administration-guide.html#key-derivation-functions">Key 
Derivation Functions</a></li>
-<li><a href="administration-guide.html#salt-and-iv-encoding">Salt and IV 
Encoding</a></li>
-<li><a 
href="administration-guide.html#java-cryptography-extension-jce-limited-strength-jurisdiction-policies">Java
 Cryptography Extension (JCE) Limited Strength Jurisdiction Policies</a></li>
-<li><a 
href="administration-guide.html#allow-insecure-cryptographic-modes">Allow 
Insecure Cryptographic Modes</a></li>
+<li><a href="#key-derivation-functions">Key Derivation Functions</a></li>
+<li><a href="#salt-and-iv-encoding">Salt and IV Encoding</a></li>
+<li><a 
href="#java-cryptography-extension-jce-limited-strength-jurisdiction-policies">Java
 Cryptography Extension (JCE) Limited Strength Jurisdiction Policies</a></li>
+<li><a href="#allow-insecure-cryptographic-modes">Allow Insecure Cryptographic 
Modes</a></li>
 </ul>
 </li>
-<li><a 
href="administration-guide.html#encrypted-passwords-in-configuration-files">Encrypted
 Passwords in Configuration Files</a>
+<li><a href="#encrypted-passwords-in-configuration-files">Encrypted Passwords 
in Configuration Files</a>
 <ul class="sectlevel2">
-<li><a href="administration-guide.html#encrypt-config_tool">Encrypt-Config 
Tool</a></li>
-<li><a href="administration-guide.html#encrypt-config_password">Password Key 
Derivation</a></li>
-<li><a href="administration-guide.html#encrypt-config_secure_prompt">Secure 
Prompt</a></li>
+<li><a href="#encrypt-config_tool">Encrypt-Config Tool</a></li>
+<li><a href="#encrypt-config_password">Password Key Derivation</a></li>
+<li><a href="#encrypt-config_secure_prompt">Secure Prompt</a></li>
 </ul>
 </li>
-<li><a href="administration-guide.html#clustering">Clustering 
Configuration</a></li>
-<li><a href="administration-guide.html#state_management">State Management</a>
+<li><a href="#clustering">Clustering Configuration</a></li>
+<li><a href="#state_management">State Management</a>
 <ul class="sectlevel2">
-<li><a href="administration-guide.html#state_providers">Configuring State 
Providers</a></li>
-<li><a href="administration-guide.html#embedded_zookeeper">Embedded ZooKeeper 
Server</a></li>
-<li><a href="administration-guide.html#zk_access_control">ZooKeeper Access 
Control</a></li>
-<li><a href="administration-guide.html#securing_zookeeper">Securing 
ZooKeeper</a></li>
+<li><a href="#state_providers">Configuring State Providers</a></li>
+<li><a href="#embedded_zookeeper">Embedded ZooKeeper Server</a></li>
+<li><a href="#zk_access_control">ZooKeeper Access Control</a></li>
+<li><a href="#securing_zookeeper">Securing ZooKeeper</a></li>
+<li><a href="#zookeeper_migrator">ZooKeeper Migrator</a></li>
 </ul>
 </li>
-<li><a href="administration-guide.html#bootstrap_properties">Bootstrap 
Properties</a></li>
-<li><a href="administration-guide.html#notification_services">Notification 
Services</a></li>
-<li><a href="administration-guide.html#kerberos_service">Kerberos Service</a>
+<li><a href="#bootstrap_properties">Bootstrap Properties</a></li>
+<li><a href="#notification_services">Notification Services</a></li>
+<li><a href="#kerberos_service">Kerberos Service</a>
 <ul class="sectlevel2">
-<li><a href="administration-guide.html#kerberos_service_notes">Notes</a></li>
+<li><a href="#kerberos_service_notes">Notes</a></li>
 </ul>
 </li>
-<li><a href="administration-guide.html#system_properties">System Properties</a>
+<li><a href="#system_properties">System Properties</a>
 <ul class="sectlevel2">
-<li><a href="administration-guide.html#core-properties-br">Core 
Properties<br></a></li>
-<li><a href="administration-guide.html#state-management-br">State 
Management<br></a></li>
-<li><a href="administration-guide.html#h2-settings">H2 Settings</a></li>
-<li><a href="administration-guide.html#flowfile-repository">FlowFile 
Repository</a></li>
-<li><a href="administration-guide.html#swap-management">Swap 
Management</a></li>
-<li><a href="administration-guide.html#content-repository">Content 
Repository</a></li>
-<li><a 
href="administration-guide.html#file-system-content-repository-properties">File 
System Content Repository Properties</a></li>
-<li><a 
href="administration-guide.html#volatile-content-repository-properties">Volatile
 Content Repository Properties</a></li>
-<li><a href="administration-guide.html#provenance-repository">Provenance 
Repository</a></li>
-<li><a 
href="administration-guide.html#persistent-provenance-repository-properties">Persistent
 Provenance Repository Properties</a></li>
-<li><a 
href="administration-guide.html#volatile-provenance-repository-properties">Volatile
 Provenance Repository Properties</a></li>
-<li><a href="administration-guide.html#component-status-repository">Component 
Status Repository</a></li>
-<li><a href="administration-guide.html#site_to_site_properties">Site to Site 
Properties</a></li>
-<li><a href="administration-guide.html#web-properties">Web Properties</a></li>
-<li><a href="administration-guide.html#security-properties">Security 
Properties</a></li>
-<li><a href="administration-guide.html#identity-mapping-properties">Identity 
Mapping Properties</a></li>
-<li><a href="administration-guide.html#cluster-common-properties">Cluster 
Common Properties</a></li>
-<li><a href="administration-guide.html#cluster-node-properties">Cluster Node 
Properties</a></li>
-<li><a href="administration-guide.html#claim_management">Claim 
Management</a></li>
-<li><a href="administration-guide.html#zookeeper-properties">ZooKeeper 
Properties</a></li>
-<li><a href="administration-guide.html#kerberos_properties">Kerberos 
Properties</a></li>
-<li><a href="administration-guide.html#custom_properties">Custom 
Properties</a></li>
+<li><a href="#core-properties-br">Core Properties<br></a></li>
+<li><a href="#state-management-br">State Management<br></a></li>
+<li><a href="#h2-settings">H2 Settings</a></li>
+<li><a href="#flowfile-repository">FlowFile Repository</a></li>
+<li><a href="#swap-management">Swap Management</a></li>
+<li><a href="#content-repository">Content Repository</a></li>
+<li><a href="#file-system-content-repository-properties">File System Content 
Repository Properties</a></li>
+<li><a href="#volatile-content-repository-properties">Volatile Content 
Repository Properties</a></li>
+<li><a href="#provenance-repository">Provenance Repository</a></li>
+<li><a href="#persistent-provenance-repository-properties">Persistent 
Provenance Repository Properties</a></li>
+<li><a href="#volatile-provenance-repository-properties">Volatile Provenance 
Repository Properties</a></li>
+<li><a href="#component-status-repository">Component Status Repository</a></li>
+<li><a href="#site_to_site_properties">Site to Site Properties</a></li>
+<li><a href="#web-properties">Web Properties</a></li>
+<li><a href="#security-properties">Security Properties</a></li>
+<li><a href="#identity-mapping-properties">Identity Mapping Properties</a></li>
+<li><a href="#cluster-common-properties">Cluster Common Properties</a></li>
+<li><a href="#cluster-node-properties">Cluster Node Properties</a></li>
+<li><a href="#claim_management">Claim Management</a></li>
+<li><a href="#zookeeper-properties">ZooKeeper Properties</a></li>
+<li><a href="#kerberos_properties">Kerberos Properties</a></li>
+<li><a href="#custom_properties">Custom Properties</a></li>
 </ul>
 </li>
 </ul>
@@ -538,10 +539,10 @@ body.book #toc,body.book #preamble,body.
 </div>
 <div id="content">
 <div class="sect1">
-<h2 id="system-requirements"><a class="anchor" 
href="administration-guide.html#system-requirements"></a>System 
Requirements</h2>
+<h2 id="system-requirements"><a class="anchor" 
href="#system-requirements"></a>System Requirements</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>Apache NiFi can run on something as simple as a laptop, but it can also be 
clustered across many enterprise-class servers. Therefore, the amount of 
hardware and memory needed will depend on the size and nature of the dataflow 
involved. The data is stored on disk while NiFi is processing it. So NiFi needs 
to have sufficient disk space allocated for its various repositories, 
particularly the content repository, flowfile repository, and provenance 
repository (see the <a 
href="administration-guide.html#system_properties">System Properties</a> 
section for more information about these repositories). NiFi has the following 
minimum system requirements:</p>
+<p>Apache NiFi can run on something as simple as a laptop, but it can also be 
clustered across many enterprise-class servers. Therefore, the amount of 
hardware and memory needed will depend on the size and nature of the dataflow 
involved. The data is stored on disk while NiFi is processing it. So NiFi needs 
to have sufficient disk space allocated for its various repositories, 
particularly the content repository, flowfile repository, and provenance 
repository (see the <a href="#system_properties">System Properties</a> section 
for more information about these repositories). NiFi has the following minimum 
system requirements:</p>
 </div>
 <div class="ulist">
 <ul>
@@ -589,12 +590,12 @@ body.book #toc,body.book #preamble,body.
 </ul>
 </div>
 <div class="paragraph">
-<p><strong>Note</strong> Under sustained and extremely high throughput the 
CodeCache settings may need to be tuned to avoid sudden performance loss.  See 
the <a href="administration-guide.html#bootstrap_properties">Bootstrap 
Properties</a> section for more information.</p>
+<p><strong>Note</strong> Under sustained and extremely high throughput the 
CodeCache settings may need to be tuned to avoid sudden performance loss.  See 
the <a href="#bootstrap_properties">Bootstrap Properties</a> section for more 
information.</p>
 </div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="how-to-install-and-start-nifi"><a class="anchor" 
href="administration-guide.html#how-to-install-and-start-nifi"></a>How to 
install and start NiFi</h2>
+<h2 id="how-to-install-and-start-nifi"><a class="anchor" 
href="#how-to-install-and-start-nifi"></a>How to install and start NiFi</h2>
 <div class="sectionbody">
 <div class="ulist">
 <ul>
@@ -610,7 +611,7 @@ body.book #toc,body.book #preamble,body.
 <div class="ulist">
 <ul>
 <li>
-<p>At a minimum, we recommend editing the <em>nifi.properties</em> file and 
entering a password for the nifi.sensitive.props.key (see <a 
href="administration-guide.html#system_properties">System Properties</a> 
below)</p>
+<p>At a minimum, we recommend editing the <em>nifi.properties</em> file and 
entering a password for the nifi.sensitive.props.key (see <a 
href="#system_properties">System Properties</a> below)</p>
 </li>
 </ul>
 </div>
@@ -665,7 +666,7 @@ body.book #toc,body.book #preamble,body.
 <div class="ulist">
 <ul>
 <li>
-<p>At a minimum, we recommend editing the <em>nifi.properties</em> file and 
entering a password for the nifi.sensitive.props.key (see <a 
href="administration-guide.html#system_properties">System Properties</a> 
below)</p>
+<p>At a minimum, we recommend editing the <em>nifi.properties</em> file and 
entering a password for the nifi.sensitive.props.key (see <a 
href="#system_properties">System Properties</a> below)</p>
 </li>
 </ul>
 </div>
@@ -677,12 +678,6 @@ body.book #toc,body.book #preamble,body.
 <p>Double-click run-nifi.bat. This runs NiFi in the foreground and waits for a 
Ctrl-C to initiate shutdown of NiFi</p>
 </li>
 <li>
-<p>Alternatively, to start NiFi in the background, double-click 
start-nifi.bat</p>
-</li>
-<li>
-<p>To stop NiFi running in the background, double-click stop-nifi.bat</p>
-</li>
-<li>
 <p>To see the current status of NiFi, double-click status-nifi.bat</p>
 </li>
 </ul>
@@ -719,12 +714,12 @@ body.book #toc,body.book #preamble,body.
 </ul>
 </div>
 <div class="paragraph">
-<p>See the <a href="administration-guide.html#system_properties">System 
Properties</a> section of this guide for more information about configuring 
NiFi repositories and configuration files.</p>
+<p>See the <a href="#system_properties">System Properties</a> section of this 
guide for more information about configuring NiFi repositories and 
configuration files.</p>
 </div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="configuration-best-practices"><a class="anchor" 
href="administration-guide.html#configuration-best-practices"></a>Configuration 
Best Practices</h2>
+<h2 id="configuration-best-practices"><a class="anchor" 
href="#configuration-best-practices"></a>Configuration Best Practices</h2>
 <div class="sectionbody">
 <div class="admonitionblock note">
 <table>
@@ -829,7 +824,7 @@ and for the partition(s) of interest add
 </div>
 </div>
 <div class="sect1">
-<h2 id="security-configuration"><a class="anchor" 
href="administration-guide.html#security-configuration"></a>Security 
Configuration</h2>
+<h2 id="security-configuration"><a class="anchor" 
href="#security-configuration"></a>Security Configuration</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>NiFi provides several different configuration options for security 
purposes. The most important properties are those under the
@@ -862,7 +857,7 @@ and for the partition(s) of interest add
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>nifi.security.keystoreType</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The type 
of Keystore. Must be either <code>PKCS12</code> or <code>JKS</code>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The type 
of Keystore. Must be either <code>PKCS12</code> or <code>JKS</code>.  JKS is 
the preferred type, PKCS12 files will be loaded with BouncyCastle 
provider.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>nifi.security.keystorePasswd</code></p></td>
@@ -879,7 +874,7 @@ and for the partition(s) of interest add
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>nifi.security.truststoreType</code></p></td>
-<td class="tableblock halign-left valign-top"><p class="tableblock">The type 
of the Truststore. Must be either <code>PKCS12</code> or 
<code>JKS</code>.</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">The type 
of the Truststore. Must be either <code>PKCS12</code> or <code>JKS</code>.  JKS 
is the preferred type, PKCS12 files will be loaded with BouncyCastle 
provider.</p></td>
 </tr>
 <tr>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>nifi.security.truststorePasswd</code></p></td>
@@ -917,11 +912,14 @@ the web server will REQUIRE certificate
 accomplished by setting the <code>nifi.remote.input.secure</code> and 
<code>nifi.cluster.protocol.is.secure</code> properties, respectively, to 
<code>true</code>.</p>
 </div>
 <div class="sect2">
-<h3 id="tls-generation-toolkit"><a class="anchor" 
href="administration-guide.html#tls-generation-toolkit"></a>TLS Generation 
Toolkit</h3>
+<h3 id="tls-generation-toolkit"><a class="anchor" 
href="#tls-generation-toolkit"></a>TLS Generation Toolkit</h3>
 <div class="paragraph">
 <p>In order to facilitate the secure setup of NiFi, you can use the 
<code>tls-toolkit</code> command line utility to automatically generate the 
required keystores, truststore, and relevant configuration files. This is 
especially useful for securing multiple NiFi nodes, which can be a tedious and 
error-prone process.</p>
 </div>
 <div class="paragraph">
+<p>Note: JKS keystores and truststores are recommended for NiFi.  This tool 
allows the specification of other keystore types on the command line but will 
ignore a type of PKCS12 for use as the truststore because that format has some 
compatibility issues between BouncyCastle and Oracle implementations.</p>
+</div>
+<div class="paragraph">
 <p>The <code>tls-toolkit</code> command line tool has two primary modes of 
operation:</p>
 </div>
 <div class="olist arabic">
@@ -935,7 +933,7 @@ accomplished by setting the <code>nifi.r
 </ol>
 </div>
 <div class="sect3">
-<h4 id="standalone"><a class="anchor" 
href="administration-guide.html#standalone"></a>Standalone</h4>
+<h4 id="standalone"><a class="anchor" href="#standalone"></a>Standalone</h4>
 <div class="paragraph">
 <p>Standalone mode is invoked by running <code>./bin/tls-toolkit.sh standalone 
-h</code> which prints the usage information along with descriptions of options 
that can be specified.</p>
 </div>
@@ -1000,12 +998,12 @@ accomplished by setting the <code>nifi.r
 </div>
 </div>
 <div class="sect3">
-<h4 id="client-server"><a class="anchor" 
href="administration-guide.html#client-server"></a>Client/Server</h4>
+<h4 id="client-server"><a class="anchor" 
href="#client-server"></a>Client/Server</h4>
 <div class="paragraph">
 <p>Client/Server mode relies on a long-running Certificate Authority (CA) to 
issue certificates.  The CA can be stopped when you’re not bringing nodes 
online.</p>
 </div>
 <div class="sect4">
-<h5 id="server"><a class="anchor" 
href="administration-guide.html#server"></a>Server</h5>
+<h5 id="server"><a class="anchor" href="#server"></a>Server</h5>
 <div class="paragraph">
 <p>The CA server is invoked by running <code>./bin/tls-toolkit server 
-h</code> prints the usage information along with descriptions of options that 
can be specified.</p>
 </div>
@@ -1030,7 +1028,7 @@ accomplished by setting the <code>nifi.r
 </div>
 </div>
 <div class="sect4">
-<h5 id="client"><a class="anchor" 
href="administration-guide.html#client"></a>Client</h5>
+<h5 id="client"><a class="anchor" href="#client"></a>Client</h5>
 <div class="paragraph">
 <p>The client can be used to request new Certificates from the CA.  The client 
utility generates a keypair and Certificate Signing Request (CSR) and sends the 
CSR to the Certificate Authority.  The client is invoked by running 
<code>./bin/tls-toolkit.sh client -h</code> which prints the usage information 
along with descriptions of options that can be specified.</p>
 </div>
@@ -1068,7 +1066,7 @@ accomplished by setting the <code>nifi.r
 </div>
 </div>
 <div class="sect1">
-<h2 id="user-authentication"><a class="anchor" 
href="administration-guide.html#user-authentication"></a>User 
Authentication</h2>
+<h2 id="user-authentication"><a class="anchor" 
href="#user-authentication"></a>User Authentication</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>NiFi supports user authentication via client certificates or via 
username/password. Username/password authentication is performed by a <em>Login 
Identity
@@ -1080,13 +1078,13 @@ to use is configured in two properties i
 The <code>nifi.security.user.login.identity.provider</code> property indicates 
which of the configured Login Identity Provider should be
 used. If this property is not configured, NiFi will not support 
username/password authentication and will require client
 certificates for authenticating users over HTTPS. By default, this property is 
not configured meaning that username/password must be
-explicity enabled.</p>
+explicitly enabled.</p>
 </div>
 <div class="paragraph">
 <p>NiFi does not perform user authentication over HTTP. Using HTTP all users 
will be granted all roles.</p>
 </div>
 <div class="sect2">
-<h3 id="lightweight-directory-access-protocol-ldap"><a class="anchor" 
href="administration-guide.html#lightweight-directory-access-protocol-ldap"></a>Lightweight
 Directory Access Protocol (LDAP)</h3>
+<h3 id="lightweight-directory-access-protocol-ldap"><a class="anchor" 
href="#lightweight-directory-access-protocol-ldap"></a>Lightweight Directory 
Access Protocol (LDAP)</h3>
 <div class="paragraph">
 <p>Below is an example and description of configuring a Login Identity 
Provider that integrates with a Directory Server to authenticate users.</p>
 </div>
@@ -1118,6 +1116,7 @@ explicity enabled.</p>
     &lt;property name="User Search Base"&gt;&lt;/property&gt;
     &lt;property name="User Search Filter"&gt;&lt;/property&gt;
 
+    &lt;property name="Identity Strategy"&gt;USE_DN&lt;/property&gt;
     &lt;property name="Authentication Expiration"&gt;12 hours&lt;/property&gt;
 &lt;/provider&gt;</pre>
 </div>
@@ -1220,11 +1219,16 @@ explicity enabled.</p>
 <td class="tableblock halign-left valign-top"><p class="tableblock"><code>User 
Search Filter</code></p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Filter for 
searching for users against the <em>User Search Base</em>. (i.e. 
sAMAccountName={0}). The user specified name is inserted into 
<em>{0}</em>.</p></td>
 </tr>
+<tr>
+<td class="tableblock halign-left valign-top"><p 
class="tableblock"><code>Identity Strategy</code></p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Strategy 
to identify users. Possible values are USE_DN and USE_USERNAME. The default 
functionality if this property is missing is USE_DN in order to retain backward
+compatibility. USE_DN will use the full DN of the user entry if possible. 
USE_USERNAME will use the username the user logged in with.</p></td>
+</tr>
 </tbody>
 </table>
 </div>
 <div class="sect2">
-<h3 id="kerberos_login_identity_provider"><a class="anchor" 
href="administration-guide.html#kerberos_login_identity_provider"></a>Kerberos</h3>
+<h3 id="kerberos_login_identity_provider"><a class="anchor" 
href="#kerberos_login_identity_provider"></a>Kerberos</h3>
 <div class="paragraph">
 <p>Below is an example and description of configuring a Login Identity 
Provider that integrates with a Kerberos Key Distribution Center (KDC) to 
authenticate users.</p>
 </div>
@@ -1276,13 +1280,13 @@ explicity enabled.</p>
 </tbody>
 </table>
 <div class="paragraph">
-<p>See also <a href="administration-guide.html#kerberos_service">Kerberos 
Service</a> to allow single sign-on access via client Kerberos tickets.</p>
+<p>See also <a href="#kerberos_service">Kerberos Service</a> to allow single 
sign-on access via client Kerberos tickets.</p>
 </div>
 </div>
 </div>
 </div>
 <div class="sect1">
-<h2 id="multi-tenant-authorization"><a class="anchor" 
href="administration-guide.html#multi-tenant-authorization"></a>Multi-Tenant 
Authorization</h2>
+<h2 id="multi-tenant-authorization"><a class="anchor" 
href="#multi-tenant-authorization"></a>Multi-Tenant Authorization</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>After you have configured NiFi to run securely and with an authentication 
mechanism, you must configure who has access to the system, and the level of 
their access.
@@ -1291,7 +1295,7 @@ parts of the dataflow, with varying leve
 user has privileges to perform that action. These privileges are defined by 
policies that you can apply system-wide or to individual components.</p>
 </div>
 <div class="sect2">
-<h3 id="authorizer-configuration"><a class="anchor" 
href="administration-guide.html#authorizer-configuration"></a>Authorizer 
Configuration</h3>
+<h3 id="authorizer-configuration"><a class="anchor" 
href="#authorizer-configuration"></a>Authorizer Configuration</h3>
 <div class="paragraph">
 <p>An <em>authorizer</em> grants users the privileges to manage users and 
policies by creating preliminary authorizations at startup.</p>
 </div>
@@ -1310,7 +1314,7 @@ user has privileges to perform that acti
 </div>
 </div>
 <div class="sect2">
-<h3 id="authorizers-setup"><a class="anchor" 
href="administration-guide.html#authorizers-setup"></a>Authorizers.xml 
Setup</h3>
+<h3 id="authorizers-setup"><a class="anchor" 
href="#authorizers-setup"></a>Authorizers.xml Setup</h3>
 <div class="paragraph">
 <p>The <em>authorizers.xml</em> file is used to define and configure available 
authorizers.  The default authorizer is the FileAuthorizer, however, you can 
develop additional authorizers as extensions.  The FileAuthorizer has the 
following properties:</p>
 </div>
@@ -1334,7 +1338,7 @@ user has privileges to perform that acti
 </ul>
 </div>
 <div class="sect3">
-<h4 id="initial-admin-identity"><a class="anchor" 
href="administration-guide.html#initial-admin-identity"></a>Initial Admin 
Identity  (New NiFi Instance)</h4>
+<h4 id="initial-admin-identity"><a class="anchor" 
href="#initial-admin-identity"></a>Initial Admin Identity  (New NiFi 
Instance)</h4>
 <div class="paragraph">
 <p>If you are setting up a secured NiFi instance for the first time, you must 
manually designate an “Initial Admin Identity” in the 
<em>authorizers.xml</em> file.  This initial admin user is granted access to 
the UI and given the ability to create additional users, groups, and policies. 
The value of this property could be a DN (when using certificates or LDAP) or a 
Kerberos principal.  If you are the NiFi administrator, add yourself as the 
“Initial Admin Identity”.</p>
 </div>
@@ -1359,7 +1363,7 @@ user has privileges to perform that acti
 </div>
 </div>
 <div class="paragraph">
-<p>Here is a example Kerberos entry using the name John Smith and realm 
<code>NIFI.APACHE.ORG</code>:</p>
+<p>Here is an example Kerberos entry using the name John Smith and realm 
<code>NIFI.APACHE.ORG</code>:</p>
 </div>
 <div class="listingblock">
 <div class="content">
@@ -1379,7 +1383,7 @@ user has privileges to perform that acti
 </div>
 </div>
 <div class="paragraph">
-<p>After you have edited and saved the <em>authorizers.xml</em> file, restart 
NiFi.  The “Initial Admin Identity” user and administrative policies are 
added to the <em>authorizations.xml</em> file during restart. Once NiFi starts, 
the “Initial Admin Identity” user is able to access the UI and begin 
managing users, groups, and policies.</p>
+<p>After you have edited and saved the <em>authorizers.xml</em> file, restart 
NiFi.  The “Initial Admin Identity” user and administrative policies are 
added to the <em>users.xml</em> and <em>authorizations.xml</em> files during 
restart. Once NiFi starts, the “Initial Admin Identity” user is able to 
access the UI and begin managing users, groups, and policies.</p>
 </div>
 <div class="admonitionblock note">
 <table>
@@ -1395,7 +1399,7 @@ For a brand new secure flow, providing t
 </div>
 </div>
 <div class="sect3">
-<h4 id="legacy-authorized-users"><a class="anchor" 
href="administration-guide.html#legacy-authorized-users"></a>Legacy Authorized 
Users (NiFi Instance Upgrade)</h4>
+<h4 id="legacy-authorized-users"><a class="anchor" 
href="#legacy-authorized-users"></a>Legacy Authorized Users (NiFi Instance 
Upgrade)</h4>
 <div class="paragraph">
 <p>If you are upgrading from a 0.x NiFi instance, you can convert your 
previously configured users and roles to the multi-tenant authorization model.  
In the <em>authorizers.xml</em> file, specify the location of your existing 
<em>authorized-users.xml</em> file in the “Legacy Authorized Users File” 
property.</p>
 </div>
@@ -1417,7 +1421,7 @@ For a brand new secure flow, providing t
 </div>
 </div>
 <div class="paragraph">
-<p>After you have edited and saved the <em>authorizers.xml</em> file, restart 
NiFi. Users and roles from the <em>authorized-users.xml</em> file are converted 
and added as identities and policies in the <em>authorizations.xml</em> file.  
Once the application starts, users who previously had a legacy Administrator 
role can access the UI and begin managing users, groups, and policies.</p>
+<p>After you have edited and saved the <em>authorizers.xml</em> file, restart 
NiFi. Users and roles from the <em>authorized-users.xml</em> file are converted 
and added as identities and policies in the <em>users.xml</em> and 
<em>authorizations.xml</em> files.  Once the application starts, users who 
previously had a legacy Administrator role can access the UI and begin managing 
users, groups, and policies.</p>
 </div>
 <div class="paragraph">
 <p>Here is a summary of policies assigned to each legacy role if the NiFi 
instance has an existing flow.xml.gz:</p>
@@ -1544,6 +1548,15 @@ For a brand new secure flow, providing t
 <td class="tableblock halign-center valign-top"></td>
 </tr>
 <tr>
+<td class="tableblock halign-right valign-top"><p 
class="tableblock"><strong>access restricted components</strong></p></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-center valign-top"><p 
class="tableblock"><strong>*</strong></p></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-center valign-top"></td>
+<td class="tableblock halign-center valign-top"></td>
+</tr>
+<tr>
 <td class="tableblock halign-right valign-top"><p 
class="tableblock"><strong>view the data</strong></p></td>
 <td class="tableblock halign-center valign-top"></td>
 <td class="tableblock halign-center valign-top"><p 
class="tableblock"><strong>*</strong></p></td>
@@ -1582,7 +1595,7 @@ For a brand new secure flow, providing t
 </tbody>
 </table>
 <div class="paragraph">
-<p>For details on the policies in the table, see <a 
href="administration-guide.html#access-policies">Access Policies</a>.</p>
+<p>For details on the policies in the table, see <a 
href="#access-policies">Access Policies</a>.</p>
 </div>
 <div class="admonitionblock note">
 <table>
@@ -1610,7 +1623,7 @@ Do not manually edit the <em>authorizati
 </div>
 </div>
 <div class="sect3">
-<h4 id="cluster-node-identities"><a class="anchor" 
href="administration-guide.html#cluster-node-identities"></a>Cluster Node 
Identities</h4>
+<h4 id="cluster-node-identities"><a class="anchor" 
href="#cluster-node-identities"></a>Cluster Node Identities</h4>
 <div class="paragraph">
 <p>If you are running NiFi in a clustered environment, you must specify the 
identities for each node.  The authorization policies required for the nodes to 
communicate are created during startup.</p>
 </div>
@@ -1656,7 +1669,7 @@ In a cluster, all nodes must have the sa
 </div>
 </div>
 <div class="sect2">
-<h3 id="config-users-access-policies"><a class="anchor" 
href="administration-guide.html#config-users-access-policies"></a>Configuring 
Users &amp; Access Policies</h3>
+<h3 id="config-users-access-policies"><a class="anchor" 
href="#config-users-access-policies"></a>Configuring Users &amp; Access 
Policies</h3>
 <div class="paragraph">
 <p>This section describes:</p>
 </div>
@@ -1680,34 +1693,34 @@ In a cluster, all nodes must have the sa
 <i class="fa icon-note" title="Note"></i>
 </td>
 <td class="content">
-Instructions requiring interaction with the UI assume the application is being 
accessed by User1, a user with administrator privileges, such as the “Initial 
Admin Identity” user or a converted legacy admin user (see <a 
href="administration-guide.html#authorizers-setup">Authorizers.xml Setup</a>).
+Instructions requiring interaction with the UI assume the application is being 
accessed by User1, a user with administrator privileges, such as the “Initial 
Admin Identity” user or a converted legacy admin user (see <a 
href="#authorizers-setup">Authorizers.xml Setup</a>).
 </td>
 </tr>
 </table>
 </div>
 <div class="sect3">
-<h4 id="creating-users-groups"><a class="anchor" 
href="administration-guide.html#creating-users-groups"></a>Creating Users and 
Groups</h4>
+<h4 id="creating-users-groups"><a class="anchor" 
href="#creating-users-groups"></a>Creating Users and Groups</h4>
 <div class="paragraph">
 <p>From the UI, select “Users” from the Global Menu.  This opens a dialog 
to create and manage users and groups.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/nifi-users-dialog.png" alt="NiFi Users 
Dialog"></span></p>
+<p><span class="image"><img src="./images/nifi-users-dialog.png" alt="NiFi 
Users Dialog"></span></p>
 </div>
 <div class="paragraph">
-<p>Click the Add icon (<span class="image"><img src="images/iconAddUser.png" 
alt="Add User Icon"></span>).  To create a user, enter the <em>Identity</em> 
information relevant to the authentication method chosen to secure your NiFi 
instance.  Click OK.</p>
+<p>Click the Add icon (<span class="image"><img src="./images/iconAddUser.png" 
alt="Add User Icon"></span>).  To create a user, enter the <em>Identity</em> 
information relevant to the authentication method chosen to secure your NiFi 
instance.  Click OK.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user-creation-dialog.png" alt="User 
Creation Dialog"></span></p>
+<p><span class="image"><img src="./images/user-creation-dialog.png" alt="User 
Creation Dialog"></span></p>
 </div>
 <div class="paragraph">
 <p>To create a group, select the “Group” radio button, enter the name of 
the group and select the users to be included in the group.  Click OK.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/group-creation-dialog.png" alt="Group 
Creation Dialog"></span></p>
+<p><span class="image"><img src="./images/group-creation-dialog.png" 
alt="Group Creation Dialog"></span></p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="access-policies"><a class="anchor" 
href="administration-guide.html#access-policies"></a>Access Policies</h4>
+<h4 id="access-policies"><a class="anchor" href="#access-policies"></a>Access 
Policies</h4>
 <div class="paragraph">
 <p>You can manage the ability for users and groups to view or modify NiFi 
resources using <em>access policies</em>.  There are two types of access 
policies that can be applied to a resource:</p>
 </div>
@@ -1725,7 +1738,7 @@ Instructions requiring interaction with
 <p>You can create and apply access policies on both global and component 
levels.</p>
 </div>
 <div class="sect4">
-<h5 id="global-access-policies"><a class="anchor" 
href="administration-guide.html#global-access-policies"></a>Global Access 
Policies</h5>
+<h5 id="global-access-policies"><a class="anchor" 
href="#global-access-policies"></a>Global Access Policies</h5>
 <div class="paragraph">
 <p>Global access policies govern the following system level authorizations:</p>
 </div>
@@ -1759,6 +1772,11 @@ Instructions requiring interaction with
 <td class="tableblock halign-left valign-top"><p class="tableblock">Data 
Provenance</p></td>
 </tr>
 <tr>
+<td class="tableblock halign-left valign-top"><p class="tableblock">access 
restricted components</p></td>
+<td class="tableblock halign-left valign-top"><p class="tableblock">Allows 
users to create/modify restricted components assuming otherwise sufficient 
permissions</p></td>
+<td class="tableblock halign-left valign-top"><p 
class="tableblock">N/A</p></td>
+</tr>
+<tr>
 <td class="tableblock halign-left valign-top"><p class="tableblock">access all 
policies</p></td>
 <td class="tableblock halign-left valign-top"><p class="tableblock">Allows 
users to view/modify the policies for all components</p></td>
 <td class="tableblock halign-left valign-top"><p 
class="tableblock">Policies</p></td>
@@ -1792,7 +1810,7 @@ Instructions requiring interaction with
 </table>
 </div>
 <div class="sect4">
-<h5 id="component-level-access-policies"><a class="anchor" 
href="administration-guide.html#component-level-access-policies"></a>Component 
Level Access Policies</h5>
+<h5 id="component-level-access-policies"><a class="anchor" 
href="#component-level-access-policies"></a>Component Level Access Policies</h5>
 <div class="paragraph">
 <p>Component level access policies govern the following component level 
authorizations:</p>
 </div>
@@ -1849,19 +1867,19 @@ Instructions requiring interaction with
 <i class="fa icon-note" title="Note"></i>
 </td>
 <td class="content">
-You can apply access policies to all component types except connections.  
Connection authorizations are inferred by the individual access policies on the 
source and destination components of the connection, as well as the access 
policy of the process group containing the components.  This is discussed in 
more detail in the <a 
href="administration-guide.html#creating-a-connection">Creating a 
Connection</a> and <a 
href="administration-guide.html#editing-a-connection">Editing a Connection</a> 
examples below.
+You can apply access policies to all component types except connections.  
Connection authorizations are inferred by the individual access policies on the 
source and destination components of the connection, as well as the access 
policy of the process group containing the components.  This is discussed in 
more detail in the <a href="#creating-a-connection">Creating a Connection</a> 
and <a href="#editing-a-connection">Editing a Connection</a> examples below.
 </td>
 </tr>
 </table>
 </div>
 </div>
 <div class="sect4">
-<h5 id="access-policy-inheritance"><a class="anchor" 
href="administration-guide.html#access-policy-inheritance"></a>Access Policy 
Inheritance</h5>
+<h5 id="access-policy-inheritance"><a class="anchor" 
href="#access-policy-inheritance"></a>Access Policy Inheritance</h5>
 <div class="paragraph">
 <p>An administrator does not need to manually create policies for every 
component in the dataflow.  To reduce the amount of time admins spend on 
authorization management, policies are inherited from parent resource to child 
resource.  For example, if a user is given access to view and modify a process 
group, that user can also view and modify the components in the process group.  
Policy inheritance enables an administrator to assign policies at one time and 
have the policies apply throughout the entire dataflow.</p>
 </div>
 <div class="paragraph">
-<p>You can override an inherited policy (as described in the <a 
href="administration-guide.html#moving-a-processor">Moving a Processor</a> 
example below).  Overriding a policy removes the inherited policy, breaking the 
chain of inheritance from parent to child, and creates a replacement policy to 
add users as desired.  Inherited policies and their users can be restored by 
deleting the replacement policy.</p>
+<p>You can override an inherited policy (as described in the <a 
href="#moving-a-processor">Moving a Processor</a> example below).  Overriding a 
policy removes the inherited policy, breaking the chain of inheritance from 
parent to child, and creates a replacement policy to add users as desired.  
Inherited policies and their users can be restored by deleting the replacement 
policy.</p>
 </div>
 <div class="admonitionblock note">
 <table>
@@ -1875,10 +1893,22 @@ You can apply access policies to all com
 </tr>
 </table>
 </div>
+<div class="admonitionblock note">
+<table>
+<tr>
+<td class="icon">
+<i class="fa icon-note" title="Note"></i>
+</td>
+<td class="content">
+You cannot modify the users/groups on an inherited policy.  Users and groups 
can only be added or removed from a parent policy or an override policy.
+</td>
+</tr>
+</table>
+</div>
 </div>
 </div>
 <div class="sect3">
-<h4 id="access-policy-config-examples"><a class="anchor" 
href="administration-guide.html#access-policy-config-examples"></a>Access 
Policy Configuration Examples</h4>
+<h4 id="access-policy-config-examples"><a class="anchor" 
href="#access-policy-config-examples"></a>Access Policy Configuration 
Examples</h4>
 <div class="paragraph">
 <p>The most effective way to understand how to create and apply access 
policies is to walk through some common examples.  The following scenarios 
assume User1 is an administrator and User2 is a newly added user that has only 
been given access to the UI.</p>
 </div>
@@ -1886,13 +1916,13 @@ You can apply access policies to all com
 <p>Let’s begin with two processors on the canvas as our starting point: 
GenerateFlowFile and LogAttribute.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/access-policy-config-start.png" 
alt="Access Policy Config Start"></span></p>
+<p><span class="image"><img src="./images/access-policy-config-start.png" 
alt="Access Policy Config Start"></span></p>
 </div>
 <div class="paragraph">
 <p>User1 can add components to the dataflow and is able to move, edit and 
connect all processors.  The details and properties of the root process group 
and processors are visible to User1.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user1-full-access.png" alt="User1 Full 
Access"></span></p>
+<p><span class="image"><img src="./images/user1-full-access.png" alt="User1 
Full Access"></span></p>
 </div>
 <div class="paragraph">
 <p>User1 wants to maintain their current privileges to the dataflow and its 
components.</p>
@@ -1901,10 +1931,10 @@ You can apply access policies to all com
 <p>User2 is unable to add components to the dataflow or move, edit, or connect 
components.  The details and properties of the root process group and 
processors are hidden from User2.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user2-restricted-access.png" 
alt="User2 Restricted Access"></span></p>
+<p><span class="image"><img src="./images/user2-restricted-access.png" 
alt="User2 Restricted Access"></span></p>
 </div>
 <div class="sect4">
-<h5 id="moving-a-processor"><a class="anchor" 
href="administration-guide.html#moving-a-processor"></a>Moving a Processor</h5>
+<h5 id="moving-a-processor"><a class="anchor" 
href="#moving-a-processor"></a>Moving a Processor</h5>
 <div class="paragraph">
 <p>To allow User2 to move the GenerateFlowFile processor in the dataflow and 
only that processor, User1 performs the following steps:</p>
 </div>
@@ -1914,33 +1944,43 @@ You can apply access policies to all com
 <p>Select the GenerateFlowFile processor so that it is highlighted.</p>
 </li>
 <li>
-<p>Select the Access Policies icon (<span class="image"><img 
src="images/iconAccessPolicies.png" alt="Access Policies Icon"></span>) from 
the Operate palette and the Access Policies dialog opens.</p>
+<p>Select the Access Policies icon (<span class="image"><img 
src="./images/iconAccessPolicies.png" alt="Access Policies Icon"></span>) from 
the Operate palette and the Access Policies dialog opens.</p>
 </li>
 <li>
 <p>Select “modify the component” from the policy drop-down.
-<span class="image"><img src="images/processor-modify-policy.png" 
alt="Processor Modify Policy"></span>
+<span class="image"><img src="./images/processor-modify-policy.png" 
alt="Processor Modify Policy"></span>
 The “modify the component” policy that currently exists on the processor 
(child) is the “modify the component” policy inherited from the root 
process group (parent) on which User1 has privileges.</p>
 </li>
 <li>
-<p>Select the Override link in the policy inheritance message to create a 
replacement policy.</p>
+<p>Select the Override link in the policy inheritance message.  When creating 
the replacement policy, you are given a choice to override with a copy of the 
inherited policy or an empty policy.</p>
 </li>
+</ol>
+</div>
+<div class="paragraph">
+<p><span class="image"><img src="./images/override_policy_copy_empty.png" 
alt="Create Override Policy"></span></p>
+</div>
+<div class="paragraph">
+<p>Select the Override button to create a copy.</p>
+</div>
+<div class="olist arabic">
+<ol class="arabic" start="5">
 <li>
-<p>On the replacement policy that is created, select the Add User icon (<span 
class="image"><img src="images/iconAddUser.png" alt="Add User Icon"></span>). 
Find or enter User1 in the User Identity field and select OK.  Select the Add 
User icon again, find or enter User2 and select OK.</p>
+<p>On the replacement policy that is created, select the Add User icon (<span 
class="image"><img src="./images/iconAddUser.png" alt="Add User Icon"></span>). 
Find or enter User2 in the User Identity field and select OK.</p>
 </li>
 </ol>
 </div>
 <div class="paragraph">
-<p><span class="image"><img 
src="images/processor-replacement-modify-policy.png" alt="Processor Replacement 
Modify Policy"></span></p>
+<p><span class="image"><img 
src="./images/processor-replacement-modify-policy.png" alt="Processor 
Replacement Modify Policy"></span></p>
 </div>
 <div class="paragraph">
 <p>With these changes, User1 maintains the ability to move both processors on 
the canvas.  User2 can now move the GenerateFlowFile processor but cannot move 
the LogAttribute processor.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user2-moved-processor.png" alt="User2 
Moved Processor"></span></p>
+<p><span class="image"><img src="./images/user2-moved-processor.png" 
alt="User2 Moved Processor"></span></p>
 </div>
 </div>
 <div class="sect4">
-<h5 id="editing-a-processor"><a class="anchor" 
href="administration-guide.html#editing-a-processor"></a>Editing a 
Processor</h5>
+<h5 id="editing-a-processor"><a class="anchor" 
href="#editing-a-processor"></a>Editing a Processor</h5>
 <div class="paragraph">
 <p>In the “Moving a Processor” example above, User2 was added to the 
“modify the component” policy for GenerateFlowFile.  Without the ability to 
view the processor properties, User2 is unable to modify the processor’s 
configuration.  In order to edit a component, a user must be on both the 
“view the component” and “modify the component” policies. To implement 
this, User1 performs the following steps:</p>
 </div>
@@ -1950,44 +1990,44 @@ The “modify the component” pol
 <p>Select the GenerateFlowFile processor.</p>
 </li>
 <li>
-<p>Select the Access Policies icon (<span class="image"><img 
src="images/iconAccessPolicies.png" alt="Access Policies Icon"></span>) from 
the Operate palette and the Access Policies dialog opens.</p>
+<p>Select the Access Policies icon (<span class="image"><img 
src="./images/iconAccessPolicies.png" alt="Access Policies Icon"></span>) from 
the Operate palette and the Access Policies dialog opens.</p>
 </li>
 <li>
 <p>Select "view the component” from the policy drop-down.
-<span class="image"><img src="images/processor-view-policy.png" alt="Processor 
View Policy"></span>
+<span class="image"><img src="./images/processor-view-policy.png" 
alt="Processor View Policy"></span>
 The view the component” policy that currently exists on the processor 
(child) is the "view the component” policy inherited from the root process 
group (parent) on which User1 has privileges.</p>
 </li>
 <li>
-<p>Select the Override link in the policy inheritance message to create a 
replacement policy.</p>
+<p>Select the Override link in the policy inheritance message, keep the 
default of Copy policy and select the Override button.</p>
 </li>
 <li>
-<p>On the replacement policy that is created, select the Add User icon (<span 
class="image"><img src="images/iconAddUser.png" alt="Add User Icon"></span>). 
Find or enter User1 in the User Identity field and select OK.  Select the Add 
User icon again, find or enter User2 and select OK.</p>
+<p>On the override policy that is created, select the Add User icon (<span 
class="image"><img src="./images/iconAddUser.png" alt="Add User Icon"></span>). 
Find or enter User2 in the User Identity field and select OK.</p>
 </li>
 </ol>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/processor-replacement-view-policy.png" 
alt="Processor Replacement View Policy"></span></p>
+<p><span class="image"><img 
src="./images/processor-replacement-view-policy.png" alt="Processor Replacement 
View Policy"></span></p>
 </div>
 <div class="paragraph">
 <p>With these changes, User1 maintains the ability to view and edit the 
processors on the canvas. User2 can now view and edit the GenerateFlowFile 
processor.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user2-edit-processor.png" alt="User2 
Edit Processor"></span></p>
+<p><span class="image"><img src="./images/user2-edit-processor.png" alt="User2 
Edit Processor"></span></p>
 </div>
 </div>
 <div class="sect4">
-<h5 id="creating-a-connection"><a class="anchor" 
href="administration-guide.html#creating-a-connection"></a>Creating a 
Connection</h5>
+<h5 id="creating-a-connection"><a class="anchor" 
href="#creating-a-connection"></a>Creating a Connection</h5>
 <div class="paragraph">
 <p>With the access policies configured as discussed in the previous two 
examples, User1 is able to connect GenerateFlowFile to LogAttribute:</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user1-create-connection.png" 
alt="User1 Create Connection"></span></p>
+<p><span class="image"><img src="./images/user1-create-connection.png" 
alt="User1 Create Connection"></span></p>
 </div>
 <div class="paragraph">
 <p>User2 cannot make the connection:</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user2-no-connection.png" alt="User2 No 
Connection"></span></p>
+<p><span class="image"><img src="./images/user2-no-connection.png" alt="User2 
No Connection"></span></p>
 </div>
 <div class="paragraph">
 <p>This is because:</p>
@@ -1995,10 +2035,10 @@ The view the component” policy that
 <div class="ulist">
 <ul>
 <li>
-<p>User2 does not have modify access on the process group and is therefore not 
able to create a connection.</p>
+<p>User2 does not have modify access on the process group.</p>
 </li>
 <li>
-<p>Even though User2 has view and modify access to the source component 
(GenerateFlowFile), User2 does not have any access policy on the destination 
component (LogAttribute).</p>
+<p>Even though User2 has view and modify access to the source component 
(GenerateFlowFile), User2 does not have an access policy on the destination 
component (LogAttribute).</p>
 </li>
 </ul>
 </div>
@@ -2011,56 +2051,55 @@ The view the component” policy that
 <p>Select the root process group. The Operate palette is updated with details 
for the root process group.</p>
 </li>
 <li>
-<p>Select the Access Policies icon (<span class="image"><img 
src="images/iconAccessPolicies.png" alt="Access Policies Icon"></span>) from 
the Operate palette and the Access Policies dialog opens.</p>
+<p>Select the Access Policies icon (<span class="image"><img 
src="./images/iconAccessPolicies.png" alt="Access Policies Icon"></span>) from 
the Operate palette and the Access Policies dialog opens.</p>
 </li>
 <li>
 <p>Select "modify the component” from the policy drop-down.
-<span class="image"><img src="images/process-group-modify-policy.png" 
alt="Process Group Modify Policy"></span>
-[start=4]</p>
+<span class="image"><img src="./images/process-group-modify-policy.png" 
alt="Process Group Modify Policy"></span></p>
 </li>
 <li>
-<p>Select the Add User icon (<span class="image"><img 
src="images/iconAddUser.png" alt="Add User Icon"></span>). Find or enter User2 
and select OK.</p>
+<p>Select the Add User icon (<span class="image"><img 
src="./images/iconAddUser.png" alt="Add User Icon"></span>). Find or enter 
User2 and select OK.</p>
 </li>
 </ol>
 </div>
 <div class="paragraph">
-<p><span class="image"><img 
src="images/process-group-modify-policy-add-user2.png" alt="Process Group 
Modify Policy Add User2"></span></p>
+<p><span class="image"><img 
src="./images/process-group-modify-policy-add-user2.png" alt="Process Group 
Modify Policy Add User2"></span></p>
 </div>
 <div class="paragraph">
-<p>By adding User2 to the “modify the component” policy on the process 
group, User2 is added to the “modify the component” policy on the 
LogAttribute processor by policy inheritance.  To confirm this, highlight the 
LogAttribute processor and select the Access Policies icon (<span 
class="image"><img src="images/iconAccessPolicies.png" alt="Access Policies 
Icon"></span>) from the Operate palette:</p>
+<p>By adding User2 to the “modify the component” policy on the process 
group, User2 is added to the “modify the component” policy on the 
LogAttribute processor by policy inheritance.  To confirm this, highlight the 
LogAttribute processor and select the Access Policies icon (<span 
class="image"><img src="./images/iconAccessPolicies.png" alt="Access Policies 
Icon"></span>) from the Operate palette:</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/processor-inherited-modify-policy.png" 
alt="User2 Inherited Edit Processor"></span></p>
+<p><span class="image"><img 
src="./images/processor-inherited-modify-policy.png" alt="User2 Inherited Edit 
Processor"></span></p>
 </div>
 <div class="paragraph">
 <p>With these changes, User2 can now connect the GenerateFlowFile processor to 
the LogAttribute processor.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user2-can-connect.png" alt="User2 Can 
Connect"></span></p>
+<p><span class="image"><img src="./images/user2-can-connect.png" alt="User2 
Can Connect"></span></p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user2-connected-processors.png" 
alt="User2 Connected Processors"></span></p>
+<p><span class="image"><img src="./images/user2-connected-processors.png" 
alt="User2 Connected Processors"></span></p>
 </div>
 </div>
 <div class="sect4">
-<h5 id="editing-a-connection"><a class="anchor" 
href="administration-guide.html#editing-a-connection"></a>Editing a 
Connection</h5>
+<h5 id="editing-a-connection"><a class="anchor" 
href="#editing-a-connection"></a>Editing a Connection</h5>
 <div class="paragraph">
 <p>Assume User1 or User2 adds a ReplaceText processor to the root process 
group:</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/replacetext-processor-added.png" 
alt="ReplaceText Processor Added"></span></p>
+<p><span class="image"><img src="./images/replacetext-processor-added.png" 
alt="ReplaceText Processor Added"></span></p>
 </div>
 <div class="paragraph">
 <p>User1 can select and change the existing connection (between 
GenerateFlowFile to LogAttribute) to now connect GenerateFlowFile to 
ReplaceText:</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user1-edit-connection.png" alt="User1 
Edit Connection"></span></p>
+<p><span class="image"><img src="./images/user1-edit-connection.png" 
alt="User1 Edit Connection"></span></p>
 </div>
 <div class="paragraph">
 <p>User 2 is unable to perform this action.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user2-no-edit-connection.png" 
alt="User2 No Edit Connection"></span></p>
+<p><span class="image"><img src="./images/user2-no-edit-connection.png" 
alt="User2 No Edit Connection"></span></p>
 </div>
 <div class="paragraph">
 <p>To allow User2 to connect GenerateFlowFile to ReplaceText, as User1:</p>
@@ -2071,26 +2110,25 @@ The view the component” policy that
 <p>Select the root process group. The Operate palette is updated with details 
for the root process group.</p>
 </li>
 <li>
-<p>Select the Access Policies icon (<span class="image"><img 
src="images/iconAccessPolicies.png" alt="Access Policies Icon"></span>).</p>
+<p>Select the Access Policies icon (<span class="image"><img 
src="./images/iconAccessPolicies.png" alt="Access Policies Icon"></span>).</p>
 </li>
 <li>
 <p>Select "view the component” from the policy drop-down.
-<span class="image"><img src="images/process-group-view-policy.png" 
alt="Process Group View Policy"></span>
-[start=4]</p>
+<span class="image"><img src="./images/process-group-view-policy.png" 
alt="Process Group View Policy"></span></p>
 </li>
 <li>
-<p>Select the Add User icon (<span class="image"><img 
src="images/iconAddUser.png" alt="Add User Icon"></span>). Find or enter User2 
and select OK.</p>
+<p>Select the Add User icon (<span class="image"><img 
src="./images/iconAddUser.png" alt="Add User Icon"></span>). Find or enter 
User2 and select OK.</p>
 </li>
 </ol>
 </div>
 <div class="paragraph">
-<p><span class="image"><img 
src="images/process-group-view-policy-add-user2.png" alt="Process Group View 
Policy Add User2"></span></p>
+<p><span class="image"><img 
src="./images/process-group-view-policy-add-user2.png" alt="Process Group View 
Policy Add User2"></span></p>
 </div>
 <div class="paragraph">
 <p>Being added to both the view and modify policies for the process group, 
User2 can now connect the GenerateFlowFile processor to the ReplaceText 
processor.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/user2-edit-connection.png" alt="User2 
Edit Connection"></span></p>
+<p><span class="image"><img src="./images/user2-edit-connection.png" 
alt="User2 Edit Connection"></span></p>
 </div>
 </div>
 </div>
@@ -2098,7 +2136,7 @@ The view the component” policy that
 </div>
 </div>
 <div class="sect1">
-<h2 id="encryption"><a class="anchor" 
href="administration-guide.html#encryption"></a>Encryption Configuration</h2>
+<h2 id="encryption"><a class="anchor" href="#encryption"></a>Encryption 
Configuration</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>This section provides an overview of the capabilities of NiFi to encrypt 
and decrypt data.</p>
@@ -2107,7 +2145,7 @@ The view the component” policy that
 <p>The <code>EncryptContent</code> processor allows for the encryption and 
decryption of data, both internal to NiFi and integrated with external systems, 
such as <code>openssl</code> and other data sources and consumers.</p>
 </div>
 <div class="sect2">
-<h3 id="key-derivation-functions"><a class="anchor" 
href="administration-guide.html#key-derivation-functions"></a>Key Derivation 
Functions</h3>
+<h3 id="key-derivation-functions"><a class="anchor" 
href="#key-derivation-functions"></a>Key Derivation Functions</h3>
 <div class="paragraph">
 <p>Key Derivation Functions (KDF) are mechanisms by which human-readable 
information, usually a password or other secret information, is translated into 
a cryptographic key suitable for data protection. For further information, read 
<a href="https://en.wikipedia.org/wiki/Key_derivation_function";>the Wikipedia 
entry on Key Derivation Functions</a>.
 Currently, KDFs are ingested by <code>CipherProvider</code> implementations 
and return a fully-initialized <code>Cipher</code> object to be used for 
encryption or decryption. Due to the use of a 
<code>CipherProviderFactory</code>, the KDFs are not customizable at this time. 
Future enhancements will include the ability to provide custom cost parameters 
to the KDF at initialization time. As a work-around, 
<code>CipherProvider</code> instances can be initialized with custom cost 
parameters in the constructor but this is not currently supported by the 
<code>CipherProviderFactory</code>.
@@ -2253,7 +2291,7 @@ Here are the KDFs currently supported by
 </ul>
 </div>
 <div class="sect3">
-<h4 id="additional-resources"><a class="anchor" 
href="administration-guide.html#additional-resources"></a>Additional 
Resources</h4>
+<h4 id="additional-resources"><a class="anchor" 
href="#additional-resources"></a>Additional Resources</h4>
 <div class="ulist">
 <ul>
 <li>
@@ -2297,49 +2335,49 @@ Here are the KDFs currently supported by
 </div>
 </div>
 <div class="sect2">
-<h3 id="salt-and-iv-encoding"><a class="anchor" 
href="administration-guide.html#salt-and-iv-encoding"></a>Salt and IV 
Encoding</h3>
+<h3 id="salt-and-iv-encoding"><a class="anchor" 
href="#salt-and-iv-encoding"></a>Salt and IV Encoding</h3>
 <div class="paragraph">
-<p>Initially, the <code>EncryptContent</code> processor had a single method of 
deriving the encryption key from a user-provided password. This is now referred 
to as <code>NiFiLegacy</code> mode, effectively <code>MD5 digest, 1000 
iterations</code>. In v0.4.0, another method of deriving the key, <code>OpenSSL 
PKCS#5 v1.5 EVP_BytesToKey</code> was added for compatibility with content 
encrypted outside of NiFi using the <code>openssl</code> command-line tool. 
Both of these <a href="administration-guide.html#key-derivation-functions">Key 
Derivation Functions</a> (KDF) had hard-coded digest functions and iteration 
counts, and the salt format was also hard-coded. With v0.5.0, additional KDFs 
are introduced with variable iteration counts, work factors, and salt formats. 
In addition, <em>raw keyed encryption</em> was also introduced. This required 
the capacity to encode arbitrary salts and Initialization Vectors (IV) into the 
cipher stream in order to be recovered by NiFi or a follow-on sys
 tem to decrypt these messages.</p>
+<p>Initially, the <code>EncryptContent</code> processor had a single method of 
deriving the encryption key from a user-provided password. This is now referred 
to as <code>NiFiLegacy</code> mode, effectively <code>MD5 digest, 1000 
iterations</code>. In v0.4.0, another method of deriving the key, <code>OpenSSL 
PKCS#5 v1.5 EVP_BytesToKey</code> was added for compatibility with content 
encrypted outside of NiFi using the <code>openssl</code> command-line tool. 
Both of these <a href="#key-derivation-functions">Key Derivation Functions</a> 
(KDF) had hard-coded digest functions and iteration counts, and the salt format 
was also hard-coded. With v0.5.0, additional KDFs are introduced with variable 
iteration counts, work factors, and salt formats. In addition, <em>raw keyed 
encryption</em> was also introduced. This required the capacity to encode 
arbitrary salts and Initialization Vectors (IV) into the cipher stream in order 
to be recovered by NiFi or a follow-on system to decrypt these mess
 ages.</p>
 </div>
 <div class="paragraph">
 <p>For the existing KDFs, the salt format has not changed.</p>
 </div>
 <div class="sect3">
-<h4 id="nifi-legacy"><a class="anchor" 
href="administration-guide.html#nifi-legacy"></a>NiFi Legacy</h4>
+<h4 id="nifi-legacy"><a class="anchor" href="#nifi-legacy"></a>NiFi Legacy</h4>
 <div class="paragraph">
 <p>The first 8 or 16 bytes of the input are the salt. The salt length is 
determined based on the selected algorithm&#8217;s cipher block length. If the 
cipher block size cannot be determined (such as with a stream cipher like 
<code>RC4</code>), the default value of 8 bytes is used. On decryption, the 
salt is read in and combined with the password to derive the encryption key and 
IV.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/nifi-legacy-salt.png" alt="NiFi Legacy 
Salt Encoding"></span></p>
+<p><span class="image"><img src="./images/nifi-legacy-salt.png" alt="NiFi 
Legacy Salt Encoding"></span></p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="openssl-pkcs-5-v1-5-evp_bytestokey"><a class="anchor" 
href="administration-guide.html#openssl-pkcs-5-v1-5-evp_bytestokey"></a>OpenSSL 
PKCS#5 v1.5 EVP_BytesToKey</h4>
+<h4 id="openssl-pkcs-5-v1-5-evp_bytestokey"><a class="anchor" 
href="#openssl-pkcs-5-v1-5-evp_bytestokey"></a>OpenSSL PKCS#5 v1.5 
EVP_BytesToKey</h4>
 <div class="paragraph">
 <p>OpenSSL allows for salted or unsalted key derivation. <em>*Unsalted key 
derivation is a security risk and is not recommended.*</em> If a salt is 
present, the first 8 bytes of the input are the ASCII string 
"<code>Salted__</code>" (<code>0x53 61 6C 74 65 64 5F 5F</code>) and the next 8 
bytes are the ASCII-encoded salt. On decryption, the salt is read in and 
combined with the password to derive the encryption key and IV. If there is no 
salt header, the entire input is considered to be the cipher text.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/openssl-salt.png" alt="OpenSSL Salt 
Encoding"></span></p>
+<p><span class="image"><img src="./images/openssl-salt.png" alt="OpenSSL Salt 
Encoding"></span></p>
 </div>
 <div class="paragraph">
 <p>For new KDFs, each of which allow for non-deterministic IVs, the IV must be 
stored alongside the cipher text. This is not a vulnerability, as the IV is not 
required to be secret, but simply to be unique for messages encrypted using the 
same key to reduce the success of cryptographic attacks. For these KDFs, the 
output consists of the salt, followed by the salt delimiter, UTF-8 string 
"<code>NiFiSALT</code>" (<code>0x4E 69 46 69 53 41 4C 54</code>) and then the 
IV, followed by the IV delimiter, UTF-8 string "<code>NiFiIV</code>" 
(<code>0x4E 69 46 69 49 56</code>), followed by the cipher text.</p>
 </div>
 </div>
 <div class="sect3">
-<h4 id="bcrypt-scrypt-pbkdf2"><a class="anchor" 
href="administration-guide.html#bcrypt-scrypt-pbkdf2"></a>Bcrypt, Scrypt, 
PBKDF2</h4>
+<h4 id="bcrypt-scrypt-pbkdf2"><a class="anchor" 
href="#bcrypt-scrypt-pbkdf2"></a>Bcrypt, Scrypt, PBKDF2</h4>
 <div class="paragraph">
-<p><span class="image"><img src="images/bcrypt-salt.png" alt="Bcrypt Salt 
&amp; IV Encoding"></span></p>
+<p><span class="image"><img src="./images/bcrypt-salt.png" alt="Bcrypt Salt 
&amp; IV Encoding"></span></p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/scrypt-salt.png" alt="Scrypt Salt 
&amp; IV Encoding"></span></p>
+<p><span class="image"><img src="./images/scrypt-salt.png" alt="Scrypt Salt 
&amp; IV Encoding"></span></p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/pbkdf2-salt.png" alt="PBKDF2 Salt 
&amp; IV Encoding"></span></p>
+<p><span class="image"><img src="./images/pbkdf2-salt.png" alt="PBKDF2 Salt 
&amp; IV Encoding"></span></p>
 </div>
 </div>
 </div>
 <div class="sect2">
-<h3 
id="java-cryptography-extension-jce-limited-strength-jurisdiction-policies"><a 
class="anchor" 
href="administration-guide.html#java-cryptography-extension-jce-limited-strength-jurisdiction-policies"></a>Java
 Cryptography Extension (JCE) Limited Strength Jurisdiction Policies</h3>
+<h3 
id="java-cryptography-extension-jce-limited-strength-jurisdiction-policies"><a 
class="anchor" 
href="#java-cryptography-extension-jce-limited-strength-jurisdiction-policies"></a>Java
 Cryptography Extension (JCE) Limited Strength Jurisdiction Policies</h3>
 <div class="paragraph">
 <p>Because of US export regulations, default JVMs have <a 
href="http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html#importlimits";>limits
 imposed on the strength of cryptographic operations</a> available to them. For 
example, AES operations are limited to <code>128 bit keys</code> by default. 
While <code>AES-128</code> is cryptographically safe, this can have unintended 
consequences, specifically on Password-based Encryption (PBE).</p>
 </div>
@@ -2446,12 +2484,12 @@ Here are the KDFs currently supported by
 </table>
 </div>
 <div class="sect2">
-<h3 id="allow-insecure-cryptographic-modes"><a class="anchor" 
href="administration-guide.html#allow-insecure-cryptographic-modes"></a>Allow 
Insecure Cryptographic Modes</h3>
+<h3 id="allow-insecure-cryptographic-modes"><a class="anchor" 
href="#allow-insecure-cryptographic-modes"></a>Allow Insecure Cryptographic 
Modes</h3>
 <div class="paragraph">
 <p>By default, the <code>Allow Insecure Cryptographic Modes</code> property in 
<code>EncryptContent</code> processor settings is set to 
<code>not-allowed</code>. This means that if a password of fewer than 
<code>10</code> characters is provided, a validation error will occur. 10 
characters is a conservative estimate and does not take into consideration full 
entropy calculations, patterns, etc.</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/allow-weak-crypto.png" alt="Allow 
Insecure Cryptographic Modes" width="940"></span></p>
+<p><span class="image"><img src="./images/allow-weak-crypto.png" alt="Allow 
Insecure Cryptographic Modes" width="940"></span></p>
 </div>
 <div class="paragraph">
 <p>On a JVM with limited strength cryptography, some PBE algorithms limit the 
maximum password length to 7, and in this case it will not be possible to 
provide a "safe" password. It is recommended to install the JCE Unlimited 
Strength Jurisdiction Policy files for the JVM to mitigate this issue.</p>
@@ -2488,7 +2526,7 @@ Here are the KDFs currently supported by
 </div>
 </div>
 <div class="sect1">
-<h2 id="encrypted-passwords-in-configuration-files"><a class="anchor" 
href="administration-guide.html#encrypted-passwords-in-configuration-files"></a>Encrypted
 Passwords in Configuration Files</h2>
+<h2 id="encrypted-passwords-in-configuration-files"><a class="anchor" 
href="#encrypted-passwords-in-configuration-files"></a>Encrypted Passwords in 
Configuration Files</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>In order to facilitate the secure setup of NiFi, you can use the 
<code>encrypt-config</code> command line utility to encrypt raw configuration 
values that NiFi decrypts in memory on startup. This extensible protection 
scheme transparently allows NiFi to use raw values in operation, while 
protecting them at rest.  In the future, hardware security modules (HSM) and 
external secure storage mechanisms will be integrated, but for now, an AES 
encryption provider is the default implementation.</p>
@@ -2500,7 +2538,7 @@ Here are the KDFs currently supported by
 <p>If no administrator action is taken, the configuration values remain 
unencrypted.</p>
 </div>
 <div class="sect2">
-<h3 id="encrypt-config_tool"><a class="anchor" 
href="administration-guide.html#encrypt-config_tool"></a>Encrypt-Config 
Tool</h3>
+<h3 id="encrypt-config_tool"><a class="anchor" 
href="#encrypt-config_tool"></a>Encrypt-Config Tool</h3>
 <div class="paragraph">
 <p>The <code>encrypt-config</code> command line tool (invoked as 
<code>./bin/encrypt-config.sh</code> or <code>bin\encrypt-config.bat</code>) 
reads from a <em>nifi.properties</em> file with plaintext sensitive 
configuration values, prompts for a master password or raw hexadecimal key, and 
encrypts each value. It replaces the plain values with the protected value in 
the same file, or writes to a new <em>nifi.properties</em> file if 
specified.</p>
 </div>
@@ -2513,28 +2551,61 @@ Here are the KDFs currently supported by
 <div class="ulist">
 <ul>
 <li>
-<p><code>-b,--bootstrapConf &lt;arg&gt;</code>          The bootstrap.conf 
file to persist master key</p>
+<p><code>-A</code>,<code>--newFlowAlgorithm &lt;arg&gt;</code>               
The algorithm to use to encrypt the sensitive processor properties in 
flow.xml.gz</p>
 </li>
 <li>
-<p><code>-h,--help</code>                         Prints this usage message</p>
+<p><code>-b</code>,<code>--bootstrapConf &lt;arg&gt;</code>                  
The bootstrap.conf file to persist master key</p>
 </li>
 <li>
-<p><code>-k,--key &lt;arg&gt;</code>                    The raw hexadecimal 
key to use to encrypt the sensitive properties (the key can be entered with 
spaces or <em>-</em> delimiters to assist manual 
entry&#8201;&#8212;&#8201;these will be ignored)</p>
+<p><code>-e</code>,<code>--oldKey &lt;arg&gt;</code>                         
The old raw hexadecimal key to use during key migration</p>
 </li>
 <li>
-<p><code>-n,--niFiProperties &lt;arg&gt;</code>         The 
<em>nifi.properties</em> file containing unprotected config values (will be 
overwritten by default unless <code>-o</code> is provided)</p>
+<p><code>-f</code>,<code>--flowXml &lt;arg&gt;</code>                        
The flow.xml.gz file currently protected with old password (will be 
overwritten)</p>
 </li>
 <li>
-<p><code>-o,--outputNiFiProperties &lt;arg&gt;</code>   The destination 
<em>nifi.properties</em> file containing protected config values (will not 
modify input <em>nifi.properties</em>)</p>
+<p><code>-g</code>,<code>--outputFlowXml &lt;arg&gt;</code>                  
The destination flow.xml.gz file containing protected config values (will not 
modify input flow.xml.gz)</p>
 </li>
 <li>
-<p><code>-p,--password &lt;arg&gt;</code>               The password from 
which to derive the key to use to encrypt the sensitive properties</p>
+<p><code>-h</code>,<code>--help</code>                                 Prints 
this usage message</p>
 </li>
 <li>
-<p><code>-r,--useRawKey</code>                    If provided, the secure 
console will prompt for the raw key value in hexadecimal form</p>
+<p><code>-i</code>,<code>--outputLoginIdentityProviders &lt;arg&gt;</code>   
The destination login-identity-providers.xml file containing protected config 
values (will not modify input login-identity-providers.xml)</p>
 </li>
 <li>
-<p><code>-v,--verbose</code>                      Sets verbose mode (default 
false)</p>
+<p><code>-k</code>,<code>--key &lt;arg&gt;</code>                            
The raw hexadecimal key to use to encrypt the sensitive properties</p>
+</li>
+<li>
+<p><code>-l</code>,<code>--loginIdentityProviders &lt;arg&gt;</code>         
The login-identity-providers.xml file containing unprotected config values 
(will be overwritten)</p>
+</li>
+<li>
+<p><code>-m</code>,<code>--migrate</code>                              If 
provided, the nifi.properties and/or login-identity-providers.xml sensitive 
properties will be re-encrypted with a new key</p>
+</li>
+<li>
+<p><code>-n</code>,<code>--niFiProperties &lt;arg&gt;</code>                 
The nifi.properties file containing unprotected config values (will be 
overwritten)</p>
+</li>
+<li>
+<p><code>-o</code>,<code>--outputNiFiProperties &lt;arg&gt;</code>           
The destination nifi.properties file containing protected config values (will 
not modify input nifi.properties)</p>
+</li>
+<li>
+<p><code>-p</code>,<code>--password &lt;arg&gt;</code>                       
The password from which to derive the key to use to encrypt the sensitive 
properties</p>
+</li>
+<li>
+<p><code>-P</code>,<code>--newFlowProvider &lt;arg&gt;</code>                
The security provider to use to encrypt the sensitive processor properties in 
flow.xml.gz</p>
+</li>
+<li>
+<p><code>-r</code>,<code>--useRawKey</code>                            If 
provided, the secure console will prompt for the raw key value in hexadecimal 
form</p>
+</li>
+<li>
+<p><code>-s</code>,<code>--propsKey &lt;arg&gt;</code>                       
The password or key to use to encrypt the sensitive processor properties in 
flow.xml.gz</p>
+</li>
+<li>
+<p><code>-v</code>,<code>--verbose</code>                              Sets 
verbose mode (default false)</p>
+</li>
+<li>
+<p><code>-w</code>,<code>--oldPassword &lt;arg&gt;</code>                    
The old password from which to derive the key during migration</p>
+</li>
+<li>
+<p><code>-x</code>,<code>--encryptFlowXmlOnly</code>                   If 
provided, the properties in flow.xml.gz will be re-encrypted with a new key but 
the nifi.properties and/or login-identity-providers.xml files will not be 
modified</p>
 </li>
 </ul>
 </div>
@@ -2607,9 +2678,47 @@ nifi.bootstrap.sensitive.key=0123456789A
 <div class="paragraph">
 <p>If the <em>nifi.properties</em> file already has valid protected values, 
those property values are not modified by the tool.</p>
 </div>
+<div class="paragraph">
+<p>When applied to <em>login-identity-providers.xml</em>, the property 
elements are updated with an <code>encryption</code> attribute:</p>
+</div>
+<div class="listingblock">
+<div class="content">
+<pre>&lt;!-- LDAP Provider --&gt;
+&lt;provider&gt;
+       &lt;identifier&gt;ldap-provider&lt;/identifier&gt;
+       &lt;class&gt;org.apache.nifi.ldap.LdapProvider&lt;/class&gt;
+       &lt;property name="Authentication 
Strategy"&gt;START_TLS&lt;/property&gt;
+       &lt;property name="Manager DN"&gt;someuser&lt;/property&gt;
+       &lt;property name="Manager Password" 
encryption="aes/gcm/128"&gt;q4r7WIgN0MaxdAKM||SGgdCTPGSFEcuH4RraMYEdeyVbOx93abdWTVSWvh1w+klA&lt;/property&gt;
+       &lt;property name="TLS - Keystore"&gt;&lt;/property&gt;
+       &lt;property name="TLS - Keystore Password" 
encryption="aes/gcm/128"&gt;Uah59TWX+Ru5GY5p||B44RT/LJtC08QWA5ehQf01JxIpf0qSJUzug25UwkF5a50g&lt;/property&gt;
+       &lt;property name="TLS - Keystore Type"&gt;&lt;/property&gt;
+      ...
+   &lt;/provider&gt;</pre>
+</div>
+</div>
+<div class="paragraph">
+<p>In order to change the key used to encrypt the sensitive values, indicate 
<strong>migration mode</strong> using the <code>-m</code> or 
<code>--migrate</code> flag, provide the new key or password using the 
<code>-k</code> or <code>-p</code> flags as usual, and provide the existing key 
or password using <code>-e</code> or <code>-w</code> respectively. This will 
allow the toolkit to decrypt the existing values and re-encrypt them, and 
update <code>bootstrap.conf</code> with the new key. Only one of the key or 
password needs to be specified for each phase (old vs. new), and any 
combination is sufficient:</p>
+</div>
+<div class="ulist">
+<ul>
+<li>
+<p>old key &#8594; new key</p>
+</li>
+<li>
+<p>old key &#8594; new password</p>
+</li>
+<li>
+<p>old password &#8594; new key</p>
+</li>
+<li>
+<p>old password &#8594; new password</p>
+</li>
+</ul>
+</div>
 </div>
 <div class="sect2">
-<h3 id="encrypt-config_password"><a class="anchor" 
href="administration-guide.html#encrypt-config_password"></a>Password Key 
Derivation</h3>
+<h3 id="encrypt-config_password"><a class="anchor" 
href="#encrypt-config_password"></a>Password Key Derivation</h3>
 <div class="paragraph">
 <p>Instead of providing a 32 or 64 character raw hexadecimal key, you can 
provide a password from which the key will be derived. As of 1.0.0, the 
password must be at least 12 characters, and the key will be derived using 
<code>SCrypt</code> with the parameters:</p>
 </div>
@@ -2652,7 +2761,7 @@ While fixed salts are counter to best pr
 </div>
 </div>
 <div class="sect2">
-<h3 id="encrypt-config_secure_prompt"><a class="anchor" 
href="administration-guide.html#encrypt-config_secure_prompt"></a>Secure 
Prompt</h3>
+<h3 id="encrypt-config_secure_prompt"><a class="anchor" 
href="#encrypt-config_secure_prompt"></a>Secure Prompt</h3>
 <div class="paragraph">
 <p>If you prefer not to provide the password or raw key in the command-line 
invocation of the tool, leaving these arguments absent will prompt a secure 
console read of the password (by default) or raw key (if the <code>-r</code> 
flag is provided at invocation).</p>
 </div>
@@ -2660,7 +2769,7 @@ While fixed salts are counter to best pr
 </div>
 </div>
 <div class="sect1">
-<h2 id="clustering"><a class="anchor" 
href="administration-guide.html#clustering"></a>Clustering Configuration</h2>
+<h2 id="clustering"><a class="anchor" href="#clustering"></a>Clustering 
Configuration</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>This section provides a quick overview of NiFi Clustering and instructions 
on how to set up a basic cluster.
@@ -2668,7 +2777,7 @@ In the future, we hope to provide supple
 </div>
 <div class="imageblock">
 <div class="content">
-<img src="images/zero-master-cluster-http-access.png" alt="NiFi Cluster HTTP 
Access">
+<img src="./images/zero-master-cluster-http-access.png" alt="NiFi Cluster HTTP 
Access">
 </div>
 </div>
 <div class="paragraph">
@@ -2702,7 +2811,7 @@ of the cluster. Through the single inter
 <p><strong>Terminology</strong><br></p>
 </div>
 <div class="paragraph">
-<p><strong>NiFi Cluster Coordinator</strong>: A NiFi Cluster Cluster 
Coordinator is the node in a NiFI cluster that is responsible for carrying out
+<p><strong>NiFi Cluster Coordinator</strong>: A NiFi Cluster Cluster 
Coordinator is the node in a NiFi cluster that is responsible for carrying out
 tasks to manage which nodes are allowed in the cluster and providing the most 
up-to-date flow to newly joining nodes. When a
 DataFlow Manager manages a dataflow in a cluster, they are able to do so 
through the User Interface of any node in the cluster. Any
 change made is then replicated to all nodes in the cluster.</p>
@@ -2732,7 +2841,7 @@ It just depends on the resources availab
 which let the Coordinator know they are still connected to the cluster and 
working properly. By default, the nodes emit
 heartbeats every 5 seconds, and if the Cluster Coordinator does not receive a 
heartbeat from a node within 40 seconds, it
 disconnects the node due to "lack of heartbeat". (The 5-second setting is 
configurable in the <em>nifi.properties</em> file.
-See the <a href="administration-guide.html#system_properties">System 
Properties</a> section of this document for more information.) The reason that 
the Cluster Coordinator
+See the <a href="#system_properties">System Properties</a> section of this 
document for more information.) The reason that the Cluster Coordinator
 disconnects the node is because the Coordinator needs to ensure that every 
node in the cluster is in sync, and if a node
 is not heard from regularly, the Coordinator cannot be sure it is still in 
sync with the rest of the cluster. If, after
 40 seconds, the node does send a new heartbeat, the Coordinator will 
automatically request that the node re-join the cluster,
@@ -2770,6 +2879,22 @@ In this case, they DFM may elect to remo
 the node cannot be rejoined to the cluster until it has been restarted.</p>
 </div>
 <div class="paragraph">
+<p><strong>Flow Election</strong><br>
+When a cluster first starts up, NiFi must determine which of the nodes have the
+"correct" version of the flow. This is done by voting on the flows that each 
of the nodes has. When a node
+attempts to connect to a cluster, it provides a copy of its local flow to the 
Cluster Coordinator. If no flow
+has yet been elected the "correct" flow, the node&#8217;s flow is compared to 
each of the other Nodes' flows. If another
+Node&#8217;s flow matches this one, a vote is cast for this flow. If no other 
Node has reported the same flow yet, this
+flow will be added to the pool of possibly elected flows with one vote. After
+some amount of time has elapsed (configured by setting the 
<code>nifi.cluster.flow.election.max.wait.time</code> property) or
+some number of Nodes have cast votes (configured by setting the 
<code>nifi.cluster.flow.election.max.candidates</code> property),
+a flow is elected to be the "correct" copy of the flow. All nodes that have 
incompatible flows are then disconnected
+from the cluster while those with compatible flows inherit the cluster&#8217;s 
flow. Election is performed according to
+the "popular vote" with the caveat that the winner will never be an "empty 
flow" unless all flows are empty. This
+allows an administrator to remove a node&#8217;s <code>flow.xml.gz</code> file 
and restart the node, knowing that the node&#8217;s flow will
+not be voted to be the "correct" flow unless no other flow is found.</p>
+</div>
+<div class="paragraph">
 <p><strong>Basic Cluster Setup</strong><br></p>
 </div>
 <div class="paragraph">
@@ -2777,7 +2902,7 @@ the node cannot be rejoined to the clust
 </div>
 <div class="paragraph">
 <p>For each instance, certain properties in the <em>nifi.properties</em> file 
will need to be updated. In particular, the Web and Clustering properties
-should be evaluated for your situation and adjusted accordingly. All the 
properties are described in the <a 
href="administration-guide.html#system_properties">System Properties</a> 
section of this
+should be evaluated for your situation and adjusted accordingly. All the 
properties are described in the <a href="#system_properties">System 
Properties</a> section of this
 guide; however, in this section, we will focus on the minimum properties that 
must be set for a simple cluster.</p>
 </div>
 <div class="paragraph">
@@ -2796,7 +2921,7 @@ Also, consider whether you need to set t
 <li>
 <p>Under the <em>State Management section</em>, set the 
<code>nifi.state.management.provider.cluster</code> property
 to the identifier of the Cluster State Provider. Ensure that the Cluster State 
Provider has been
-configured in the <em>state-management.xml</em> file. See <a 
href="administration-guide.html#state_providers">Configuring State 
Providers</a> for more information.</p>
+configured in the <em>state-management.xml</em> file. See <a 
href="#state_providers">Configuring State Providers</a> for more 
information.</p>
 </li>
 <li>
 <p>Under <em>Cluster Node</em> Properties, set the following:</p>
@@ -2828,8 +2953,15 @@ the NiFi instance attempts to join is de
 that is specified.</p>
 </li>
 <li>
-<p>nifi.cluster.request.replication.claim.timeout - Specifies how long a 
component can be <em>locked</em> during a request replication
-before the lock expires and is automatically unlocked. See <a 
href="administration-guide.html#claim_management">Claim Management</a> for more 
information.</p>
+<p>nifi.cluster.flow.election.max.wait.time - Specifies the amount of time to 
wait before electing a Flow as the "correct" Flow.
+If the number of Nodes that have voted is equal to the number specified by the 
<code>nifi.cluster.flow.election.max.candidates</code>
+property, the cluster will not wait this long. The default is 5 minutes. Note 
that the time starts as soon as the first vote
+is cast.</p>
+</li>
+<li>
+<p>nifi.cluster.flow.election.max.candidates - Specifies the number of Nodes 
required in the cluster to cause early election
+of Flows. This allows the Nodes in the cluster to avoid having to wait a long 
time before starting processing if we reach
+at least this number of nodes in the cluster.</p>
 </li>
 </ul>
 </div>
@@ -2841,7 +2973,7 @@ before the lock expires and is automatic
 one of the nodes, and the User Interface should look similar to the 
following:</p>
 </div>
 <div class="paragraph">
-<p><span class="image"><img src="images/ncm.png" alt="Clustered User 
Interface"></span></p>
+<p><span class="image"><img src="./images/ncm.png" alt="Clustered User 
Interface"></span></p>
 </div>
 <div class="paragraph">
 <p><strong>Troubleshooting</strong></p>
@@ -2861,7 +2993,7 @@ set the level="DEBUG" in the following l
 </div>
 </div>
 <div class="sect1">
-<h2 id="state_management"><a class="anchor" 
href="administration-guide.html#state_management"></a>State Management</h2>
+<h2 id="state_management"><a class="anchor" href="#state_management"></a>State 
Management</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>NiFi provides a mechanism for Processors, Reporting Tasks, Controller 
Services, and the framework itself to persist state. This
@@ -2870,7 +3002,7 @@ a Processor to store some piece of infor
 in the cluster. This allows one node to pick up where another node left off, 
or to coordinate across all of the nodes in a cluster.</p>
 </div>
 <div class="sect2">
-<h3 id="state_providers"><a class="anchor" 
href="administration-guide.html#state_providers"></a>Configuring State 
Providers</h3>
+<h3 id="state_providers"><a class="anchor" 
href="#state_providers"></a>Configuring State Providers</h3>
 <div class="paragraph">
 <p>When a component decides to store or retrieve state, it does so by 
providing a "Scope" - either Node-local or Cluster-wide. The
 mechanism that is used to store and retrieve this state is then determined 
based on this Scope, as well as the configured State
@@ -2924,7 +3056,7 @@ my-zk-server1:2181,my-zk-server2:2181,my
 <p>When adding data to ZooKeeper, there are two options for Access Control: 
<code>Open</code> and <code>CreatorOnly</code>. If the <code>Access 
Control</code> property is
 set to <code>Open</code>, then anyone is allowed to log into ZooKeeper and 
have full permissions to see, change, delete, or administer the data.
 If <code>CreatorOnly</code> is specified, then only the user that created the 
data is allowed to read, change, delete, or administer the data.
-In order to use the <code>CreatorOnly</code> option, NiFi must provide some 
form of authentication. See the <a 
href="administration-guide.html#zk_access_control">ZooKeeper Access Control</a>
+In order to use the <code>CreatorOnly</code> option, NiFi must provide some 
form of authentication. See the <a href="#zk_access_control">ZooKeeper Access 
Control</a>
 section below for more information on how to configure authentication.</p>
 </div>
 <div class="paragraph">

[... 694 lines stripped ...]


Reply via email to