blob: 4e6571bf8ed287c99a0c9b65619374e76eaa384e [file] [log] [blame]
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.8 from src/site/twiki/security.twiki at 2018-06-14
| Rendered using Apache Maven Fluido Skin 1.7
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="Date-Revision-yyyymmdd" content="20180614" />
<meta http-equiv="Content-Language" content="en" />
<title>Apache Atlas &#x2013; Security Features of Apache Atlas</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.7.min.css" />
<link rel="stylesheet" href="./css/site.css" />
<link rel="stylesheet" href="./css/print.css" media="print" />
<script type="text/javascript" src="./js/apache-maven-fluido-1.7.min.js"></script>
</head>
<body class="topBarEnabled">
<div id="topbar" class="navbar navbar-fixed-top ">
<div class="navbar-inner">
<div class="container" style="width: 68%;"><div class="nav-collapse">
<ul class="nav">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Apache Atlas <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="index.html" title="Overview">Overview</a></li>
<li><a href="license.html" title="License">License</a></li>
<li><a href="http://atlas.apache.org/#/Downloads" target="_blank" title="Downloads">Downloads</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/ATLAS" title="Wiki">Wiki</a></li>
<li><a href="https://git-wip-us.apache.org/repos/asf/atlas.git" title="Git">Git</a></li>
<li><a href="https://issues.apache.org/jira/browse/ATLAS" title="Jira">Jira</a></li>
<li><a href="https://reviews.apache.org/groups/atlas/?sort=-time_added" title="Review Board">Review Board</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Project Information <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="project-info.html" title="Summary">Summary</a></li>
<li><a href="mail-lists.html" title="Mailing Lists">Mailing Lists</a></li>
<li><a href="team-list.html" title="Team">Team</a></li>
<li><a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a></li>
<li><a href="source-repository.html" title="Source Repository">Source Repository</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Downloads <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="http://atlas.apache.org/#/Downloads" target="_blank" title="1.0.0">1.0.0</a></li>
<li><a href="http://atlas.apache.org/#/Downloads" target="_blank" title="0.8.2">0.8.2</a></li>
<li><a href="http://atlas.apache.org/#/Downloads" target="_blank" title="0.8.1">0.8.1</a></li>
<li><a href="http://atlas.apache.org/#/Downloads" target="_blank" title="0.8-incubating">0.8-incubating</a></li>
<li><a href="http://atlas.apache.org/#/Downloads" target="_blank" title="0.7.1-incubating">0.7.1-incubating</a></li>
<li><a href="http://atlas.apache.org/#/Downloads" target="_blank" title="0.7-incubating">0.7-incubating</a></li>
<li><a href="http://atlas.apache.org/#/Downloads" target="_blank" title="0.6-incubating">0.6-incubating</a></li>
<li><a href="http://atlas.apache.org/#/Downloads" target="_blank" title="0.5-incubating">0.5-incubating</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="../index.html" title="latest">latest</a></li>
<li><a href="../1.0.0/index.html" title="1.0.0">1.0.0</a></li>
<li><a href="../0.8.2/index.html" title="0.8.2">0.8.2</a></li>
<li><a href="../0.8.1/index.html" title="0.8.1">0.8.1</a></li>
<li><a href="../0.8.0-incubating/index.html" title="0.8-incubating">0.8-incubating</a></li>
<li><a href="../0.7.1-incubating/index.html" title="0.7.1-incubating">0.7.1-incubating</a></li>
<li><a href="../0.7.0-incubating/index.html" title="0.7-incubating">0.7-incubating</a></li>
<li><a href="../0.6.0-incubating/index.html" title="0.6-incubating">0.6-incubating</a></li>
<li><a href="../0.5.0-incubating/index.html" title="0.5-incubating">0.5-incubating</a></li>
</ul>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">ASF <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="http://www.apache.org/foundation/how-it-works.html" title="How Apache Works">How Apache Works</a></li>
<li><a href="https://www.apache.org/events/current-event" title="Events">Events</a></li>
<li><a href="https://www.apache.org/licenses/" title="License">License</a></li>
<li><a href="http://www.apache.org/foundation/" title="Foundation">Foundation</a></li>
<li><a href="http://www.apache.org/foundation/sponsorship.html" title="Sponsoring Apache">Sponsoring Apache</a></li>
<li><a href="http://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></li>
</ul>
</li>
</ul>
<form id="search-form" action="https://www.google.com/search" method="get" class="navbar-search pull-right" >
<input value="http://atlas.apache.org" name="sitesearch" type="hidden"/>
<input class="search-query" name="q" id="query" type="text" />
</form>
<script type="text/javascript">asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
<iframe src="https://www.facebook.com/plugins/like.php?href=http://atlas.apache.org/atlas-docs&send=false&layout=button_count&show-faces=false&action=like&colorscheme=dark"
scrolling="no" frameborder="0"
style="border:none; width:100px; height:20px; margin-top: 10px;" class="pull-right" ></iframe>
<script type="text/javascript">asyncJs( 'https://apis.google.com/js/plusone.js' )</script>
<ul class="nav pull-right"><li style="margin-top: 10px;">
<div class="g-plusone" data-href="http://atlas.apache.org/atlas-docs" data-size="medium" width="60px" align="right" ></div>
</li></ul>
</div>
</div>
</div>
</div>
<div class="container">
<div id="banner">
<div class="pull-left"><a href=".." id="bannerLeft"><img src="images/atlas-logo.png" alt="Apache Atlas" width="200px" height="45px"/></a></div>
<div class="pull-right"></div>
<div class="clear"><hr/></div>
</div>
<div id="breadcrumbs">
<ul class="breadcrumb">
<li class=""><a href="http://www.apache.org" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
<li class=""><a href="index.html" title="Atlas">Atlas</a><span class="divider">/</span></li>
<li class="active ">Security Features of Apache Atlas</li>
<li id="publishDate" class="pull-right"><span class="divider">|</span> Last Published: 2018-06-14</li>
<li id="projectVersion" class="pull-right">Version: 1.0.0</li>
</ul>
</div>
<div id="bodyColumn" >
<div class="section">
<h2><a name="Security_Features_of_Apache_Atlas"></a>Security Features of Apache Atlas</h2></div>
<div class="section">
<h3><a name="Overview"></a>Overview</h3>
<p>The following features are available for enhancing the security of the platform:</p>
<ul>
<li>SSL</li>
<li>Service Authentication</li>
<li>SPNEGO-based HTTP Authentication</li></ul></div>
<div class="section">
<h4><a name="SSL"></a>SSL</h4>
<p>Both SSL one-way (server authentication) and two-way (server and client authentication) are supported. The following application properties (properties configured in the atlas-application.properties file) are available for configuring SSL:</p>
<p></p>
<ul>
<li><code>atlas.enableTLS</code> (false|true) [default: false] - enable/disable the SSL listener</li>
<li><code>keystore.file</code> - the path to the keystore file leveraged by the server. This file contains the server certificate.</li>
<li><code>truststore.file</code> - the path to the truststore file. This file contains the certificates of other trusted entities (e.g. the certificates for client processes if two-way SSL is enabled). In most instances this can be set to the same value as the keystore.file property (especially if one-way SSL is enabled).</li>
<li><code>client.auth.enabled</code> (false|true) [default: false] - enable/disable client authentication. If enabled, the client will have to authenticate to the server during the transport session key creation process (i.e. two-way SSL is in effect).</li>
<li><code>cert.stores.credential.provider.path</code> - the path to the Credential Provider store file. The passwords for the keystore, truststore, and server certificate are maintained in this secure file. Utilize the cputil script in the 'bin' directoy (see below) to populate this file with the passwords required.</li>
<li><code>atlas.ssl.exclude.cipher.suites</code> - the excluded Cipher Suites list - <b>NULL.</b>,.*RC4.*,.*MD5.*,.*DES.*,.*DSS.* are weak and unsafe Cipher Suites that are excluded by default. If additional Ciphers need to be excluded, set this property with the default Cipher Suites such as atlas.ssl.exclude.cipher.suites=.*NULL.*, .*RC4.*, .*MD5.*, .*DES.*, .*DSS.*, and add the additional Ciper Suites to the list with a comma separator. They can be added with their full name or a regular expression. The Cipher Suites listed in the atlas.ssl.exclude.cipher.suites property will have precedence over the default Cipher Suites. One would keep the default Cipher Suites, and add additional ones to be safe.</li></ul></div>
<div class="section">
<h5><a name="Credential_Provider_Utility_Script"></a>Credential Provider Utility Script</h5>
<p>In order to prevent the use of clear-text passwords, the Atlas platofrm makes use of the Credential Provider facility for secure password storage (see <a class="externalLink" href="http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/CommandsManual.html#credential">Hadoop Credential Command Reference</a> for more information about this facility). The cputil script in the 'bin' directory can be leveraged to create the password store required.</p>
<p>To create the credential provdier for Atlas:</p>
<p></p>
<ul>
<li>cd to the '<code>bin</code>' directory</li>
<li>type '<code>./cputil.py</code>'</li>
<li>Enter the path for the generated credential provider. The format for the path is:
<ul>
<li><a class="externalLink" href="jceks://file/local/file/path/file.jceks">jceks://file/local/file/path/file.jceks</a> or <a class="externalLink" href="jceks://hdfs@namenodehost:port/path/in/hdfs/to/file.jceks.">jceks://hdfs@namenodehost:port/path/in/hdfs/to/file.jceks.</a> The files generally use the &quot;.jceks&quot; extension (e.g. test.jceks)</li></ul></li>
<li>Enter the passwords for the keystore, truststore, and server key (these passwords need to match the ones utilized for actually creating the associated certificate store files).</li></ul>
<p>The credential provider will be generated and saved to the path provided.</p></div>
<div class="section">
<h4><a name="Service_Authentication"></a>Service Authentication</h4>
<p>The Atlas platform, upon startup, is associated to an authenticated identity. By default, in an insecure environment, that identity is the same as the OS authenticated user launching the server. However, in a secure cluster leveraging kerberos, it is considered a best practice to configure a keytab and principal in order for the platform to authenticate to the KDC. This allows the service to subsequently interact with other secure cluster services (e.g. HDFS).</p>
<p>The properties for configuring service authentication are:</p>
<p></p>
<ul>
<li><code>atlas.authentication.method</code> (simple|kerberos) [default: simple] - the authentication method to utilize. Simple will leverage the OS authenticated identity and is the default mechanism. 'kerberos' indicates that the service is required to authenticate to the KDC leveraging the configured keytab and principal.</li>
<li><code>atlas.authentication.keytab</code> - the path to the keytab file.</li>
<li><code>atlas.authentication.principal</code> - the principal to use for authenticating to the KDC. The principal is generally of the form &quot;user/host@realm&quot;. You may use the '_HOST' token for the hostname and the local hostname will be substituted in by the runtime (e.g. &quot;Atlas/_HOST@EXAMPLE.COM&quot;).</li></ul>
<p>Note that when Atlas is configured with HBase as the storage backend in a secure cluster, the graph db (JanusGraph) needs sufficient user permissions to be able to create and access an HBase table. To grant the appropriate permissions see <a href="./Configuration.html">Graph persistence engine - Hbase</a>.</p></div>
<div class="section">
<h4><a name="JAAS_configuration"></a>JAAS configuration</h4>
<p>In a secure cluster, some of the components (such as Kafka) that Atlas interacts with, require Atlas to authenticate itself to them using JAAS. The following properties are used to set up appropriate JAAS Configuration.</p>
<p></p>
<ul>
<li>&lt;code&gt;atlas.jaas.&lt;code&gt;client-id&lt;code&gt;.loginModuleName&lt;code&gt; - the authentication method used by the component (for example, com.sun.security.auth.module.Krb5LoginModule)</li>
<li>&lt;code&gt;atlas.jaas.&lt;code&gt;client-id&lt;code&gt;.loginModuleControlFlag&lt;code&gt; (required|requisite|sufficient|optional) [default: required]</li>
<li>&lt;code&gt;atlas.jaas.&lt;code&gt;client-id&lt;code&gt;.option.useKeyTab&lt;code&gt; (true|false)</li>
<li>&lt;code&gt;atlas.jaas.&lt;code&gt;client-id&lt;code&gt;.option.storeKey&lt;code&gt; (true | false)</li>
<li>&lt;code&gt;atlas.jaas.&lt;code&gt;client-id&lt;code&gt;.option.serviceName&lt;code&gt; - service name of server component</li>
<li>&lt;code&gt;atlas.jaas.&lt;code&gt;client-id&lt;code&gt;.option.keyTab&lt;code&gt; = &lt;atlas keytab&gt;</li>
<li>&lt;code&gt;atlas.jaas.&lt;code&gt;client-id&lt;code&gt;.option.principal&lt;code&gt; = &lt;atlas principal&gt;</li></ul>
<p>For example, the following property settings in jaas-application.properties file</p>
<div class="source"><pre class="prettyprint">
atlas.jaas.KafkaClient.loginModuleName = com.sun.security.auth.module.Krb5LoginModule
atlas.jaas.KafkaClient.loginModuleControlFlag = required
atlas.jaas.KafkaClient.option.useKeyTab = true
atlas.jaas.KafkaClient.option.storeKey = true
atlas.jaas.KafkaClient.option.serviceName = kafka
atlas.jaas.KafkaClient.option.keyTab = /etc/security/keytabs/kafka_client.keytab
atlas.jaas.KafkaClient.option.principal = kafka-client-1@EXAMPLE.COM
atlas.jaas.MyClient.0.loginModuleName = com.sun.security.auth.module.Krb5LoginModule
atlas.jaas.MyClient.0.loginModuleControlFlag = required
atlas.jaas.MyClient.0.option.useKeyTab = true
atlas.jaas.MyClient.0.option.storeKey = true
atlas.jaas.MyClient.0.option.serviceName = kafka
atlas.jaas.MyClient.0.option.keyTab = /etc/security/keytabs/kafka_client.keytab
atlas.jaas.MyClient.0.option.principal = kafka-client-1@EXAMPLE.COM
atlas.jaas.MyClient.1.loginModuleName = com.sun.security.auth.module.Krb5LoginModule
atlas.jaas.MyClient.1.loginModuleControlFlag = optional
atlas.jaas.MyClient.1.option.useKeyTab = true
atlas.jaas.MyClient.1.option.storeKey = true
atlas.jaas.MyClient.1.option.serviceName = kafka
atlas.jaas.MyClient.1.option.keyTab = /etc/security/keytabs/kafka_client.keytab
atlas.jaas.MyClient.1.option.principal = kafka-client-1@EXAMPLE.COM
</pre></div>
<p>will set the JAAS configuration that is equivalent to the following jaas.conf file entries.</p>
<div class="source"><pre class="prettyprint">
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
serviceName=kafka
keyTab=&quot;/etc/security/keytabs/kafka_client.keytab&quot;
principal=&quot;kafka-client-1@EXAMPLE.COM&quot;;
};
MyClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
serviceName=kafka keyTab=&quot;/etc/security/keytabs/kafka_client.keytab&quot;
principal=&quot;kafka-client-1@EXAMPLE.COM&quot;;
};
MyClient {
com.sun.security.auth.module.Krb5LoginModule optional
useKeyTab=true
storeKey=true
serviceName=kafka
keyTab=&quot;/etc/security/keytabs/kafka_client.keytab&quot;
principal=&quot;kafka-client-1@EXAMPLE.COM&quot;;
};
</pre></div></div>
<div class="section">
<h4><a name="SPNEGO-based_HTTP_Authentication"></a>SPNEGO-based HTTP Authentication</h4>
<p>HTTP access to the Atlas platform can be secured by enabling the platform's SPNEGO support. There are currently two supported authentication mechanisms:</p>
<p></p>
<ul>
<li><code>simple</code> - authentication is performed via a provided user name</li>
<li><code>kerberos</code> - the KDC authenticated identity of the client is leveraged to authenticate to the server</li></ul>
<p>The kerberos support requires the client accessing the server to first authenticate to the KDC (usually this is done via the 'kinit' command). Once authenticated, the user may access the server (the authenticated identity will be related to the server via the SPNEGO negotiation mechanism).</p>
<p>The properties for configuring the SPNEGO support are:</p>
<p></p>
<ul>
<li><code>atlas.http.authentication.enabled</code> (true|false) [default: false] - a property indicating whether to enable HTTP authentication</li>
<li><code>atlas.http.authentication.type</code> (simple|kerberos) [default: simple] - the authentication type</li>
<li><code>atlas.http.authentication.kerberos.principal</code> - the web-application Kerberos principal name. The Kerberos principal name must start with &quot;HTTP/...&quot;. For example: &quot;HTTP/localhost@LOCALHOST&quot;. There is no default value.</li>
<li><code>atlas.http.authentication.kerberos.keytab</code> - the path to the keytab file containing the credentials for the kerberos principal.</li>
<li><code>atlas.rest.address</code> - &lt;http/https&gt;://&lt;atlas-fqdn&gt;:&lt;atlas port&gt;</li></ul>
<p>For a more detailed discussion of the HTTP authentication mechanism refer to <a class="externalLink" href="http://hadoop.apache.org/docs/stable/hadoop-auth/Configuration.html">Hadoop Auth, Java HTTP SPNEGO 2.6.0 - Server Side Configuration</a>. The prefix that document references is &quot;atlas.http.authentication&quot; in the case of the Atlas authentication implementation.</p></div>
<div class="section">
<h4><a name="Client_security_configuration"></a>Client security configuration</h4>
<p>When leveraging Atlas client code to communicate with an Atlas server configured for SSL transport and/or Kerberos authentication, there is a requirement to provide the Atlas client configuration file that provides the security properties that allow for communication with, or authenticating to, the server. Update the atlas-application.properties file with the appropriate settings (see below) and copy it to the client's classpath or to the directory specified by the &quot;atlas.conf&quot; system property.</p>
<p>The client properties for SSL communication are:</p>
<p></p>
<ul>
<li><code>atlas.enableTLS</code> (false|true) [default: false] - enable/disable the SSL client communication infrastructure.</li>
<li><code>keystore.file</code> - the path to the keystore file leveraged by the client. This file is only required if 2-Way SSL is enabled at the server and contains the client certificate.</li>
<li><code>truststore.file</code> - the path to the truststore file. This file contains the certificates of trusted entities (e.g. the certificates for the server or a shared certification authority). This file is required for both one-way or two-way SSL.</li>
<li><code>cert.stores.credential.provider.path</code> - the path to the Credential Provider store file. The passwords for the keystore, truststore, and client certificate are maintained in this secure file.</li></ul>
<p>The property required for authenticating to the server (if authentication is enabled):</p>
<p></p>
<ul>
<li><code>atlas.http.authentication.type</code> (simple|kerberos) [default: simple] - the authentication type</li></ul></div>
<div class="section">
<h4><a name="SOLR_Kerberos_configuration"></a>SOLR Kerberos configuration</h4>
<p>If the authentication type specified is 'kerberos', then the kerberos ticket cache will be accessed for authenticating to the server (Therefore the client is required to authenticate to the KDC prior to communication with the server using 'kinit' or a similar mechanism).</p>
<p>See <a class="externalLink" href="https://cwiki.apache.org/confluence/display/RANGER/How+to+configure+Solr+Cloud+with+Kerberos+for+Ranger+0.5">the Apache SOLR Kerberos configuration</a>.</p>
<p></p>
<ul>
<li>Add principal and generate the keytab file for solr. Create a keytab per host for each host where Solr is going to run and use the principal name with the host (e.g. addprinc -randkey solr/${HOST1}@EXAMPLE.COM. Replace ${HOST1} with the actual host names).</li></ul>
<div class="source"><pre class="prettyprint">
kadmin.local
kadmin.local: addprinc -randkey solr/&lt;hostname&gt;@EXAMPLE.COM
kadmin.local: xst -k solr.keytab solr/&lt;hostname&gt;@EXAMPLE.COM
kadmin.local: quit
</pre></div>
<p></p>
<ul>
<li>Add principal and generate the keytab file for authenticating HTTP request. (Note that if Ambari is used to Kerberize the cluster, the keytab /etc/security/keytabs/spnego.service.keytab can be used)</li></ul>
<div class="source"><pre class="prettyprint">
kadmin.local
kadmin.local: addprinc -randkey HTTP/&lt;hostname&gt;@EXAMPLE.COM
kadmin.local: xst -k HTTP.keytab HTTP/&lt;hostname&gt;@EXAMPLE.COM
kadmin.local: quit
</pre></div>
<p></p>
<ul>
<li>Copy the keytab file to all the hosts running Solr.</li></ul>
<div class="source"><pre class="prettyprint">
cp solr.keytab /etc/security/keytabs/
chmod 400 /etc/security/keytabs/solr.keytab
cp HTTP.keytab /etc/security/keytabs/
chmod 400 /etc/security/keytabs/HTTP.keytab
</pre></div>
<p></p>
<ul>
<li>Create path in Zookeeper for storing the Solr configs and other parameters.</li></ul>
<div class="source"><pre class="prettyprint">
$SOLR_INSTALL_HOME/server/scripts/cloud-scripts/zkcli.sh -zkhost $ZK_HOST:2181 -cmd makepath solr
</pre></div>
<p></p>
<ul>
<li>Upload the configuration to Zookeeper.</li></ul>
<div class="source"><pre class="prettyprint">
$SOLR_INSTALL_HOME/server/scripts/cloud-scripts/zkcli.sh -cmd upconfig -zkhost $ZK_HOST:2181/solr -confname basic_configs -confdir $SOLR_INSTALL_HOME/server/solr/configsets/basic_configs/conf
</pre></div>
<p></p>
<ul>
<li>Create the JAAS configuration.</li></ul>
<div class="source"><pre class="prettyprint">
vi /etc/solr/conf/solr_jaas.conf
Client {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
keyTab=&quot;/etc/security/keytabs/solr.keytab&quot;
storeKey=true
useTicketCache=true
debug=true
principal=&quot;solr/&lt;hostname&gt;@EXAMPLE.COM&quot;;
};
</pre></div>
<p></p>
<ul>
<li>Copy /etc/solr/conf/solr_jaas.conf to all hosts running Solr.</li></ul>
<p></p>
<ul>
<li>Edit solr.in.sh in $SOLR_INSTALL_HOME/bin/</li></ul>
<div class="source"><pre class="prettyprint">
vi $SOLR_INSTALL_HOME/bin/solr.in.sh
SOLR_JAAS_FILE=/etc/solr/conf/solr_jaas.conf
SOLR_HOST=`hostname -f`
ZK_HOST=&quot;$ZK_HOST1:2181,$ZK_HOST2:2181,$ZK_HOST3:2181/solr&quot;
KERBEROS_REALM=&quot;EXAMPLE.COM&quot;
SOLR_KEYTAB=/etc/solr/conf/solr.keytab
SOLR_KERB_PRINCIPAL=HTTP@${KERBEROS_REALM}
SOLR_KERB_KEYTAB=/etc/solr/conf/HTTP.keytab
SOLR_AUTHENTICATION_CLIENT_CONFIGURER=&quot;org.apache.solr.client.solrj.impl.Krb5HttpClientConfigurer&quot;
SOLR_AUTHENTICATION_OPTS=&quot; -DauthenticationPlugin=org.apache.solr.security.KerberosPlugin -Djava.security.auth.login.config=${SOLR_JAAS_FILE} -Dsolr.kerberos.principal=${SOLR_KERB_PRINCIPAL} -Dsolr.kerberos.keytab=${SOLR_KERB_KEYTAB} -Dsolr.kerberos.cookie.domain=${SOLR_HOST} -Dhost=${SOLR_HOST} -Dsolr.kerberos.name.rules=DEFAULT&quot;
</pre></div>
<p></p>
<ul>
<li>Copy solr.in.sh to all hosts running Solr.</li></ul>
<p></p>
<ul>
<li>Set up Solr to use the Kerberos plugin by uploading the security.json.</li></ul>
<div class="source"><pre class="prettyprint">
$SOLR_INSTALL_HOME/server/scripts/cloud-scripts/zkcli.sh -zkhost &lt;zk host&gt;:2181 -cmd put /security.json '{&quot;authentication&quot;:{&quot;class&quot;: &quot;org.apache.solr.security.KerberosPlugin&quot;}}'
</pre></div>
<p></p>
<ul>
<li>Start Solr.</li></ul>
<div class="source"><pre class="prettyprint">
$SOLR_INSTALL_HOME/bin/solr start -cloud -z $ZK_HOST1:2181,$ZK_HOST2:2181,$ZK_HOST3:2181 -noprompt
</pre></div>
<p></p>
<ul>
<li>Test Solr</li></ul>
<div class="source"><pre class="prettyprint">
kinit -k -t /etc/security/keytabs/HTTP.keytab HTTP/&lt;host&gt;@EXAMPLE.COM
curl --negotiate -u : &quot;http://&lt;host&gt;:8983/solr/&quot;
</pre></div>
<p></p>
<ul>
<li>Create collections in Solr corresponding to the indexes that Atlas uses and change the Atlas configuration to point to the Solr instance setup as described in the <a href="./InstallationSteps.html">Install Steps</a>.</li></ul></div>
</div>
</div>
<hr/>
<footer>
<div class="container">
<div class="row">
<p><a href="https://www.apache.org/foundation/contributing"><img src="https://www.apache.org/images/SupportApache-small.png" alt="Support the ASF" id="asf-logo" height="20" width="20" /></a>Copyright © 2011-2018 The Apache Software Foundation. Licensed under the <a href="https://www.apache.org/licenses/">Apache License, Version 2.0</a>.<br/>
Apache Atlas, Atlas, Apache, the Apache feather logo are trademarks of the <a href="https://www.apache.org">Apache Software Foundation</a>.<br/>
All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p>
</div>
<p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
</p>
</div>
</footer>
</body>
</html>