<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<faqs xmlns="http://maven.apache.org/FML/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/FML/1.0 http://maven.apache.org/xsd/fml-1.0.xsd" id="FAQ" title="Frequently Asked Questions">
  <part id="General">
    <title>General</title>
    <faq id="What does Apache Ranger offer for Hadoop">
      <question>What does Apache Ranger offer for Apache Hadoop and related components?</question>
      <answer>
        <p>
            Apache Ranger offers a centralized security framework to manage fine grained access control over Hadoop and related components (Apache Hive, HBase etc.). Using the Apache Ranger administration console, users can easily manage policies around accessing a resource (file, folder, database, table, column etc) for a particular set of users and/or groups, and enforce the policies within Hadoop. They also can enable audit tracking and policy analytics for deeper control of the environment. Apache Ranger also provides ability to delegate administration of certain data to other group owners, with an aim of decentralizing data ownership
          </p>
    </answer>
    </faq>
    <faq id="What components does Apache Ranger support today">
    <question>What projects does Apache Ranger support today</question>
     <answer>
         <p>
             Apache Ranger supports fine grained authorization and auditing for following Apache projects:
         </p>
         <ul>
         <li>Apache Hadoop</li>
         <li>Apache Hive</li>
         <li>Apache HBase</li>
         <li>Apache Storm</li>
         <li>Apache Knox</li>
         <li>Apache Solr</li>
         <li>Apache Kafka</li>
         <li>YARN</li>
     </ul>
     </answer>
    </faq>
    
    <faq id="How does it work over Hadoop and related components">
      <question>How does it work over Hadoop and related components</question>
      <answer>
        <p>
        Apache Ranger at the core has a centralized web application, which consists of the policy administration, audit and reporting modules. Authorized users will be able to manage their security policies using the web tool or using REST APIs.  These security policies are enforced within Hadoop ecosystem using lightweight Ranger Java plugins, which run as part of the same process as the namenode (HDFS), Hive2Server(Hive), HBase server (Hbase), Nimbus server (Storm) and Knox server (Knox) respectively. Thus there is no additional OS level process to manage.
        </p>
      </answer>
    </faq>
    <faq id="Is there a single point of failure?">
      <question>Is there a single point of failure?</question>
      <answer>
        <p>
           No, Apache Ranger is not a Single Point of Failure. Apache Ranger's plugins run within the same process as the component, e.g. NameNode for HDFS.  These agents pull the policy-changes using REST API at a configured regular interval (e.g.: 30 second). The plugin is able to function even if the policy server is temporarily down and will provide the authorization enforcement. Also, the policy manager web application can be hosted on a HA infrastructure. (with multiple apache server, multiple tomcat servers and a standby database server w/o replication setup).
        </p>
    </answer>
    </faq>
  </part>
  
  <part id="Apache Hadoop">
    <title>Apache Hadoop</title>
    <faq id="How does Apache Ranger provide authorization in Apache Hadoop">
      <question>How does Apache Ranger provide authorization in Apache Hadoop?</question>
      <answer>
        <p>
          Apache Ranger provides a plugin for Apache Hadoop, specifically for the NameNode as part of the authorization method. The Apache Ranger plugin is in the path of the user request and is able to make a decision on whether the user request shoud be authorized. The plugin also collects access request details required for auditing
        </p>
        <p>
            Apache Ranger will enforce the security policies available in the policy database. Users can create a security policy for a specific set of resources (one or more folders and/or files) and assign specific set of permissions (e.g: read, write, execute) to a specific set of users and/or groups. The security policies are stored in the policy manager and are independent from native permissions.
            </p>
    </answer>
        </faq>
      <faq id="Does Apache Ranger emulate native unix level permissions?">
          <question>Does Apache Ranger emulated permissions at the unix level for Apache Hadoop?</question>
          <answer>
              <p>
                 No, Apache Ranger enforces authorization based on policies entered in the policy administration tool and does not emulate the permissions at the unix level.  Apache Ranger does provide a default feature to validate access using native hadoop file-level permissions if the Ranger policies do not cover the requested access
              </p>
              </answer>
          </faq>
  
  <faq id="Do we need an Apache Ranger plugin in each datanode?">
      <question>Does the Apache Ranger plugin need to be implemented in each datanode ?</question>
      <answer>
          <p>
              No, the Apache Ranger plugin for Hadoop is only needed in the NameNode.
              
          </p>
      </answer>
  </faq>

