# Apache Ranger™ y Ranger KMS

Este manual es una guía de instalación de Apache Ranger™ y Ranger KMS.

{% hint style="warning" %}
Este procedimiento se aplica al entorno GHDP.
{% endhint %}

## Prerrequisitos

Instale los prerrequisitos para el procedimiento de [build de Ranger](#builddoranger).

### Maven

1. Descargue la última versión de Maven en [Downloading Apache Maven](https://maven.apache.org/download.cgi) o:

   ```sh
   cd /usr/local
   wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
   tar -xvf apache-maven-<Version>-bin.tar.gz
   ```
2. Edite el archivo que carga las variables de entorno del GHDP:

   ```sh
   vim /etc/profile.d/hadoop_setup.sh
   ```

   ```sh
   ...
   # MAVEN (to Ranger)
   export M2_VERSION=$(ls -A /usr/local/ | grep apache-maven- | grep -v .gz | awk -F '-' '{print $3}')
   export M2_HOME=/usr/local/apache-maven-$M2_VERSION
   export M2=$M2_HOME/bin
   ...
   ```
3. Verifique si la instalación se realizó correctamente:

   ```sh
   mvn -version
   ```

### Otros requisitos

Instale los otros requisitos necesarios:

```sh
yum -y install git
yum -y install gcc
yum -y install g++
yum install bzip2 -y
yum -y install java-1.8.0-openjdk-devel
yum -y install python3
```

## Build de Ranger

1. Descargue el *source* de Ranger más actualizado que se adecue a la versión de su OS y Java, en el [sitio oficial de Ranger](https://ranger.apache.org/download.html) o:

   ```sh
   wget https://dlcdn.apache.org/ranger/2.3.0/apache-ranger-2.3.0.tar.gz
   tar -xvf apache-ranger-2.3.0.tar.gz
   cd ./apache-ranger-2.3.0
   ```
2. Haga el *build* de Ranger utilizando Maven:

   ```sh
   mvn clean compile package install
   ```
3. Si ocurre un error de acceso inseguro, debido a certificado vencido en algún enlace de repositorio, ejecute el *build* de la siguiente forma:

   ```sh
   mvn clean compile package install -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true
   ```
4. Finalice el procedimiento de *build* con el siguiente comando:

   ```sh
   mvn eclipse:eclipse
   ```
5. Al final, se generará una carpeta llamada `target` con todos los componentes de Ranger.

   ```sh
   cd ./target
   ls -l

   total 1328820
   drwxr-xr-x. 2 root root      4096 Dec 15 14:34 antrun
   -rw-r--r--. 1 root root        87 Dec 15 14:34 checkstyle-cachefile
   -rw-r--r--. 1 root root      9216 Dec 15 14:34 checkstyle-checker.xml
   -rw-r--r--. 1 root root     20369 Dec 15 14:34 checkstyle-header.txt
   -rw-r--r--. 1 root root        81 Dec 15 14:34 checkstyle-result.xml
   -rw-r--r--. 1 root root      1144 Dec 15 14:34 checkstyle-suppressions.xml
   drwxr-xr-x. 3 root root      4096 Dec 15 14:34 maven-shared-archive-resources
   -rw-r--r--. 1 root root 518758611 Dec 15 14:34 ranger-2.3.0-admin.tar.gz
   -rw-r--r--. 1 root root  41566842 Dec 15 14:34 ranger-2.3.0-atlas-plugin.tar.gz
   -rw-r--r--. 1 root root  36041635 Dec 15 14:34 ranger-2.3.0-elasticsearch-plugin.tar.gz
   -rw-r--r--. 1 root root  36975553 Dec 15 14:34 ranger-2.3.0-hbase-plugin.tar.gz
   -rw-r--r--. 1 root root  35537921 Dec 15 14:34 ranger-2.3.0-hdfs-plugin.tar.gz
   -rw-r--r--. 1 root root  35327622 Dec 15 14:34 ranger-2.3.0-hive-plugin.tar.gz
   -rw-r--r--. 1 root root  54580246 Dec 15 14:34 ranger-2.3.0-kafka-plugin.tar.gz
   drwxr-xr-x. 7 root root      4096 Dec 15 14:34 ranger-2.3.0-kms
   -rw-r--r--. 1 root root 195191513 Dec 15 14:34 ranger-2.3.0-kms.tar.gz
   -rw-r--r--. 1 root root  49243221 Dec 15 14:34 ranger-2.3.0-knox-plugin.tar.gz
   -rw-r--r--. 1 root root  34477047 Dec 15 14:34 ranger-2.3.0-kylin-plugin.tar.gz
   -rw-r--r--. 1 root root     34007 Dec 15 14:34 ranger-2.3.0-migration-util.tar.gz
   -rw-r--r--. 1 root root  41233187 Dec 15 14:34 ranger-2.3.0-ozone-plugin.tar.gz
   -rw-r--r--. 1 root root  55205632 Dec 15 14:34 ranger-2.3.0-presto-plugin.tar.gz
   -rw-r--r--. 1 root root  15803444 Dec 15 14:34 ranger-2.3.0-ranger-tools.tar.gz
   -rw-r--r--. 1 root root    905882 Dec 15 14:34 ranger-2.3.0-schema-registry-plugin.jar
   -rw-r--r--. 1 root root     37302 Dec 15 14:34 ranger-2.3.0-solr_audit_conf.tar.gz
   -rw-r--r--. 1 root root     40595 Dec 15 14:34 ranger-2.3.0-solr_audit_conf.zip
   -rw-r--r--. 1 root root  36130187 Dec 15 14:34 ranger-2.3.0-solr-plugin.tar.gz
   -rw-r--r--. 1 root root  34715214 Dec 15 14:34 ranger-2.3.0-sqoop-plugin.tar.gz
   -rw-r--r--. 1 root root   6315989 Dec 15 14:34 ranger-2.3.0-src.tar.gz
   -rw-r--r--. 1 root root  49575156 Dec 15 14:34 ranger-2.3.0-storm-plugin.tar.gz
   -rw-r--r--. 1 root root  30112906 Dec 15 14:34 ranger-2.3.0-tagsync.tar.gz
   -rw-r--r--. 1 root root  19205167 Dec 15 14:34 ranger-2.3.0-usersync.tar.gz
   -rw-r--r--. 1 root root  33381584 Dec 15 14:34 ranger-2.3.0-yarn-plugin.tar.gz
   -rw-r--r--. 1 root root    196038 Dec 15 14:34 rat.txt
   -rw-r--r--. 1 root root         5 Dec 15 14:34 version
   ```

## Instalación de Solr

{% hint style="info" %}
Consulte en el [Sitio Oficial de Solr](https://solr.apache.org/downloads.html) cuál es la mejor versión de Solr para su sistema.
{% endhint %}

1. Acceda a la carpeta de *build* de Ranger, conforme realizado en el [tópico anterior](#builddoranger).\ <br>
2. Dentro de esa carpeta, acceda a la carpeta del instalador de Solr, en la que será preconfigurado para uso con Ranger:

   ```sh
   cd ~/apache-ranger-2.3.0
   cd ./security-admin/contrib/solr_for_audit_setup/
   ```
3. Cree la carpeta de Solr conforme la versión elegida:

   ```sh
   mkdir -p /usr/gdp/hadoop/solr/8.11.2/
   ```
4. Edite el archivo `install.properties`:

   ```sh
   vim install.properties
   ```

   ```properties
   ...
   SOLR_INSTALL=true
   SOLR_DOWNLOAD_URL=https://dlcdn.apache.org/lucene/solr/8.11.2/solr-8.11.2.tgz
   SOLR_LOG_FOLDER=/var/log/hadoop/solr/ranger_audits
   ...

   :wq
   ```

   ```sh
   sed -i 's/\/opt\/solr/\/usr\/gdp\/hadoop\/solr\/8.11.2/g' install.properties
   ```
5. Ejecute el script `setup.sh` y verifique los procedimientos de *start* según indicado por el *log* de instalación:

   ```sh
   chmod +x setup.sh
   ./setup.sh

   less /usr/gdp/hadoop/solr/8.11.2/ranger_audit_server/install_notes.txt
   ```
6. Inicie Solr:

   ```sh
   /usr/gdp/hadoop/solr/8.11.2/ranger_audit_server/scripts/start_solr.sh
   ```

## Instalación y configuración de Ranger Admin

1. Cree la carpeta de Ranger Admin:

   ```sh
   mkdir -p /usr/gdp/hadoop/ranger/2.3.0/ranger-admin
   ```
2. Acceda a la carpeta `target`, generada en el procedimiento de [build](#builddoranger), y descomprima el archivo `ranger-2.3.0-admin.tar.gz`:

   ```sh
   cd ./apache-ranger-2.3.0/target
   tar -xvf ranger-2.3.0-admin.tar.gz
   ```
3. Copie todos los archivos dentro de la carpeta descomprimida a la carpeta `ranger-admin`.

   ```sh
   cd ranger-2.3.0-admin
   cp -R * /usr/gdp/hadoop/ranger/2.3.0/ranger-admin/
   ```
4. En la base de datos, cree el usuario `rangerdba` de la siguiente forma:

   ```sh
   mysql -uroot -p
   ```

   ```sql
   SET GLOBAL validate_password_policy=LOW;

   CREATE USER 'rangerdba'@'localhost' IDENTIFIED BY 'rangerdba';

   GRANT ALL PRIVILEGES ON *.* TO 'rangerdba'@'localhost';

   CREATE USER 'rangerdba'@'%' IDENTIFIED BY 'rangerdba';

   GRANT ALL PRIVILEGES ON *.* TO 'rangerdba'@'%';

   GRANT ALL PRIVILEGES ON *.* TO 'rangerdba'@'localhost' WITH GRANT OPTION;

   GRANT ALL PRIVILEGES ON *.* TO 'rangerdba'@'%' WITH GRANT OPTION;

   FLUSH PRIVILEGES;
   ```
5. Si no está instalado, instale el `mysql-connector-java` y verifique si el archivo `mysql-connector-java.jar` está en la carpeta correcta:

   ```sh
   yum install mysql-connector-java
   ls /usr/share/java/mysql-connector-java.jar
   ```
6. Cree la carpeta de *registros* para Ranger Admin:

   ```sh
   mkdir -p /var/log/hadoop/ranger/ranger-admin
   ```
7. En la carpeta de Ranger Admin, edite el archivo `install.properties`:

   ```sh
   cd /usr/gdp/hadoop/ranger/2.3.0/ranger-admin/
   vim install.properties
   ```

   ```properties
   ...
   db_root_user=rangerdba
   db_root_password=rangerdba
   db_host=localhost

   db_name=ranger
   db_user=rangerdba
   db_password=rangerdba

   rangerAdmin_password=Griaule.123
   rangerTagsync_password=Griaule.123
   rangerUsersync_password=Griaule.123
   keyadmin_password=Griaule.123

   audit_solr_urls=http://localhost:6083/solr/ranger_audits

   policymgr_supportedcomponents=hbase,hdfs,kafka,kms

   authentication_method=UNIX
   remoteLoginEnabled=true
   authServiceHostName=localhost
   authServicePort=5151

   hadoop_conf=/etc/hadoop/hdfs/conf/

   RANGER_ADMIN_LOG_DIR=/var/log/hadoop/ranger/ranger-admin
   ...
   ```
8. Ejecute el script de *setup*:

   ```sh
   ./setup.sh
   ```
9. Agregue permisos para las carpetas de Ranger y *registros* y agregue el usuario `ranger` al grupo `hadoop`.

   ```sh
   chown -R ranger: /usr/gdp/hadoop/ranger/
   chown -R ranger: /var/log/hadoop/ranger/
   usermod -a -G hadoop ranger
   ```
10. Para inicializar Ranger Admin utilice el comando:

    ```sh
    ranger-admin start
    ```
11. Acceda al enlace e ingrese el usuario `admin` y la contraseña preconfigurada.

    ```html
    http://<my_ip>:6080/
    ```

{% hint style="info" %}
En este contexto, la contraseña preconfigurada siempre será `Griaule.123`.
{% endhint %}

## Instalación de Ranger UserSync

1. En la carpeta de *build* de Ranger, cree una carpeta para Ranger UserSync llamada `ranger-usersync`, descomprima el archivo `tar.gz` correspondiente a la aplicación y copie todos los archivos a la carpeta creada:

   ```sh
   mkdir -p /usr/gdp/hadoop/ranger/2.3.0/ranger-usersync
   tar -xvf ranger-2.3.0-usersync.tar.gz
   cd ranger-2.3.0-usersync
   cp -R * /usr/gdp/hadoop/ranger/2.3.0/ranger-usersync
   ```
2. Cree la carpeta de *registros* y conceda acceso al usuario `ranger` a las carpetas `/usr/gdp/hadoop/ranger/` y `/var/log/hadoop/ranger/`:

   ```sh
   mkdir -p /var/log/hadoop/ranger/ranger-usersync
   chown -R ranger: /usr/gdp/hadoop/ranger/
   chown -R ranger: /var/log/hadoop/ranger/
   ```
3. En la carpeta `ranger-usersync`, edite el archivo `install.properties` de la siguiente forma:

   ```sh
   cd /usr/gdp/hadoop/ranger/2.3.0/ranger-usersync
   vim install.properties
   ```

   ```properties
   ...
   POLICY_MGR_URL = http://<ip_addr>:6080

   SYNC_SOURCE = unix

   SYNC_INTERVAL = 5

   rangerUsersync_password=Griaule.123 # misma contraseña que se definió para él en ranger-admin

   hadoop_conf=/etc/hadoop/hdfs/conf

   logdir=/var/log/hadoop/ranger/ranger-usersync
   ...
   ```
4. Cambie el *path* predeterminado de la aplicación de `/etc/ranger` a `/usr/gdp/hadoop/ranger/2.3.0/ranger-usersync/ranger`:

   ```sh
   sed -i 's/\/etc\/ranger/\/usr\/gdp\/hadoop\/ranger\/2.3.0\/ranger-usersync\/ranger/g' install.properties
   ```
5. Ejecute el script `setup.sh`:

   ```sh
   ./setup.sh
   ```
6. Cambie la configuración para habilitar la sincronización del UserSync:

   ```sh
   vim /usr/gdp/hadoop/ranger/2.3.0/ranger-usersync/conf/ranger-ugsync-site.xml
   ```

   ```xml
   <property>
     <name>ranger.usersync.enabled</name>
     <value>true</value>
   </property>
   ```
7. Después de la instalación con resultado **successfully**, inicie el servicio utilizando el script `ranger-usersync-services.sh`:

   ```sh
   # Inicialización:
   ./ranger-usersync-services.sh start

   # Parada:
   ./ranger-usersync-services.sh stop
   ```

## Instalación de Plugins

{% hint style="info" %}
Los plugins **no son** necesarios para el funcionamiento de Ranger KMS. Son solo recursos disponibles para auditoría de los recursos de Hadoop.
{% endhint %}

### Plugin HDFS

{% hint style="warning" %}
El Plugin HDFS debe instalarse en **todos** los *NameNodes*.
{% endhint %}

1. Cree la carpeta `ranger-hdfs-plugin` conforme a la estructura del GHDP:

   ```sh
   mkdir -p /usr/gdp/hadoop/ranger/2.3.0/ranger-hdfs-plugin
   ```
2. En la carpeta de *build* del Ranger, descomprima el archivo `ranger-2.3.0-hdfs-plugin.tar.gz` y copie todos los archivos a la carpeta creada anteriormente:

   ```sh
   cd ./apache-ranger-2.3.0/target/
   tar -xvf ranger-2.3.0-hdfs-plugin.tar.gz
   cd ranger-2.3.0-hdfs-plugin
   cp -R * /usr/gdp/hadoop/ranger/2.3.0/ranger-hdfs-plugin
   ```
3. En la carpeta del plugin, edite el archivo `install.properties`:

   ```sh
   cd /usr/gdp/hadoop/ranger/2.3.0/ranger-hdfs-plugin
   vim install.properties
   ```

   ```properties
   ...
   POLICY_MGR_URL=http://<host_addrs>:6080

   REPOSITORY_NAME=hadoopdev

   COMPONENT_INSTALL_DIR_NAME=/usr/gdp/hadoop/hdfs/3.2.4/

   XAAUDIT.SOLR.ENABLE = true
   XAAUDIT.SOLR.URL = http://<host_addrs>:6083/solr/ranger_audits
   XAAUDIT.SOLR.USER = NONE
   XAAUDIT.SOLR.PASSWORD = NONE
   XAAUDIT.SOLR.ZOOKEEPER = NONE
   XAAUDIT.SOLR.FILE_SPOOL_DIR = /var/log/hadoop/hdfs/audit/solr/spool
   ...
   ```
4. Si existe más de un *NameNode*, cree la misma estructura de carpetas y copie todo el contenido a los demás *NameNodes* con `scp`:

   > Este procedimiento debe realizarse **antes** de la habilitación del *plugin*.

   ```sh
   # NameNode2
   mkdir -p /usr/gdp/hadoop/ranger/2.3.0/ranger-hdfs-plugin

   # NameNode1
   scp -r * root@localhost:/usr/gdp/hadoop/ranger/2.3.0/ranger-hdfs-plugin/

   # NameNode2
   cd /usr/gdp/hadoop/ranger/2.3.0/ranger-hdfs-plugin
   ls -l
   ```
5. Habilite el *plugin* ejecutando el script `enable-hdfs-plugin.sh`:

   ```sh
   ./enable-hdfs-plugin.sh
   ```
6. Conéctese al **Ranger Admin UI**. En la pantalla principal, en HDFS, haga clic en el botón + y rellene los campos con la siguiente información:
   * *Service Name*: `hadoopdev`
   * *Display Name*: `hadoopdev`
   * *Username*: `hadoop` (Usuario UNIX)
   * *Password*: `<contraseña creada para el usuario hadoop en UNIX>`
   * *NameNode URL*: `hdfs://localhost:50070`
   * *Authentication Type*: `Simple`\ <br>
7. Mantenga el resto de las configuraciones sin cambios y haga clic en el botón Add.\ <br>
8. Reinicie el *cluster*.

### Plugin HBase

{% hint style="warning" %}
El Plugin HBase debe instalarse en **todos** los hosts con *Master* y *Regional*.
{% endhint %}

1. Cree la carpeta `ranger-hbase-plugin` conforme a la estructura del GHDP.

   ```sh
   mkdir -p /usr/gdp/hadoop/ranger/2.3.0/ranger-hbase-plugin
   ```
2. En la carpeta de *build* del Ranger, descomprima el archivo `ranger-2.3.0-hbase-plugin.tar.gz` y copie todos los archivos a la carpeta creada anteriormente:

   ```sh
   cd ./apache-ranger-2.3.0/target/
   tar -xvf ranger-2.3.0-hbase-plugin.tar.gz
   cd ranger-2.3.0-hbase-plugin
   cp -R * /usr/gdp/hadoop/ranger/2.3.0/ranger-hbase-plugin
   ```
3. En la carpeta del plugin, edite el archivo `install.properties`:

   ```sh
   vim install.properties
   ```

   ```properties
   ...
   POLICY_MGR_URL=http://localhost:6080

   REPOSITORY_NAME=hbasedev

   COMPONENT_INSTALL_DIR_NAME=/usr/gdp/hadoop/hbase/2.5.1

   XAAUDIT.SOLR.ENABLE=true
   XAAUDIT.SOLR.URL=http://localhost:6083/solr/ranger_audits
   XAAUDIT.SOLR.USER=NONE
   XAAUDIT.SOLR.PASSWORD=NONE
   XAAUDIT.SOLR.ZOOKEEPER=NONE
   XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/hadoop/hbase/audit/solr/spool

   XAAUDIT.SOLR.IS_ENABLED=true
   XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
   XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
   XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits
   ...
   ```
4. Cree la misma estructura de carpetas y copie todo el contenido a *Master* y *Regional*:

   > Este procedimiento debe realizarse **antes** de la habilitación del *plugin*.

   ```sh
   # node2 & node3
   mkdir -p /usr/gdp/hadoop/ranger/2.3.0/ranger-hbase-plugin

   # node1
   scp -r * root@localhost:/usr/gdp/hadoop/ranger/2.3.0/ranger-hbase-plugin/
   scp -r * root@localhost:/usr/gdp/hadoop/ranger/2.3.0/ranger-hbase-plugin/

   # node2 & node3
   cd /usr/gdp/hadoop/ranger/2.3.0/ranger-hbase-plugin
   ls -l
   ```
5. Cree un usuario `hbase` y habilite el *plugin* ejecutando el script `enable-hbase-plugin.sh`:

   ```sh
   useradd hbase
   passwd hbase
   ./enable-hbase-plugin.sh
   ```
6. Conéctese al **Ranger Admin UI**. En la pantalla principal, en HDFS, haga clic en el botón + y rellene los campos con la siguiente información:
   * *Service Name*: `hadoopdev`
   * *Display Name*: `hadoopdev`
   * *Username*: `hbase` (Usuario UNIX)
   * *Password*: `<contraseña creada para el usuario hbase en UNIX>`
   * *hadoop.security.authentication*: `Simple`
   * *hbase.security.authentication*: `Simple`
   * *hbase.zookeeper.property.clientPort*: `2181`
   * *hbase.zookeeper.quorum*: `,,`
   * *zookeeper.znode.parent*: `/hbase-unsecure`\ <br>
7. Mantenga el resto de las configuraciones sin cambios y haga clic en el botón Add.\ <br>
8. Reinicie el *cluster*.

### Plugin Kafka

{% hint style="warning" %}
El Plugin Kafka debe instalarse en **todos** los hosts que tienen el componente instalado.
{% endhint %}

1. Cree la carpeta `ranger-kafka-plugin` conforme a la estructura del GHDP:

   ```sh
   mkdir -p /usr/gdp/hadoop/ranger/2.3.0/ranger-kafka-plugin
   ```
2. En la carpeta de *build* del Ranger, descomprima el archivo `ranger-2.3.0-kafka-plugin.tar.gz` y copie todos los archivos a la carpeta creada anteriormente:

   ```sh
   cd ./apache-ranger-2.3.0/target/
   tar -xvf ranger-2.3.0-kafka-plugin.tar.gz
   cd ranger-2.3.0-kafka-plugin
   cp -R * /usr/gdp/hadoop/ranger/2.3.0/ranger-kafka-plugin
   ```
3. En la carpeta del plugin, edite el archivo `install.properties`:

   ```sh
   vim install.properties
   ```

   ```properties
   ...
   COMPONENT_INSTALL_DIR_NAME=/usr/gdp/hadoop/kafka/3.3.1/

   POLICY_MGR_URL=http://localhost:6080

   REPOSITORY_NAME=kafkadev

   XAAUDIT.SOLR.ENABLE=true
   XAAUDIT.SOLR.URL=http://localhost:6083/solr/ranger_audits
   XAAUDIT.SOLR.USER=NONE
   XAAUDIT.SOLR.PASSWORD=NONE
   XAAUDIT.SOLR.ZOOKEEPER=NONE
   XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/hadoop/kafka/audit/solr/spool

   XAAUDIT.SOLR.IS_ENABLED=true
   XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
   XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
   XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits
   ...
   ```
4. Cree la misma estructura de carpetas y copie todo el contenido a los demás *nodos*:

   > Este procedimiento debe realizarse **antes** de la habilitación del *plugin*.

   ```sh
   # node2 & node3
   mkdir -p /usr/gdp/hadoop/ranger/2.3.0/ranger-kafka-plugin

   # node1
   scp -r * root@localhost:/usr/gdp/hadoop/ranger/2.3.0/ranger-kafka-plugin
   scp -r * root@localhost:/usr/gdp/hadoop/ranger/2.3.0/ranger-kafka-plugin

   # node2 & node3
   cd /usr/gdp/hadoop/ranger/2.3.0/ranger-kafka-plugin
   ls -l
   ```
5. Cree un usuario `kafka` y habilite el *plugin* ejecutando el script `enable-kafka-plugin.sh`:

   ```sh
   useradd kafka
   passwd kafka
   ./enable-kafka-plugin.sh
   ```
6. Conéctese al **Ranger Admin UI**. En la pantalla principal, en HDFS, haga clic en el botón + y rellene los campos con la siguiente información:
   * *Service Name*: `hadoopdev`
   * *Display Name*: `hadoopdev`
   * *Username*: `hbase` (Usuario UNIX)
   * *Password*: `<contraseña creada para el usuario hbase en UNIX>`
   * *hadoop.security.authentication*: `Simple`
   * *hbase.security.authentication*: `Simple`
   * *hbase.zookeeper.property.clientPort*: `2181`
   * *hbase.zookeeper.quorum*: `,,`
   * *zookeeper.znode.parent*: `/hbase-unsecure`\ <br>
7. Mantenga el resto de las configuraciones sin cambios y haga clic en el botón Add.\ <br>
8. Reinicie el *cluster*.

## Instalación y configuración de Ranger KMS

### Instalación de Ranger KMS

1. Cree la carpeta `ranger-kms` conforme a la estructura del GHDP:

   ```sh
   mkdir -p /usr/gdp/hadoop/ranger/2.3.0/ranger-kms
   ```
2. En el servidor MySQL, cree un usuario `rangerkms` para la gestión de la base hecha por la aplicación:

   ```sh
   mysql -uroot -p
   ```

   ```sql
   CREATE USER 'rangerkms'@'localhost' IDENTIFIED BY 'rangerkms';

   GRANT ALL PRIVILEGES ON *.* TO 'rangerkms'@'localhost';

   CREATE USER 'rangerkms'@'%' IDENTIFIED BY 'rangerkms';

   GRANT ALL PRIVILEGES ON *.* TO 'rangerkms'@'%';

   GRANT ALL PRIVILEGES ON *.* TO 'rangerkms'@'localhost' WITH GRANT OPTION;

   GRANT ALL PRIVILEGES ON *.* TO 'rangerkms'@'%' WITH GRANT OPTION;

   FLUSH PRIVILEGES;
   ```
3. En la carpeta de *build* del Ranger, descomprima Ranger KMS y copie todos los archivos a la carpeta creada anteriormente:

   ```sh
   cd ./apache-ranger-2.3.0/target/
   tar -xvf ranger-2.3.0-kms.tar.gz
   cd ranger-2.3.0-kms
   cp -R * /usr/gdp/hadoop/ranger/2.3.0/ranger-kms/
   ```
4. Cree la carpeta de *registros* para Ranger KMS:

   ```sh
   mkdir -p /var/log/hadoop/ranger/ranger-kms/
   ```
5. Usando un generador de contraseñas, cree una contraseña con los siguientes parámetros y guárdela en un lugar seguro (se usará en el paso siguiente):
   * 16 caracteres
   * Letras mayúsculas
   * Letras minúsculas
   * Caracteres especiales.\ <br>
6. En la carpeta de Ranger KMS, edite el archivo `install.properties` añadiendo configuración para Java Key Store (almacena la master key en un archivo en el propio servidor):

   > Use la contraseña de 16 caracteres generada en el paso anterior como `KMS_MASTER_KEY_PASSWD`. Por ejemplo: `$ZH1$Q8&ExUaTku8`.

   ```sh
   cd /usr/gdp/hadoop/ranger/2.3.0/ranger-kms/
   vim install.properties
   ```

   ```properties
   ...
   db_root_user=rangerkms
   db_root_password=rangerkms
   db_host=localhost

   db_name=rangerkms
   db_user=rangerkms
   db_password=rangerkms

   COMPONENT_INSTALL_DIR_NAME=/usr/gdp/hadoop/ranger/2.3.0/ranger-kms

   KMS_MASTER_KEY_PASSWD=<contraseña de 16 caracteres generada anteriormente>

   hadoop_conf=/etc/hadoop/hdfs/conf

   POLICY_MGR_URL=http://localhost:6080

   REPOSITORY_NAME=kmsdev

   XAAUDIT.SOLR.ENABLE=true
   XAAUDIT.SOLR.URL=http://localhost:6083/solr/ranger_audits
   XAAUDIT.SOLR.USER=NONE
   XAAUDIT.SOLR.PASSWORD=NONE
   XAAUDIT.SOLR.ZOOKEEPER=NONE
   XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/hadoop/ranger/ranger-kms/audit/solr/spool

   XAAUDIT.SOLR.IS_ENABLED=true
   XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
   XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
   XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits

   RANGER_KMS_LOG_DIR=/var/log/hadoop/ranger/ranger-kms
   ...
   ```

### Configuración del Ranger KMS con Luna Cloud HSM

1. Antes de efectuar el *setup* del Ranger KMS, es necesario añadir el *LunaProvider* en el archivo `java.security`. Para ello, edite el archivo `java.security`, que se encuentra en la carpeta `<JDK_installation_directory>/jre/lib/security`, añadiendo dos líneas al final: una con el *LunaProvider* en la secuencia de la lista de proveedores, `security.provider.10=com.safenetinc.luna.provider.LunaProvider`, y una con la configuración para que Luna funcione, `com.safenetinc.luna.provider.createExtractableKeys=true`:

   ```sh
   vim /usr/lib/java/jre/lib/security/java.security
   ```

   ```properties
   #
   # List of providers and their preference orders (see above):
   #
   security.provider.1=sun.security.provider.Sun
   security.provider.2=sun.security.rsa.SunRsaSign
   security.provider.3=sun.security.ec.SunEC
   security.provider.4=com.sun.net.ssl.internal.ssl.Provider
   security.provider.5=com.sun.crypto.provider.SunJCE
   security.provider.6=sun.security.jgss.SunProvider
   security.provider.7=com.sun.security.sasl.Provider
   security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
   security.provider.9=sun.security.smartcardio.SunPCSC
   security.provider.10=com.safenetinc.luna.provider.LunaProvider

   com.safenetinc.luna.provider.createExtractableKeys=true
   ```
2. Copie los archivos `LunaProvider.jar` y `libLunaAPI.so` a la carpeta `<JDK_installation_directory/jre/lib/ext`.

   ```sh
   cp /usr/safenet/lunaclient/jsp/LunaProvider.jar /usr/lib/java/jre/lib/ext/
   cp /usr/safenet/lunaclient/jsp/64/libLunaAPI.so /usr/lib/java/jre/lib/ext/
   ```
3. Usando un generador de contraseñas, cree una contraseña con los siguientes parámetros y guárdela en un lugar seguro (se usará en el paso siguiente):
   * 16 caracteres
   * Letras mayúsculas
   * Letras minúsculas
   * Caracteres especiales.\ <br>
4. Edite el archivo `install.properties` para el *setup* del Ranger KMS con el Luna Cloud HSM:

   > Use la contraseña de 16 caracteres generada en el paso anterior como `KMS_MASTER_KEY_PASSWD`. Por ejemplo: `$ZH1$Q8&ExUaTku8`.

   ```sh
   cd /usr/gdp/hadoop/ranger/2.3.0/ranger-kms/
   vim install.properties
   ```

   ```properties
   ...
   db_root_user=rangerkms
   db_root_password=rangerkms
   db_host=localhost

   db_name=rangerkms
   db_user=rangerkms
   db_password=rangerkms

   COMPONENT_INSTALL_DIR_NAME=/usr/gdp/hadoop/ranger/2.3.0/ranger-kms

   KMS_MASTER_KEY_PASSWD=<contraseña de 16 caracteres generada anteriormente>

   hadoop_conf=/etc/hadoop/hdfs/conf

   #------------------------- Ranger KMS HSM CONFIG ------------------------------
   HSM_TYPE=LunaProvider
   HSM_ENABLED=true
   HSM_PARTITION_NAME=rangerkms
   HSM_PARTITION_PASSWORD=Griaule.123

   POLICY_MGR_URL=http://localhost:6080

   REPOSITORY_NAME=kmsdev

   XAAUDIT.SOLR.ENABLE=true
   XAAUDIT.SOLR.URL=http://localhost:6083/solr/ranger_audits
   XAAUDIT.SOLR.USER=NONE
   XAAUDIT.SOLR.PASSWORD=NONE
   XAAUDIT.SOLR.ZOOKEEPER=NONE
   XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/hadoop/ranger/ranger-kms/audit/solr/spool

   XAAUDIT.SOLR.IS_ENABLED=true
   XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
   XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
   XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits

   RANGER_KMS_LOG_DIR=/var/log/hadoop/ranger/ranger-kms
   ...
   ```
5. En todos el *nodos*, para que los *datanodes* accedan al KMS, edite el archivo `core-site.xml` modificando el *value* de la propiedad `hadoop.security.key.provider.path` a `kms://http@localhost:9292/kms`:

   ```sh
   vim /etc/hadoop/hdfs/conf/core-site.xml
   ```

   ```xml
   <property>
     <name>hadoop.security.key.provider.path</name>
     <value>kms://http@localhost:9292/kms</value>
   </property>
   ```
6. Reinicie el HDFS.

   ```sh
   dfsstop
   dfsstart
   ```
7. Conceda al usuario `kms` los permisos para las carpetas:

   ```sh
   chown -R kms: /var/log/hadoop/ranger/ranger-kms/
   chown -R kms: /usr/gdp/hadoop/ranger/2.3.0/ranger-kms/
   ```
8. Ejecute el *script* de *setup*, espere a la finalización de la instalación con el mensaje **successfully** e inicie el Ranger KMS:

   ```sh
   ./setup.sh

   # Iniciar:
   ranger-kms start

   # Finalizar:
   ranger-kms stop
   ```
9. Si todo ocurrió con éxito, será posible acceder al panel del Ranger KMS mediante la dirección del Ranger Admin utilizando el usuario `keyadmin` y la contraseña definida en el [procedimiento de instalación del Ranger Admin](#instalacaorangeradmin).
   * *Link*: `http://<my_ip>:6080/`
   * *User*: `keyadmin`
   * *Password*: `<definida no install.properties durante o setup do Ranger Admin>`\ <br>
10. Ingrese en el Ranger Admin UI con el usuario `admin`, acceda a Settings > Users/Groups/Roles. En la pestaña Users, haga clic en el botón Add New User y cree los usuarios:
    * `hive`
    * `hdfs`
    * `om`
    * `hbase`\ <br>
11. A continuación, cierre sesión e inicie como `keyadmin` para acceder al panel del Ranger KMS UI en el Service KMS. Haga clic en el botón + para crear el repositorio `kmsdev`, según las especificaciones abajo:
    * *Service Name*: `kmsdev`
    * *KMS URL*: `kms://http@:9292/kms`
    * *Username*: `keyadmin`
    * *Password*: `<contraseña definida en el procedimiento de instalación de Ranger Admin>`\ <br>
12. En la misma pantalla, en Audit Filter, haga clic en el botón + para añadir una ACL con las siguientes especificaciones:
    * *Access Result*: `ALLOWED`
    * *Permissions*: `Select All`
    * *Users*: `keyadmin`\ <br>
13. Haga clic en Add. Luego, haga clic para editar el repositorio `kmsdev` y haga clic en el botón Test Connection, para confirmar si todo el procedimiento se realizó correctamente.\ <br>
14. Reinicie el Ranger KMS:

    ```sh
    ranger-kms stop
    ranger-kms start
    ```
15. En caso de estar utilizando el Luna Cloud HSM, verifique si se creó la *master key*. Para ello, ejecute el `lunacm`:

    ```sh
    lunacm
    ```

    O:

    ```sh
    cd /usr/safenet/lunaclient/
    ./bin/64/lunacm
    ```
16. Inicie sesión con el role *crypto officer*:

    ```sh
    role login -name crypto officer
    ```
17. Liste el contenido de la partición para verificar si la *master key* fue creada con éxito:

    ```sh
    partition contents
    ```

    Ejemplo de salida con la *master key* creada:

    ```
    lunacm:>partition contents

            The 'Crypto Officer' is currently logged in. Looking for objects
            accessible to the 'Crypto Officer'.

            Object list:

            Label:         RangerKMSKey
            Handle:        1
            Object Type:   Symmetric Key
            Usage Limit:   none
            Object UID:    9f1d00002d000001706c0800

            Number of objects:  1

    Command Result : No Error
    ```

{% hint style="success" %}
El archivo de configuración del Ranger KMS, `dbks-site.xml`, se encuentra en:

```sh
/usr/gdp/hadoop/ranger/2.3.0/ranger-kms/ews/webapp/WEB-INF/classes/conf/dbks-site.xml
```

{% endhint %}

## Activar Load Balancer en Ranger KMS

1. En un segundo servidor, realice todo el procedimiento de [instalación del Ranger KMS](#instalacaorangerkms).

{% hint style="warning" %}
En caso de estar utilizando Luna Cloud HSM, siga las instrucciones del [guía de instalación del Luna Cloud HSM](https://docs.griaule.com/gbs/es/lunacloudhsm#lunacloudhsm-installguide-pt) contenidas en los tópicos [1.1. Download do client](https://docs.griaule.com/gbs/es/lunacloudhsm#lunacloudhsm-downloaddoclient) y [1.2. Instalação do client no servidor](https://docs.griaule.com/gbs/es/lunacloudhsm#lunacloudhsm-instalacaodoclientnoservidor) para realizar la instalación del client. No es necesario realizar los procedimientos de activar slot, iniciar partición o iniciar los roles, contenidos en los tópicos posteriores de la guía. A continuación, siga rigurosamente las instrucciones de [instalación](#instalacaorangerkms) y [configuración](#configuracaorangerkms) del HSM con Ranger, pero tomando las precauciones descritas abajo.
{% endhint %}

2. En el **paso 5** de la [configuración](#configuracaorangerkms), en la que es preciso modificar el archivo `core-site.xml` para que los *datanodes* accedan al KMS, proceda de la siguiente forma: abra el archivo, encuentre la propiedad `hadoop.security.key.provider.path` y cambie su *value* de `kms://http@localhost:9292/kms` a `kms://http@host1;host2:9292/kms`:\ <br>

   ```sh
   vim /etc/hadoop/hdfs/conf/core-site.xml
   ```

   Antes:

   ```xml
   <property>
     <name>hadoop.security.key.provider.path</name>
     <value>kms://http@localhost:9292/kms</value>
   </property>
   ```

   Después:

   ```xml
   <property>
     <name>hadoop.security.key.provider.path</name>
     <value>kms://http@host1;host2:9292/kms</value>
   </property>
   ```
3. Reinicie el HDFS:

   ```sh
   dfsstop
   dfsstart
   ```
4. Continúe con la finalización del procedimiento de [configuración del Ranger KMS](#configuracaorangerkms), a partir del paso 6.

## Desinstalación del Ranger

Para desinstalar el Ranger, ejecute los siguientes comandos:

```bash
rm -rf /var/log/ranger /var/log/hadoop/ranger /usr/gdp/hadoop/solr/ /usr/gdp/hadoop/ranger/ /etc/ranger/ /var/log/hadoop/solr/ /var/lib/mysql/ranger/

rm -f /usr/gdp/hadoop/*/*/.ranger*
rm -f /usr/gdp/hadoop/*/*/*/.ranger*
rm -f /usr/gdp/hadoop/*/*/*/*/.ranger*

rm -f /usr/gdp/hadoop/hdfs/3.2.4/etc/hadoop/ranger*
rm -f /usr/gdp/hadoop/hdfs/3.2.4/share/hadoop/hdfs/lib/ranger*

rm -f /usr/bin/ranger*
rm -f /etc/rc.d/init.d/ranger*
rm -f /etc/rc.d/rc2.d/*ranger*
rm -f /etc/rc.d/rc3.d/*ranger*
```

```sql
mysql -uroot -p
show schemas;
drop database ranger;
drop database rangerkms;
```