</part>
    <part id="Apache Hive">
        <title>Apache Hive</title>
        <faq id="How does Apache Ranger provide authorization in Apache Hive">
            <question>How does Apache Ranger provide authorization in Apache Hive?</question>
            <answer>
                <p>
                    The Apache Ranger plugin is enabled in Hiveserver2 as part of the authorization
                </p>
            </answer>
            </faq>
        
        <faq id="How does Apache Ranger authorization compare to SQL standard authorization">
            <question>How does Apache Ranger authorization compare to SQL standard authorization?</question>
            <answer>
                <p>
                    Apache Hive currently provides two methods of authorization, Storage based authorization and SQL standard authorization, which was introduced in Hive 13. SQL standard authorization provides grant/revoke functionality at database, table level. The commands would be familiar to a DBA admin. Apache Ranger provides a centralized authorization interface for Hive and provides more granular access control at column level through the Hive plugin. Ranger also provides ability to use wildcard in resource names within the policy.
                </p>
            </answer>
        </faq>
        
</part>

<part id="Apache HBase">
    <title>Apache HBase</title>
    <faq id="How does Apache Ranger provide authorization in Apache HBase">
        <question>How does Apache Ranger provide authorization in Apache Hbase?</question>
        <answer>
            <p>
                Apache Ranger provides a coprocessor which is added to HBase, and includes the logic to perform authorization check and collect audit data.
            </p>
        </answer>
    </faq>
</part>
<part id="Apache Knox">
    <title>Apache Knox</title>
    <faq id="How does Apache Ranger provide authorization in Apache Knox">
        <question>How does Apache Ranger provide authorization in Apache Knox?</question>
        <answer>
            <p>
                Apache Knox currently provides a service level authorization for users/groups. These acls are stored locally in a file. Apache Ranger has built a plugin for Knox to enable administration of these policies through central UI/REST APIs as well as detailed auditing of Knox user access.
            </p>
        </answer>
    </faq>
</part>
<part id="Apache Kafka">
    <title>Apache Kafka</title>
    <faq id="How does Apache Ranger provide authorization in Apache Kafka">
        <question>How does Apache Ranger provide authorization in Apache Kafka?</question>
        <answer>
            <p>
                Security was introduced in Apache Kafka 0.9. Apache Ranger can manage the Kafka ACLs per topic. Users can use Ranger to control who can write to a topic or read from a topic. In addition to providing policies by users and groups, Apache Ranger also supports IP address based permissions to publish or subscribe.
            </p>
        </answer>
    </faq>
</part>
<part id="Apache Solr">
    <title>Apache Solr</title>
    <faq id="How does Apache Ranger provide authorization in Apache Solr">
        <question>How does Apache Ranger provide authorization in Apache Solr?</question>
        <answer>
            <p>
                Similar to Apache Kafka, security in Apache Solr was introduced recently by the community. Through Apache Ranger, users can build policies for users/groups to query a particular collections in Solr. Efforts are underway in Solr community to provide more granular index level permissions.
            </p>
        </answer>
    </faq>
</part>
<part id="Yarn">
    <title>YARN</title>
    <faq id="How does Apache Ranger provide authorization in YARN">
        <question>How does Apache Ranger provide authorization in YARN?</question>
        <answer>
            <p>
               YARN is widely used in the Hadoop ecosystem as resource management layer for applications. Adminstrators can use YARN to setup queues with a certain capacity and applications can be given permissions to write to a certain queue. Using Apache Ranger, administrators can manage the policies for who can write to a particular queue
            </p>
        </answer>
    </faq>
</part>
</faqs>
