CDH 6.3.2 集成 Apache Ranger 2.1.0

CDH 6.3.2 集成 Apache Ranger 2.1.0

  • 文档路径
  • 介质下载路径
  • 环境信息
  • 部署 Ranger 2.1.0
    • 1. 存放 Ranger 和 Maven 介质
    • 2. 安装 Maven 3.6.2 并安装编译过程中所需的依赖服务
    • 3. 安装数据库
    • 4. 创建 Ranger 元数据库
    • 5. 编译 Ranger 2.1.0
    • 6. 安装自带 Solr 服务
    • 7. 验证 Solr 状态
    • 8. 安装 Ranger Admin
    • 9. 验证 Ranger Admin 状态
    • 10. 安装 Ranger Usersync
    • 11. 验证 UserSync 状态
  • 部署 HDFS Plugin
    • 1. 安装 Ranger 2.1.0 HDFS Plugin
    • 2. 重启 HDFS 服务
    • 3. 检查 HDFS 服务状态
    • 4. HDFS Plugin 关联 Ranger Admin
  • 部署 YARN Plugin
    • 1. 安装 Ranger 2.1.0 YARN Plugin
    • 2. 重启 YARN 服务
    • 3. 检查 YARN 服务状态
      • 4. YARN Plugin 关联 Ranger Admin
  • 部署 Hive Plugin
    • 1. 安装 Ranger 2.1.0 Hive Plugin
    • 2. 重启 Hive 服务
    • 3. 检查 Hive 服务状态
    • 4. Hive Plugin 关联 Ranger Admin
  • 部署 Kafka Plugin
    • 1. 安装 Ranger 2.1.0 Kafka Plugin
    • 2. 重启 Kafka 服务
    • 3. 检查 Kafka 服务状态
    • 4. Kafka Plugin 关联 Ranger Admin
  • 部署 HBase Plugin
    • 1. 安装 Ranger 2.1.0 HBase Plugin
    • 2. 重启 HBase 服务
    • 3. 检查 HBase 服务状态
    • 4. HBase Plugin 关联 Ranger Admin
  • 部署 Spark Plugin
    • 1. 安装 Ranger 2.1.0 Spark Plugin

文档路径

  • CDH 6.3.2 对应服务版本:https://docs.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_63_packaging.html#cdh_630_packaging

  • Ranger 官方部署文档:https://cwiki.apache.org/confluence/display/RANGER/Index

介质下载路径

  • Ranger 2.1.0 For CDH 6.3.1: https://github.com/gm19900510/ranger/tree/release-ranger-2.1.0-cdh-6.3.1-hylink
  • Maven 3.6.3: https://archive.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.3-bin.tar.gz

环境信息

  • Ranger Admin 节点
Hostname IP Address JDK Version Ranger Admin Version Ranger Admin Roles Ranger UserSync Version Ranger UserSync Roles
cdh6-01 10.10.10.137 1.8.0_333 2.1.0 YES 2.1.0 YES
  • MySQL 节点
Hostname IP Address MySQL Version Root Password
monitor 10.10.10.130 5.7.40 !Qaz2wsx
  • CDH 节点(只包含需要部署 Ranger 插件的节点)
Hostname IP Address JDK Version Hadoop Version HDFS Roles YARN Roles Hive Version Hive Roles
cdh6-01 10.10.10.137 1.8.0_333 3.0.0-cdh6.3.2 NameNode ResourceManager
cdh6-02 10.10.10.138 1.8.0_333 3.0.0-cdh6.3.2 NameNode ResourceManager
cdh6-03 10.10.10.139 1.8.0_333 2.1.1-cdh6.3.2 HiveServer2
Hostname IP Address JDK Version HBase Version HBase Roles Kafka Version Kafka Roles Spark Version Spark Roles
cdh6-01 10.10.10.137 1.8.0_333 Broker 2.4.0-cdh6.3.2 Gateway
cdh6-02 10.10.10.138 1.8.0_333 RegionServer Broker 2.4.0-cdh6.3.2 Gateway
cdh6-03 10.10.10.139 1.8.0_333 2.1.0-cdh6.3.2 Master/RegionServer 2.2.1-cdh6.3.2 Broker 2.4.0-cdh6.3.2 Gateway
  • CDH 6.3.2 服务路径(只包含需要部署 Ranger 插件的角色
Hostname IP Address Hadoop Config Path Hadoop Libs Path Hive Config Path Hive Lib Path HBase Config Path HBase Lib Path Kafka Config Path Kafka Lib Path Spark Config Path Spark Lib Path
cdh6-01 10.10.10.137 /opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop /opt/cloudera/parcels/CDH/lib/hadoop/lib/ /opt/cloudera/parcels/CDH/lib/kafka/config/ /opt/cloudera/parcels/CDH/lib/kafka/libs/ /opt/cloudera/parcels/CDH/lib/spark/config/ /opt/cloudera/parcels/CDH/lib/spark/libs/
cdh6-02 10.10.10.138 /opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop /opt/cloudera/parcels/CDH/lib/hadoop/lib/ /opt/cloudera/parcels/CDH/lib/hbase/conf/ /opt/cloudera/parcels/CDH/lib/hbase/lib/ /opt/cloudera/parcels/CDH/lib/kafka/config/ /opt/cloudera/parcels/CDH/lib/kafka/libs/ /opt/cloudera/parcels/CDH/lib/spark/config/ /opt/cloudera/parcels/CDH/lib/spark/libs/
cdh6-03 10.10.10.139 /opt/cloudera/parcels/CDH/lib/hive/conf/ /opt/cloudera/parcels/CDH/lib/hive/lib/ /opt/cloudera/parcels/CDH/lib/hbase/conf/ /opt/cloudera/parcels/CDH/lib/hbase/lib/ /opt/cloudera/parcels/CDH/lib/kafka/config/ /opt/cloudera/parcels/CDH/lib/kafka/libs/ /opt/cloudera/parcels/CDH/lib/spark/config/ /opt/cloudera/parcels/CDH/lib/spark/libs/

部署 Ranger 2.1.0

1. 存放 Ranger 和 Maven 介质

  • 由于 Ranger 服务需要通过 Maven 进行编译后才能使用,所以需要确保在安装 Ranger 服务前已部署 Maven。若节点上已部署 Maven,可不下载 Maven 相关介质

  • 在 cdh6-01 - 10.10.10.137 节点上,进行如下操作:

# 创建服务路径
mkdir -p /data/ranger
mkdir -p /data/maven/

# 下载 Ranger 2.1.0 For CDH 6.3.1 编译包
# 由于在 linux 系统上,通过 wget 等方式下载后,还需要使用 git 命令再次编译,所以此处直接在 windows 系统下载后,上传至 /data/ranger 目录下
# 下载 Maven 3.6.3 介质
wget https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz --no-check-certificate -P /data/ranger

# 查看介质存放是否符合要求
tree -L 1 /data/ranger
/data/ranger
├── ranger-release-ranger-2.1.0-cdh-6.3.1-hylink.zip
└── apache-maven-3.6.3-bin.tar.gz

2. 安装 Maven 3.6.2 并安装编译过程中所需的依赖服务

  • 若节点上已部署 Maven,可跳过此步骤

  • 在 cdh6-01 - 10.10.10.137 节点上,进行如下操作

# 解压 Mave 3.6.2 源码包
tar -zxf /data/ranger/apache-maven-3.6.2-bin.tar.gz -C /data/maven/

# 添加环境变量
cp /etc/profile /etc/profile.0904
cat >> /etc/profile << EOF
# MAVEN 3.6.3 2023-09-04
export MAVEN_HOME=/data/maven/apache-maven-3.6.3/
export CLASSPATH=.:$:CLASSPATH:$MAVEN_HOME/lib/
export PATH=$PATH:$MAVEN_HOME/bin
EOF

# 刷新配置文件
source /etc/profile

# 查看 Maven 版本
mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /data/maven/apache-maven-3.6.3
Java version: 1.8.0_333, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_333/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.el7.x86_64", arch: "amd64", family: "unix"

# 安装其它依赖服务
yum install gcc git python3 bzip2 fontconfig-devel npm -y
pip3 install requests

3. 安装数据库

  • 需要提前创建 Ranger 元数据库,用于存放 Ranger 服务的元数据信息

  • Ranger 对于用户的密码安全性要求相对较高,在设置用户密码时,需要使用强度较高的密码。此处所使用的密码为 !Qaz2wsx

  • 官方说明中,MySQL 和 PostgreSQL 都可以使用。此文档所使用的数据库为 MySQL

4. 创建 Ranger 元数据库

  • 在 monitor - 10.10.10.130 节点上,进行如下操作:
# 登录数据库
mysql -h10.10.10.130 -P3306 -uroot -p'!Qaz2wsx'

# 创建 Ranger 元数据库 ranger
# - CREATE DATABASE ranger: 创建数据库,名称为 ranger
# - DEFAULT CHARACTER SET utf8: 数据库的默认字符集为 uft8
# - DEFAULT COLLATE utf8_general_ci: 数据库的默认排序规则为 uft8 的大小写不敏感的通用规则。general 表示通用,ci 表示大小写不敏感
CREATE DATABASE ranger DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

# 验证数据库创建是否成功
show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| ranger             |
| sys                |
+--------------------+

5. 编译 Ranger 2.1.0

  • 由于 Ranger 2.1.0 默认支持的大数据服务版本,相较于 CDH 6.3.2 所提供的服务版本而言过高,所以无法直接兼容 CDH 6.3.2,需要额外调整配置文件和源码

  • 由于 CDH 在重启服务时,会在 /var/run/cloudera-scm-agent/process/ 目录下,以进程号为目录名称重新创建一个全新的服务目录,所以直接使用 Apache Ranger 会在重启服务后,出现无法获取 jar 包或配置文件的异常。需要额外添加 jar 包和配置文件获取逻辑

  • 此处所使用的是已完成源码调整的编译包,可直接进行编译操作

  • 若使用已编译完成的安装包,则可跳过此步骤

  • 在 cdh6-01 - 10.10.10.137 节点上,进行如下操作

# 解压二进制包
unzip /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.1-hylink.zip -d /data/ranger

# 调整目录名称
mv /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.1-hylink /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2

# 备份原配置文件
cp /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2/pom.xml /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2/pom.xml.0905

# 调整编码包中的对应服务版本。调整配置中如下部分参数
vim /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2/pom.xml
<hadoop.version>3.0.0-cdh6.3.2</hadoop.version>
<hbase.version>2.1.0-cdh6.3.2</hbase.version>
<hive.version>2.1.1-cdh6.3.2</hive.version>
<kafka.version>2.2.1-cdh6.3.2</kafka.version>
<solr.version>7.4.0-cdh6.3.2</solr.version>
<zookeeper.version>3.4.5-cdh6.3.2</zookeeper.version>
<lucene.version>7.4.0-cdh6.3.2</lucene.version>

# 编码 Ranger 2.1.0
# - 若出现 lifecycle 相关报错,可通过尝试重新编译进行修复
cd /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2/ && mvn clean package install -Dmaven.test.skip=true -X

6. 安装自带 Solr 服务

  • Ranger 支持基于 Solr 或 Elasticsearch 存储的审计功能

  • 此处所使用的是 Ranger 自带的 Solr StandAlone

  • 需要注意的是,自带的 Solr StandAlone 会将数据直接保存在本地,不建议在生产环境中使用此方式。生产环境建议关联额外的 Solr 或 Elasticsearch 服务

  • 在 cdh6-01 - 10.10.10.137 节点上,进行如下操作

# 解压 Ranger Admin 2.1.0 源码包
tar -xf /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2/target/ranger-2.1.0-admin.tar.gz -C /data/ranger

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-admin/contrib/solr_for_audit_setup/install.properties data/ranger/ranger-2.1.0-admin/contrib/solr_for_audit_setup/install.properties.orig

# 调整配置文件 /data/ranger/ranger-2.1.0-admin/contrib/solr_for_audit_setup/install.properties
cat > /data/ranger/ranger-2.1.0-admin/contrib/solr_for_audit_setup/install.properties << EOF
JAVA_HOME=/usr/java/jdk1.8.0_333
SOLR_USER=root
SOLR_GROUP=root
MAX_AUDIT_RETENTION_DAYS=90
SOLR_INSTALL=true
SOLR_DOWNLOAD_URL=http://archive.apache.org/dist/lucene/solr/8.3.0/solr-8.3.0.tgz
SOLR_INSTALL_FOLDER=/data/solr
SOLR_RANGER_HOME=/data/solr/ranger_audit_server
SOLR_RANGER_PORT=6083
SOLR_DEPLOYMENT=standalone
SOLR_RANGER_DATA_FOLDER=/data/solr/ranger_audit_server/data
SOLR_ZK=
SOLR_HOST_URL=http://`hostname -f`:${SOLR_RANGER_PORT}
SOLR_SHARDS=1
SOLR_REPLICATION=1
SOLR_LOG_FOLDER=/var/log/solr/ranger_audits
SOLR_RANGER_COLLECTION=ranger_audits
SOLR_MAX_MEM=2g
EOF

# 安装 Solr 服务
sh /data/ranger/ranger-2.1.0-admin/contrib/solr_for_audit_setup/setup.sh

# 启动 Solr 服务
# - 由于默认情况下不建议使用 root 用户启动 solr,所以若需通过 root 用户启动,需添加参数 -force
sh /data/solr/ranger_audit_server/scripts/start_solr.sh -force

7. 验证 Solr 状态

  • Solr Web UI: http://10.10.10.137:6083

  • 查看是否已存在核心:ranger_audits

8. 安装 Ranger Admin

  • 在 cdh6-01 - 10.10.10.137 节点上,进行如下操作
# 备份原配置文件
cp /data/ranger/ranger-2.1.0-admin/install.properties /data/ranger/ranger-2.1.0-admin/install.properties.orig

# 调整配置文件 /data/ranger/ranger-2.1.0-admin/install.properties
cat > /data/ranger/ranger-2.1.0-admin/install.properties << EOF
PYTHON_COMMAND_INVOKER=python
DB_FLAVOR=MYSQL
SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
db_root_user=root
db_root_password=!Qaz2wsx
db_host=10.10.10.130
db_ssl_enabled=false
db_ssl_required=false
db_ssl_verifyServerCertificate=false
db_ssl_auth_type=2-way
javax_net_ssl_keyStore=
javax_net_ssl_keyStorePassword=
javax_net_ssl_trustStore=
javax_net_ssl_trustStorePassword=
db_name=ranger
db_user=root
db_password=!Qaz2wsx
rangerAdmin_password=root@123
rangerTagsync_password=root@123
rangerUsersync_password=root@123
keyadmin_password=root@123
audit_store=solr
audit_elasticsearch_urls=
audit_elasticsearch_port=
audit_elasticsearch_protocol=
audit_elasticsearch_user=
audit_elasticsearch_password=
audit_elasticsearch_index=
audit_elasticsearch_bootstrap_enabled=true
audit_solr_urls=http://10.10.10.137:6083/solr/ranger_audits
audit_solr_user=solr
audit_solr_password=
audit_solr_zookeepers=
audit_solr_collection_name=ranger_audits
audit_solr_config_name=ranger_audits
audit_solr_no_shards=1
audit_solr_no_replica=1
audit_solr_max_shards_per_node=1
audit_solr_acl_user_list_sasl=solr,infra-solr
audit_solr_bootstrap_enabled=true
policymgr_external_url=http://localhost:6080
policymgr_http_enabled=true
policymgr_https_keystore_file=
policymgr_https_keystore_keyalias=rangeradmin
policymgr_https_keystore_password=
policymgr_supportedcomponents=
unix_user=ranger
unix_user_pwd=ranger
unix_group=ranger
authentication_method=NONE
remoteLoginEnabled=true
authServiceHostName=localhost
authServicePort=5151
ranger_unixauth_keystore=keystore.jks
ranger_unixauth_keystore_password=password
ranger_unixauth_truststore=cacerts
ranger_unixauth_truststore_password=changeit
xa_ldap_url=
xa_ldap_userDNpattern=
xa_ldap_groupSearchBase=
xa_ldap_groupSearchFilter=
xa_ldap_groupRoleAttribute=
xa_ldap_base_dn=
xa_ldap_bind_dn=
xa_ldap_bind_password=
xa_ldap_referral=
xa_ldap_userSearchFilter=
xa_ldap_ad_domain=
xa_ldap_ad_url=
xa_ldap_ad_base_dn=
xa_ldap_ad_bind_dn=
xa_ldap_ad_bind_password=
xa_ldap_ad_referral=
xa_ldap_ad_userSearchFilter=
spnego_principal=
spnego_keytab=
token_valid=30
cookie_domain=
cookie_path=/
admin_principal=
admin_keytab=
lookup_principal=
lookup_keytab=
hadoop_conf=/etc/hadoop/conf
sso_enabled=false
sso_providerurl=https://127.0.0.1:8443/gateway/knoxsso/api/v1/websso
sso_publickey=
RANGER_ADMIN_LOG_DIR=$PWD
RANGER_PID_DIR_PATH=/var/run/ranger
XAPOLICYMGR_DIR=$PWD
app_home=$PWD/ews/webapp
TMPFILE=$PWD/.fi_tmp
LOGFILE=$PWD/logfile
LOGFILES="$LOGFILE"
JAVA_BIN='java'
JAVA_VERSION_REQUIRED='1.8'
JAVA_ORACLE='Java(TM) SE Runtime Environment'
ranger_admin_max_heap_size=1g
PATCH_RETRY_INTERVAL=120
STALE_PATCH_ENTRY_HOLD_TIME=10
mysql_core_file=db/mysql/optimized/current/ranger_core_db_mysql.sql
mysql_audit_file=db/mysql/xa_audit_db.sql
oracle_core_file=db/oracle/optimized/current/ranger_core_db_oracle.sql
oracle_audit_file=db/oracle/xa_audit_db_oracle.sql
postgres_core_file=db/postgres/optimized/current/ranger_core_db_postgres.sql
postgres_audit_file=db/postgres/xa_audit_db_postgres.sql
sqlserver_core_file=db/sqlserver/optimized/current/ranger_core_db_sqlserver.sql
sqlserver_audit_file=db/sqlserver/xa_audit_db_sqlserver.sql
sqlanywhere_core_file=db/sqlanywhere/optimized/current/ranger_core_db_sqlanywhere.sql
sqlanywhere_audit_file=db/sqlanywhere/xa_audit_db_sqlanywhere.sql
cred_keystore_filename=$app_home/WEB-INF/classes/conf/.jceks/rangeradmin.jceks
EOF

# 安装 Ranger Admin 服务
sh /data/ranger/ranger-2.1.0-admin/setup.sh

# 删除非兼容 jar 包
rm -rf /data/ranger/ranger-2.1.0-admin/ews/webapp/WEB-INF/lib/javax.ws.rs-api-2.1.jar /data/ranger/ranger-2.1.0-admin/ews/webapp/WEB-INF/lib/jersey-client-2.6.jar /data/ranger/ranger-2.1.0-admin/ews/webapp/WEB-INF/lib/jersey-server-2.27.jar

# 启动 Ranger Admin 服务
sh /data/ranger/ranger-2.1.0-admin/ews/ranger-admin-services.sh start

9. 验证 Ranger Admin 状态

  • Ranger Admin Web UI: http://10.10.10.137:6080

  • User/Password: admin/ranger123

10. 安装 Ranger Usersync

  • Ranger Usersync 的同步策略为:

    • 非实时同步,可通过配置文件设置同步周期,默认为 1 小时;

    • 会将本地用户和组同步至 Ranger 内,再基于此用户或组进行权限管理;

    • 不支持删除同步。即本地删除用户,Ranger 不会同步删除;Ranger 删除用户,本地不会同步删除。

  • 在 cdh6-01 10.10.10.137 节点上,进行如下操作

# 解压 Ranger Usersync 2.1.0 源码包
tar -zxf /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2/target/ranger-2.1.0-usersync.tar.gz -C /data/ranger

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-usersync/install.properties /data/ranger/ranger-2.1.0-usersync/install.properties.orig

# 调整配置文件 /data/ranger/ranger-2.1.0-admin/install.properties
cat > /data/ranger/ranger-2.1.0-usersync/install.properties << EOF
ranger_base_dir = /etc/ranger
POLICY_MGR_URL =http://10.10.10.137:6080
SYNC_SOURCE = unix
MIN_UNIX_USER_ID_TO_SYNC = 500
MIN_UNIX_GROUP_ID_TO_SYNC = 500
SYNC_INTERVAL = 1
unix_user=ranger
unix_group=ranger
rangerUsersync_password=ranger123
usersync_principal=
usersync_keytab=
hadoop_conf=/etc/hadoop/conf
CRED_KEYSTORE_FILENAME=/etc/ranger/usersync/conf/rangerusersync.jceks
AUTH_SSL_ENABLED=false
AUTH_SSL_KEYSTORE_FILE=/etc/ranger/usersync/conf/cert/unixauthservice.jks
AUTH_SSL_KEYSTORE_PASSWORD=UnIx529p
AUTH_SSL_TRUSTSTORE_FILE=
AUTH_SSL_TRUSTSTORE_PASSWORD=
ROLE_ASSIGNMENT_LIST_DELIMITER = &
USERS_GROUPS_ASSIGNMENT_LIST_DELIMITER = :
USERNAME_GROUPNAME_ASSIGNMENT_LIST_DELIMITER = ,
GROUP_BASED_ROLE_ASSIGNMENT_RULES =
SYNC_LDAP_URL = 
SYNC_LDAP_BIND_DN = 
SYNC_LDAP_BIND_PASSWORD = 
SYNC_LDAP_DELTASYNC = 
SYNC_LDAP_SEARCH_BASE = 
SYNC_LDAP_USER_SEARCH_BASE = 
SYNC_LDAP_USER_SEARCH_SCOPE = sub
SYNC_LDAP_USER_OBJECT_CLASS = person
SYNC_LDAP_USER_SEARCH_FILTER =
SYNC_LDAP_USER_NAME_ATTRIBUTE = cn
SYNC_LDAP_USER_GROUP_NAME_ATTRIBUTE = memberof,ismemberof
SYNC_LDAP_USERNAME_CASE_CONVERSION=lower
SYNC_LDAP_GROUPNAME_CASE_CONVERSION=lower
logdir=logs
USERSYNC_PID_DIR_PATH=/var/run/ranger
SYNC_GROUP_SEARCH_ENABLED=
SYNC_GROUP_USER_MAP_SYNC_ENABLED=
SYNC_GROUP_SEARCH_BASE=
SYNC_GROUP_SEARCH_SCOPE=
SYNC_GROUP_OBJECT_CLASS=
SYNC_LDAP_GROUP_SEARCH_FILTER=
SYNC_GROUP_NAME_ATTRIBUTE=
SYNC_GROUP_MEMBER_ATTRIBUTE_NAME=
SYNC_PAGED_RESULTS_ENABLED=
SYNC_PAGED_RESULTS_SIZE=
SYNC_LDAP_REFERRAL =ignore
JVM_METRICS_ENABLED=
JVM_METRICS_FILENAME=
JVM_METRICS_FILEPATH=
JVM_METRICS_FREQUENCY_TIME_IN_MILLIS=
EOF

# 安装 Ranger UserSync 服务
sh /data/ranger/ranger-2.1.0-usersync/setup.sh

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-usersync/conf/ranger-ugsync-site.xml /data/ranger/ranger-2.1.0-usersync/conf/ranger-ugsync-site.xml.orig

# 调整配置文件 ranger-ugsync-site.xml
# 将对应配置调整至如下内容
<property>
  <name>ranger.usersync.enabled</name>
  <value>true</value>
</property>

# 启动 Ranger UserSync 服务
sh /data/ranger/ranger-2.1.0-usersync/ranger-usersync-services.sh start

11. 验证 UserSync 状态

  • Ranger Admin Web UI: http://10.10.10.137:6080

  • User/Password: admin/ranger123

  • 查看用户信息,会发现大量本地用户被同步至 Ranger 中

部署 HDFS Plugin

1. 安装 Ranger 2.1.0 HDFS Plugin

  • HDFS 的 Ranger 插件需要安装在所有的 NameNode 节点上

  • 在 cdh6-01 - 10.10.10.137 和 cdh6-02 - 10.10.10.138 节点上,进行如下操作

# 解压 Ranger HDFS Plugin 2.1.0 源码包
tar -zxf /data/ranger/ranger-2.1.0-hdfs-plugin.tar.gz -C /data/ranger

# 将 HDFS 所需 jar 包存放至 Ranger HDFS Plugin 内
# 此步骤与上述调整代码的原因相同,为了在重启 HDFS 服务时不会出现无法获取配置文件或 jar 包的异常
# 创建 jar 包路径
mkdir -p /data/ranger/ranger-2.1.0-hdfs-plugin/hadoop/etc

# 存放 jar 包
ln -s /opt/cloudera/parcels/CDH/lib/hadoop/*.jar /data/ranger/ranger-2.1.0-hdfs-plugin/hadoop
ln -s /opt/cloudera/parcels/CDH/lib/hadoop/lib/*.jar /data/ranger/ranger-2.1.0-hdfs-plugin/hadoop
ln -s /opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop /data/ranger/ranger-2.1.0-hdfs-plugin/hadoop/etc/hadoop

# 将 Ranger HDFS Plugin 所需 jar 包存放至 HDFS 内
ln -s /data/ranger/ranger-2.1.0-hdfs-plugin/lib/*.jar /opt/cloudera/parcels/CDH/lib/hadoop/lib
ln -s /data/ranger/ranger-2.1.0-hdfs-plugin/lib/ranger-hdfs-plugin-impl /opt/cloudera/parcels/CDH/lib/hadoop/lib

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-hdfs-plugin/install.properties /data/ranger/ranger-2.1.0-hdfs-plugin/install.properties.orig

# 调整配置文件 install.properties
cat > install.properties <<EOF
POLICY_MGR_URL=http://10.10.10.137:6080
REPOSITORY_NAME=test-cdh6-hdfs
COMPONENT_INSTALL_DIR_NAME=/data/ranger/ranger-2.1.0-hdfs-plugin/hadoop
XAAUDIT.SOLR.ENABLE=true
XAAUDIT.SOLR.URL=http://10.10.10.137: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
XAAUDIT.ELASTICSEARCH.ENABLE=false
XAAUDIT.ELASTICSEARCH.URL=NONE
XAAUDIT.ELASTICSEARCH.USER=NONE
XAAUDIT.ELASTICSEARCH.PASSWORD=NONE
XAAUDIT.ELASTICSEARCH.INDEX=NONE
XAAUDIT.ELASTICSEARCH.PORT=NONE
XAAUDIT.ELASTICSEARCH.PROTOCOL=NONE
XAAUDIT.HDFS.ENABLE=false
XAAUDIT.HDFS.HDFS_DIR=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit
XAAUDIT.HDFS.FILE_SPOOL_DIR=/var/log/hadoop/hdfs/audit/hdfs/spool
XAAUDIT.HDFS.AZURE_ACCOUNTNAME=__REPLACE_AZURE_ACCOUNT_NAME
XAAUDIT.HDFS.AZURE_ACCOUNTKEY=__REPLACE_AZURE_ACCOUNT_KEY
XAAUDIT.HDFS.AZURE_SHELL_KEY_PROVIDER=__REPLACE_AZURE_SHELL_KEY_PROVIDER
XAAUDIT.HDFS.AZURE_ACCOUNTKEY_PROVIDER=__REPLACE_AZURE_ACCOUNT_KEY_PROVIDER
XAAUDIT.LOG4J.ENABLE=false
XAAUDIT.LOG4J.IS_ASYNC=false
XAAUDIT.LOG4J.ASYNC.MAX.QUEUE.SIZE=10240
XAAUDIT.LOG4J.ASYNC.MAX.FLUSH.INTERVAL.MS=30000
XAAUDIT.LOG4J.DESTINATION.LOG4J=true
XAAUDIT.LOG4J.DESTINATION.LOG4J.LOGGER=xaaudit
XAAUDIT.HDFS.IS_ENABLED=false
XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%
XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=__REPLACE__LOG_DIR/hadoop/%app-type%/audit
XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=__REPLACE__LOG_DIR/hadoop/%app-type%/audit/archive
XAAUDIT.HDFS.DESTINTATION_FILE=%hostname%-audit.log
XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS=900
XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS=86400
XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_FILE=%time:yyyyMMdd-HHmm.ss%.log
XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS=600
XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT=10
XAAUDIT.SOLR.IS_ENABLED=false
XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits
SSL_KEYSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-keystore.jks
SSL_KEYSTORE_PASSWORD=myKeyFilePassword
SSL_TRUSTSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-truststore.jks
SSL_TRUSTSTORE_PASSWORD=changeit
CUSTOM_USER=hdfs
CUSTOM_GROUP=hadoop
EOF

# 创建配置文件 xasecure-audit.xml
cat > /data/ranger/ranger-2.1.0-hdfs-plugin/hadoop/etc/hadoop/xasecure-audit.xml << EOF
<!-- MYSQL的连接地址及用户名端口号,配置同RANGER ADMIN中INSTALL.PROPERTIES的MYSQL配置相同-->
<property>
  <name>xasecure.audit.jpa.javax.persistence.jdbc.url</name>
  <value>jdbc:mysql://10.10.10.130:3306/ranger</value>
</property>
<property>
  <name>xasecure.audit.jpa.javax.persistence.jdbc.user</name>
  <value>ranger</value>
</property>
<property>
  <name>xasecure.audit.jpa.javax.persistence.jdbc.password</name>
  <value>Ranger2.1</value>
</property>
EOF

# 启动 Ranger HDFS Plugin 2.1.0
sh /data/ranger/ranger-2.1.0-hdfs-plugin/enable-hdfs-plugin.sh

# 调整 HDFS 配置文件
# CDH 环境内,如下参数已开放配置
<property>
    <name>dfs.permissions</name>
    <value>true</value>
</property>
<property>
    <name>dfs.namenode.alcs.enabled</name>
    <value>true</value>
</property>

# CDH 环境内,在 HDFS 服务的 hdfs-site.xml 的 HDFS 高级配置代码段添加如下配置
<property>
    <name>dfs.namenode.inode.attributes.provider.class</name>
    <value>org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer</value>
</property

2. 重启 HDFS 服务

3. 检查 HDFS 服务状态

  • 在 cdh6-01 - 10.10.10.137 和 cdh6-02 - 10.10.10.138 节点上,进行如下操作
# 若插件正常工作,则会在如下目录中生成临时文件
ll /etc/ranger/test-cdh6-hdfs/policycache/

4. HDFS Plugin 关联 Ranger Admin

  • Service Name: test-cdh6-hdfs

  • Username: ranger

  • Password: ranger@123

  • NameNode URL: hdfs://10.10.10.137:9870,hdfs://10.10.10.138:9870

部署 YARN Plugin

1. 安装 Ranger 2.1.0 YARN Plugin

  • YARN 的 Ranger 插件需要安装在所有的 ResourceManager 节点上

  • 在 cdh6-01 - 10.10.10.137 和 cdh6-02 - 10.10.10.138 节点上,进行如下操作

# 解压 Ranger YARN Plugin 2.1.0 源码包
tar -zxf /data/ranger/ranger-2.1.0-yarn-plugin.tar.gz -C /data/ranger

# 将 YARN 所需 jar 包存放至 Ranger YARN Plugin 内
# 此步骤与上述调整代码的原因相同,为了在重启 YARN 服务时不会出现无法获取配置文件或 jar 包的异常
# 创建 jar 包路径
mkdir -p /data/ranger/ranger-2.1.0-yarn-plugin/hadoop/etc

# 存放 jar 包
ln -s /opt/cloudera/parcels/CDH/lib/hadoop/*.jar /data/ranger/ranger-2.1.0-yarn-plugin/hadoop
ln -s /opt/cloudera/parcels/CDH/lib/hadoop/lib/*.jar /data/ranger/ranger-2.1.0-yarn-plugin/hadoop
ln -s /opt/cloudera/parcels/CDH/lib/hadoop/etc/hadoop /data/ranger/ranger-2.1.0-yarn-plugin/hadoop/etc/hadoop

# 将 Ranger YARN Plugin 所需 jar 包存放至 YARN 内
ln -s /data/ranger/ranger-2.1.0-yarn-plugin/lib/*.jar /opt/cloudera/parcels/CDH/lib/hadoop/lib
ln -s /data/ranger/ranger-2.1.0-yarn-plugin/lib/ranger-yarn-plugin-impl /opt/cloudera/parcels/CDH/lib/hadoop/lib

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-yarn-plugin/install.properties /data/ranger/ranger-2.1.0-yarn-plugin/install.properties.orig

# 调整配置文件 install.properties
cat > install.properties <<EOF
REPOSITORY_NAME=test-cdh6-yarn
COMPONENT_INSTALL_DIR_NAME=/data/ranger/ranger-2.1.0-yarn-plugin/hadoop
XAAUDIT.SOLR.ENABLE=true
XAAUDIT.SOLR.URL=http://10.10.10.137:6083/solr/ranger_audits
XAAUDIT.SOLR.USER=NONE
XAAUDIT.SOLR.PASSWORD=NONE
XAAUDIT.SOLR.ZOOKEEPER=NONE
XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/hadoop/yarn/audit/solr/spool
XAAUDIT.ELASTICSEARCH.ENABLE=false
XAAUDIT.ELASTICSEARCH.URL=NONE
XAAUDIT.ELASTICSEARCH.USER=NONE
XAAUDIT.ELASTICSEARCH.PASSWORD=NONE
XAAUDIT.ELASTICSEARCH.INDEX=NONE
XAAUDIT.ELASTICSEARCH.PORT=NONE
XAAUDIT.ELASTICSEARCH.PROTOCOL=NONE
XAAUDIT.HDFS.ENABLE=false
XAAUDIT.HDFS.HDFS_DIR=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit
XAAUDIT.HDFS.FILE_SPOOL_DIR=/var/log/hadoop/yarn/audit/hdfs/spool
XAAUDIT.HDFS.AZURE_ACCOUNTNAME=__REPLACE_AZURE_ACCOUNT_NAME
XAAUDIT.HDFS.AZURE_ACCOUNTKEY=__REPLACE_AZURE_ACCOUNT_KEY
XAAUDIT.HDFS.AZURE_SHELL_KEY_PROVIDER=__REPLACE_AZURE_SHELL_KEY_PROVIDER
XAAUDIT.HDFS.AZURE_ACCOUNTKEY_PROVIDER=__REPLACE_AZURE_ACCOUNT_KEY_PROVIDER
XAAUDIT.LOG4J.ENABLE=false
XAAUDIT.LOG4J.IS_ASYNC=false
XAAUDIT.LOG4J.ASYNC.MAX.QUEUE.SIZE=10240
XAAUDIT.LOG4J.ASYNC.MAX.FLUSH.INTERVAL.MS=30000
XAAUDIT.LOG4J.DESTINATION.LOG4J=true
XAAUDIT.LOG4J.DESTINATION.LOG4J.LOGGER=xaaudit
XAAUDIT.HDFS.IS_ENABLED=false
XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%
XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=__REPLACE__LOG_DIR/yarn/audit
XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=__REPLACE__LOG_DIR/yarn/audit/archive
XAAUDIT.HDFS.DESTINTATION_FILE=%hostname%-audit.log
XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS=900
XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS=86400
XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_FILE=%time:yyyyMMdd-HHmm.ss%.log
XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS=600
XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT=10
XAAUDIT.SOLR.IS_ENABLED=false
XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits
SSL_KEYSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-keystore.jks
SSL_KEYSTORE_PASSWORD=myKeyFilePassword
SSL_TRUSTSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-truststore.jks
SSL_TRUSTSTORE_PASSWORD=changeit
CUSTOM_USER=yarn
CUSTOM_GROUP=hadoop
EOF

# 创建配置文件 xasecure-audit.xml
cat > /data/ranger/ranger-2.1.0-yarn-plugin/hadoop/etc/hadoop/xasecure-audit.xml << EOF
<!-- MYSQL的连接地址及用户名端口号,配置同RANGER ADMIN中INSTALL.PROPERTIES的MYSQL配置相同-->
<property>
  <name>xasecure.audit.jpa.javax.persistence.jdbc.url</name>
  <value>jdbc:mysql://10.10.10.130:3306/ranger</value>
</property>
<property>
  <name>xasecure.audit.jpa.javax.persistence.jdbc.user</name>
  <value>ranger</value>
</property>
<property>
  <name>xasecure.audit.jpa.javax.persistence.jdbc.password</name>
  <value>Ranger2.1</value>
</property>
EOF

# 启动 Ranger YARN Plugin 2.1.0
sh /data/ranger/ranger-2.1.0-yarn-plugin/enable-yarn-plugin.sh

# 调整 YARN 配置文件
# CDH 环境内,在 YARN 服务的 yarn-site.xml 的 YARN 高级配置代码段添加如下配置
<property>
    <name>yarn.authorization-provider</name>
    <value>org.apache.ranger.authorization.yarn.authorizer.RangerYarnAuthorizer</value>
</property>

2. 重启 YARN 服务

3. 检查 YARN 服务状态

  • 在 cdh6-01 - 10.10.10.137 和 cdh6-02 - 10.10.10.138 节点上,进行如下操作
# 若插件正常工作,则会在如下目录中生成临时文件
ll /etc/ranger/test-cdh6-yarn/policycache/

4. YARN Plugin 关联 Ranger Admin

  • Service Name: test-cdh6-yarn

  • Username: ranger

  • Password: ranger@123

  • YARN REST URL: hdfs://10.10.10.137:8080,hdfs://10.10.10.138:8080

部署 Hive Plugin

1. 安装 Ranger 2.1.0 Hive Plugin

  • Ranger 对于 Hive 的权限管理特殊性为:

    • Ranger 只能管理基于 jdbc 连接的,无法管理其它的连接方式,例如:hive-cli

    • 若业务不需要 hive-cli 操作方式,建议将此方式禁用

  • Hive 的 Ranger 插件需要安装在所有的 HiveServer2 节点上

  • 在 cdh6-03 - 10.10.10.139 节点上,进行如下操作

# 解压 Ranger Hive Plugin 2.1.0 源码包
tar -zxf /data/ranger/ranger-2.1.0-hive-plugin.tar.gz -C /data/ranger

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-hive-plugin/install.properties /data/ranger/ranger-2.1.0-hive-plugin/install.properties.orig

# 调整配置文件 install.properties
cat > /data/ranger/ranger-2.1.0-hive-plugin/install.properties << EOF
POLICY_MGR_URL=http://10.10.10.137:6080
REPOSITORY_NAME=test-cdh6-hive
COMPONENT_INSTALL_DIR_NAME=/opt/cloudera/parcels/CDH/lib/hive
XAAUDIT.SOLR.ENABLE=true
XAAUDIT.SOLR.URL=http://10.10.10.137:6083/solr/ranger_audits
XAAUDIT.SOLR.USER=NONE
XAAUDIT.SOLR.PASSWORD=NONE
XAAUDIT.SOLR.ZOOKEEPER=NONE
XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/hive/audit/solr/spool
XAAUDIT.HDFS.ENABLE=false
XAAUDIT.HDFS.HDFS_DIR=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit
XAAUDIT.HDFS.FILE_SPOOL_DIR=/var/log/hive/audit/hdfs/spool
XAAUDIT.HDFS.AZURE_ACCOUNTNAME=__REPLACE_AZURE_ACCOUNT_NAME
XAAUDIT.HDFS.AZURE_ACCOUNTKEY=__REPLACE_AZURE_ACCOUNT_KEY
XAAUDIT.HDFS.AZURE_SHELL_KEY_PROVIDER=__REPLACE_AZURE_SHELL_KEY_PROVIDER
XAAUDIT.HDFS.AZURE_ACCOUNTKEY_PROVIDER=__REPLACE_AZURE_ACCOUNT_KEY_PROVIDER
XAAUDIT.HDFS.IS_ENABLED=false
XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%
XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=__REPLACE__LOG_DIR/hive/audit/%app-type%
XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=__REPLACE__LOG_DIR/hive/audit/archive/%app-type%
XAAUDIT.HDFS.DESTINTATION_FILE=%hostname%-audit.log
XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS=900
XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS=86400
XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_FILE=%time:yyyyMMdd-HHmm.ss%.log
XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS=600
XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT=10
XAAUDIT.SOLR.IS_ENABLED=false
XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits
SSL_KEYSTORE_FILE_PATH=/etc/hive/conf/ranger-plugin-keystore.jks
SSL_KEYSTORE_PASSWORD=myKeyFilePassword
SSL_TRUSTSTORE_FILE_PATH=/etc/hive/conf/ranger-plugin-truststore.jks
SSL_TRUSTSTORE_PASSWORD=changeit
UPDATE_XAPOLICIES_ON_GRANT_REVOKE=true
CUSTOM_USER=hive
CUSTOM_GROUP=hadoop
EOF

# 创建配置文件 xasecure-audit.xml
cat > /data/ranger/ranger-2.1.0-hive-plugin/install/conf.templates/enable/xasecure-audit.xml << EOF
<!-- MYSQL的连接地址及用户名端口号,配置同RANGER ADMIN中INSTALL.PROPERTIES的MYSQL配置相同-->
<property>
  <name>xasecure.audit.jpa.javax.persistence.jdbc.url</name>
  <value>jdbc:mysql://10.10.10.130:3306/ranger</value>
</property>
<property>
  <name>xasecure.audit.jpa.javax.persistence.jdbc.user</name>
  <value>ranger</value>
</property>
<property>
  <name>xasecure.audit.jpa.javax.persistence.jdbc.password</name>
  <value>Ranger2.1</value>
</property>
EOF

# 注释环境变量
# 若不进行如下配置,在通过 beeline 连接 Hive 时会出现异常
# 所有需要连接 Hive 节点都需进行如下操作
# 备份原配置文件
cp /opt/cloudera/parcels/CDH/lib/hive/conf/hive-env.sh cp /opt/cloudera/parcels/CDH/lib/hive/conf/hive-env.sh.orig

# 注释如下环境变量定义
# export HIVE_OPTS="${HIVE_OPTS} --hiveconf hive.query.redaction.rules=${HIVE_CONF_DIR}/redaction-rules.json --hiveconf hive.exec.query.redactor.hooks=org.cloudera.hadoop.hive.ql.hooks.QueryRedactor"
# 启动 Ranger Hive Plugin 2.1.0
sh /data/ranger/ranger-2.1.0-hive-plugin/enable-hive-plugin.sh

# 检查 Ranger Hive Plugin 2.1.0 启动状态
# 目录下会生成 ranger 相关配置文件
ll /opt/cloudera/parcels/CDH/lib/hive/conf/

# 目录下会生成 Ranger 相关 jar 包
ll /opt/cloudera/parcels/CDH/lib/hive/lib/ |grep ranger
lrwxrwxrwx 1 root root    64 Sep  6 10:47 ranger-hive-plugin-impl -> /data/ranger/ranger-2.1.0-hive-plugin/lib/ranger-hive-plugin-impl
lrwxrwxrwx 1 root root    74 Sep  6 10:47 ranger-hive-plugin-shim-2.1.0.jar -> /data/ranger/ranger-2.1.0-hive-plugin/lib/ranger-hive-plugin-shim-2.1.0.jar
lrwxrwxrwx 1 root root    76 Sep  6 10:47 ranger-plugin-classloader-2.1.0.jar -> /data/ranger/ranger-2.1.0-hive-plugin/lib/ranger-plugin-classloader-2.1.0.jar

# 调整 Hive 配置文件
# CDH 环境内,在 Hive 服务的 hive-site.xml 的 Hive 客户端高级配置代码段添加如下配置
<property>
    <name>hive.security.authenticator.manager</name>
    <value>
      org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator
    </value>
</property>
<property>
    <name>hive.security.authorization.manager</name>
    <value>
      org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory
    </value>
</property>
<property>
    <name>hive.security.authorization.enabled</name>
    <value>true</value>
</property>
<property>
    <name>hive.conf.restricted.list</name>
    <value>
        hive.security.authorization.enabled,hive.security.authorization.manager,hive.security.authenticator.manager
    </value>
</property>

2. 重启 Hive 服务

3. 检查 Hive 服务状态

  • 在 cdh6-03 - 10.10.10.139 节点上,进行如下操作
# 若插件正常工作,则会在如下目录中生成临时文件
ll /etc/ranger/test-cdh6-hive/policycache/

4. Hive Plugin 关联 Ranger Admin

  • Service Name: test-cdh6-hive

  • Username: ranger

  • Password: ranger@123

  • jdbc.driverClassName: org.apache.hive.jdbc.HiveDriver

  • jdbc.url: jdbc:hive2://10.10.10.139:10000

部署 Kafka Plugin

1. 安装 Ranger 2.1.0 Kafka Plugin

  • Kafka 的 Ranger 插件需要安装在所有的 Broker 节点上

  • 在所有节点上,进行如下操作

# 解压 Ranger Kafka Plugin 2.1.0 源码包
tar -zxf /data/ranger/ranger-2.1.0-kafka-plugin.tar.gz -C /data/ranger

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-kafka-plugin/install.properties /data/ranger/ranger-2.1.0-kafka-plugin/install.properties.orig

# 调整配置文件 install.properties
cat > /data/ranger/ranger-2.1.0-kafka-plugin/install.properties << EOF
COMPONENT_INSTALL_DIR_NAME=/opt/cloudera/parcels/CDH/lib/kafka
POLICY_MGR_URL=http://10.10.10.137:6080
REPOSITORY_NAME=test-cdh6-kafka
XAAUDIT.SUMMARY.ENABLE=true
XAAUDIT.SOLR.ENABLE=true
XAAUDIT.SOLR.URL=http://10.10.10.137:6083/solr/ranger_audits
XAAUDIT.SOLR.USER=NONE
XAAUDIT.SOLR.PASSWORD=NONE
XAAUDIT.SOLR.ZOOKEEPER=NONE
XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/kafka/audit/solr/spool
XAAUDIT.ELASTICSEARCH.ENABLE=false
XAAUDIT.ELASTICSEARCH.URL=NONE
XAAUDIT.ELASTICSEARCH.USER=NONE
XAAUDIT.ELASTICSEARCH.PASSWORD=NONE
XAAUDIT.ELASTICSEARCH.INDEX=NONE
XAAUDIT.ELASTICSEARCH.PORT=NONE
XAAUDIT.ELASTICSEARCH.PROTOCOL=NONE
XAAUDIT.HDFS.ENABLE=false
XAAUDIT.HDFS.HDFS_DIR=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit
XAAUDIT.HDFS.FILE_SPOOL_DIR=/var/log/kafka/audit/hdfs/spool
XAAUDIT.HDFS.AZURE_ACCOUNTNAME=__REPLACE_AZURE_ACCOUNT_NAME
XAAUDIT.HDFS.AZURE_ACCOUNTKEY=__REPLACE_AZURE_ACCOUNT_KEY
XAAUDIT.HDFS.AZURE_SHELL_KEY_PROVIDER=__REPLACE_AZURE_SHELL_KEY_PROVIDER
XAAUDIT.HDFS.AZURE_ACCOUNTKEY_PROVIDER=__REPLACE_AZURE_ACCOUNT_KEY_PROVIDER
XAAUDIT.LOG4J.ENABLE=false
XAAUDIT.LOG4J.IS_ASYNC=false
XAAUDIT.LOG4J.ASYNC.MAX.QUEUE.SIZE=10240
XAAUDIT.LOG4J.ASYNC.MAX.FLUSH.INTERVAL.MS=30000
XAAUDIT.LOG4J.DESTINATION.LOG4J=true
XAAUDIT.LOG4J.DESTINATION.LOG4J.LOGGER=xaaudit
XAAUDIT.HDFS.IS_ENABLED=false
XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%
XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=__REPLACE__LOG_DIR/kafka/audit
XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=__REPLACE__LOG_DIR/kafka/audit/archive
XAAUDIT.HDFS.DESTINTATION_FILE=%hostname%-audit.log
XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS=900
XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS=86400
XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_FILE=%time:yyyyMMdd-HHmm.ss%.log
XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS=600
XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT=10
XAAUDIT.SOLR.IS_ENABLED=false
XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits
SSL_KEYSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-keystore.jks
SSL_KEYSTORE_PASSWORD=myKeyFilePassword
SSL_TRUSTSTORE_FILE_PATH=/etc/hadoop/conf/ranger-plugin-truststore.jks
SSL_TRUSTSTORE_PASSWORD=changeit
CUSTOM_USER=kafka
CUSTOM_GROUP=hadoop
EOF

# 存放配置文件
ln -s /data/ranger/ranger-2.1.0-kafka-plugin/lib/ranger-kafka-plugin-impl/*.xml /opt/cloudera/parcels/CDH/lib/kafka/config/

# 启动 Ranger Kafka Plugin 2.1.0
sh /data/ranger/ranger-2.1.0-kafka-plugin/enable-kafka-plugin.sh

# 检查 Ranger Kafka Plugin 2.1.0 启动状态
# 目录下会生成 Ranger 相关 jar 包
ll /opt/cloudera/parcels/CDH/lib/kafka/libs/ |grep ranger
lrwxrwxrwx 1 root root      67 Sep 25 18:23 ranger-kafka-plugin-impl -> /data/ranger/ranger-2.1.0-kafka-plugin/lib/ranger-kafka-plugin-impl
lrwxrwxrwx 1 root root      77 Sep 25 18:23 ranger-kafka-plugin-shim-2.1.0.jar -> /data/ranger/ranger-2.1.0-kafka-plugin/lib/ranger-kafka-plugin-shim-2.1.0.jar
lrwxrwxrwx 1 root root      78 Sep 25 18:23 ranger-plugin-classloader-2.1.0.jar -> /data/ranger/ranger-2.1.0-kafka-plugin/lib/ranger-plugin-classloader-2.1.0.jar

# 调整 Kafka 配置文件
# CDH 环境内,在 Kafka 服务的 kafka.properties 的 Kafka Broker 高级配置代码段添加如下配置
authorizer.class.name=org.apache.ranger.authorization.kafka.authorizer.RangerKafkaAuthorizer

2. 重启 Kafka 服务

3. 检查 Kafka 服务状态

  • 在所有节点上,进行如下操作
# 若插件正常工作,则会在如下目录中生成临时文件
ll /etc/ranger/test-cdh6-kafka/policycache/

4. Kafka Plugin 关联 Ranger Admin

  • Service Name: test-cdh6-kafka

  • Username: ranger

  • Password: ranger@123

  • ZooKeeper Connect String: 10.10.10.139:218/kafka

部署 HBase Plugin

1. 安装 Ranger 2.1.0 HBase Plugin

  • HBase 的 Ranger 插件需要安装在所有的 RegionServer 节点上

  • 在 cdh6-02 - 10.10.10.138 和 cdh6-03 - 10.10.10.139 节点上,进行如下操作

# 解压 Ranger HBase Plugin 2.1.0 源码包
tar -zxf /data/ranger/ranger-2.1.0-hbase-plugin.tar.gz -C /data/ranger

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-hbase-plugin/install.properties /data/ranger/ranger-2.1.0-hbase-plugin/install.properties.orig

# 调整配置文件 install.properties
cat > /data/ranger/ranger-2.1.0-hbase-plugin/install.properties << EOF
POLICY_MGR_URL=http://10.10.10.137:6080
REPOSITORY_NAME=test-cdh6-hbase
COMPONENT_INSTALL_DIR_NAME=/opt/cloudera/parcels/CDH/lib/hbase
XAAUDIT.SUMMARY.ENABLE=true
XAAUDIT.SOLR.ENABLE=true
XAAUDIT.SOLR.URL=http://10.10.10.137:6083/solr/ranger_audits
XAAUDIT.SOLR.USER=NONE
XAAUDIT.SOLR.PASSWORD=NONE
XAAUDIT.SOLR.ZOOKEEPER=NONE
XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/hbase/audit/solr/spool
XAAUDIT.ELASTICSEARCH.ENABLE=false
XAAUDIT.ELASTICSEARCH.URL=NONE
XAAUDIT.ELASTICSEARCH.USER=NONE
XAAUDIT.ELASTICSEARCH.PASSWORD=NONE
XAAUDIT.ELASTICSEARCH.INDEX=NONE
XAAUDIT.ELASTICSEARCH.PORT=NONE
XAAUDIT.ELASTICSEARCH.PROTOCOL=NONE
XAAUDIT.HDFS.ENABLE=false
XAAUDIT.HDFS.HDFS_DIR=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit
XAAUDIT.HDFS.FILE_SPOOL_DIR=/var/log/hbase/audit/hdfs/spool
XAAUDIT.HDFS.AZURE_ACCOUNTNAME=__REPLACE_AZURE_ACCOUNT_NAME
XAAUDIT.HDFS.AZURE_ACCOUNTKEY=__REPLACE_AZURE_ACCOUNT_KEY
XAAUDIT.HDFS.AZURE_SHELL_KEY_PROVIDER=__REPLACE_AZURE_SHELL_KEY_PROVIDER
XAAUDIT.HDFS.AZURE_ACCOUNTKEY_PROVIDER=__REPLACE_AZURE_ACCOUNT_KEY_PROVIDER
XAAUDIT.LOG4J.ENABLE=false
XAAUDIT.LOG4J.IS_ASYNC=false
XAAUDIT.LOG4J.ASYNC.MAX.QUEUE.SIZE=10240
XAAUDIT.LOG4J.ASYNC.MAX.FLUSH.INTERVAL.MS=30000
XAAUDIT.LOG4J.DESTINATION.LOG4J=true
XAAUDIT.LOG4J.DESTINATION.LOG4J.LOGGER=xaaudit
XAAUDIT.HDFS.IS_ENABLED=false
XAAUDIT.HDFS.DESTINATION_DIRECTORY=hdfs://__REPLACE__NAME_NODE_HOST:8020/ranger/audit/%app-type%/%time:yyyyMMdd%
XAAUDIT.HDFS.LOCAL_BUFFER_DIRECTORY=__REPLACE__LOG_DIR/hbase/audit/%app-type%
XAAUDIT.HDFS.LOCAL_ARCHIVE_DIRECTORY=__REPLACE__LOG_DIR/hbase/audit/archive/%app-type%
XAAUDIT.HDFS.DESTINTATION_FILE=%hostname%-audit.log
XAAUDIT.HDFS.DESTINTATION_FLUSH_INTERVAL_SECONDS=900
XAAUDIT.HDFS.DESTINTATION_ROLLOVER_INTERVAL_SECONDS=86400
XAAUDIT.HDFS.DESTINTATION_OPEN_RETRY_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_FILE=%time:yyyyMMdd-HHmm.ss%.log
XAAUDIT.HDFS.LOCAL_BUFFER_FLUSH_INTERVAL_SECONDS=60
XAAUDIT.HDFS.LOCAL_BUFFER_ROLLOVER_INTERVAL_SECONDS=600
XAAUDIT.HDFS.LOCAL_ARCHIVE_MAX_FILE_COUNT=10
XAAUDIT.SOLR.IS_ENABLED=false
XAAUDIT.SOLR.MAX_QUEUE_SIZE=1
XAAUDIT.SOLR.MAX_FLUSH_INTERVAL_MS=1000
XAAUDIT.SOLR.SOLR_URL=http://localhost:6083/solr/ranger_audits
SSL_KEYSTORE_FILE_PATH=/etc/hbase/conf/ranger-plugin-keystore.jks
SSL_KEYSTORE_PASSWORD=myKeyFilePassword
SSL_TRUSTSTORE_FILE_PATH=/etc/hbase/conf/ranger-plugin-truststore.jks
SSL_TRUSTSTORE_PASSWORD=changeit
UPDATE_XAPOLICIES_ON_GRANT_REVOKE=true
CUSTOM_USER=hbase
CUSTOM_GROUP=hadoop
EOF

# 启动 Ranger HBase Plugin 2.1.0
sh /data/ranger/ranger-2.1.0-hbase-plugin/enable-hbase-plugin.sh

# 检查 Ranger HBase Plugin 2.1.0 启动状态
# 目录下会生成 ranger 相关配置文件
ll /opt/cloudera/parcels/CDH/lib/hbase/conf/
-rw-r--r-- 1 root  root      21 Sep 26 08:09 __cloudera_generation__
-rw-r--r-- 1 root  root      70 Sep 26 08:09 __cloudera_metadata__
-rw-r--r-- 1 root  root    3346 Sep 26 08:09 core-site.xml
-rw-r--r-- 1 root  root     270 Sep 26 08:09 hbase-env.sh
-rw-r--r-- 1 root  root    3018 Sep 26 08:36 hbase-site.xml
-rw-r--r-- 1 root  root    2876 Sep 26 08:09 hdfs-site.xml
-rw-r--r-- 1 root  root       0 Sep 26 08:09 jaas.conf
-rw-r--r-- 1 root  root     312 Sep 26 08:09 log4j.properties
-rw-r--r-- 1 hbase hadoop 10816 Sep 26 08:36 ranger-hbase-audit.xml
-rw-r--r-- 1 hbase hadoop  2948 Sep 26 08:36 ranger-hbase-security.xml
-rw-r--r-- 1 hbase hadoop  1924 Sep 26 08:36 ranger-policymgr-ssl.xml
-rw-r--r-- 1 hbase hadoop    69 Sep 26 08:36 ranger-security.xml
-rw-r--r-- 1 root  root     315 Sep 26 08:09 ssl-client.xml

# 目录下会生成 Ranger 相关 jar 包
ll /opt/cloudera/parcels/CDH/lib/hbase/lib/ |grep ranger
lrwxrwxrwx 1 root root  67 Sep 26 08:36 ranger-hbase-plugin-impl -> /data/ranger/ranger-2.1.0-hbase-plugin/lib/ranger-hbase-plugin-impl
lrwxrwxrwx 1 root root  77 Sep 26 08:36 ranger-hbase-plugin-shim-2.1.0.jar -> /data/ranger/ranger-2.1.0-hbase-plugin/lib/ranger-hbase-plugin-shim-2.1.0.jar
lrwxrwxrwx 1 root root  78 Sep 26 08:36 ranger-plugin-classloader-2.1.0.jar -> /data/ranger/ranger-2.1.0-hbase-plugin/lib/ranger-plugin-classloader-2.1.0.jar

# 调整 HBase 配置文件
# CDH 环境内,在 HBase 服务的 hbase-site.xml 的 HBase Master 高级配置代码段添加如下配置
<property>
    <name>hbase.coprocessor.master.classes</name>
    <value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>

# CDH 环境内,在 HBase 服务的 hbase-site.xml 的 HBase RegionServer 高级配置代码段添加如下配置
<property>
    <name>hbase.coprocessor.region.classes</name>
    <value>org.apache.ranger.authorization.hbase.RangerAuthorizationCoprocessor</value>
</property>

2. 重启 HBase 服务

  • 在启动 Master 过程中,会报出访问元数据权限不足的异常。一般是由于在配置完成 HDFS Plugin 后,未将 hbase 用户权限设置为最大权限导致。调整权限后,再次重启就可恢复正常。

3. 检查 HBase 服务状态

  • 在 cdh6-02 - 10.10.10.138 和 cdh6-03 - 10.10.10.139 节点上,进行如下操作
# 若插件正常工作,则会在如下目录中生成临时文件
ll /etc/ranger/test-cdh6-hbase/policycache/

4. HBase Plugin 关联 Ranger Admin

  • Service Name: test-cdh6-hbase

  • Username: ranger

  • Password: ranger@123

  • hbase.zookeeper.property.clientPort: 2181

  • hbase.zookeeper.quorum: 10.10.10.139

  • zookeeper.znode.parent: /hbase

部署 Spark Plugin

1. 安装 Ranger 2.1.0 Spark Plugin

  • 部署 Spark Ranger 插件的主要目的是,为了解决使用 Spark 运行 Hive 任务时不出现无法获取用户组的异常,保证 Hive On Spark 能够正常运行

  • 此文档所使用的 Spark 为 On YARN 模式,其余模式的 Spark 不适用于此文档

  • 由于 Ranger 2.1.0 不支持 Spark,而且最新版本的 Ranger 2.4.0 也未支持 Spark,所以即使安装了 Spark 插件也无法通过 Ranger Admin 进行权限管理

  • Spark 的 Ranger 插件需要安装在所有的 Gateway 节点上

  • 所有节点上,进行如下操作

# 解压 Ranger Spark Plugin 2.1.0 源码包
tar -zxf /data/ranger/ranger-2.1.0-spark-plugin.tar.gz -C /data/ranger

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-spark-plugin/ranger-spark-audit.xml /data/ranger/ranger-2.1.0-spark-plugin/ranger-spark-audit.xml.orig
# 调整配置文件 ranger-spark-audit.xml
cat > /data/ranger/ranger-2.1.0-spark-plugin/ranger-spark-audit.xml << EOF
<configuration>
  <property>
    <name>xasecure.audit.is.enabled</name>
    <value>false</value>
  </property>
  <property>
    <name>xasecure.audit.destination.db</name>
    <value>false</value>
  </property>
  <property>
    <name>xasecure.audit.destination.db.jdbc.driver</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
    <name>xasecure.audit.destination.db.jdbc.url</name>
    <value>jdbc:mysql://10.10.10.130:3306/ranger</value>
  </property>
  <property>
    <name>xasecure.audit.destination.db.password</name>
    <value>ranger</value>
  </property>
  <property>
    <name>xasecure.audit.destination.db.user</name>
    <value>Ranger2.1</value>
  </property>
</configuration>
EOF

# 备份原配置文件
cp /data/ranger/ranger-2.1.0-spark-plugin/ranger-spark-security.xml /data/ranger/ranger-2.1.0-spark-plugin/ranger-spark-security.xml.orig
# 调整配置文件 ranger-spark-security.xml
cat > /data/ranger/ranger-2.1.0-spark-plugin/ranger-spark-security.xml << EOF
<configuration>
  <property>
    <name>ranger.plugin.spark.policy.rest.url</name>
    <value>http://10.10.10.137:6080</value>
  </property>
  <property>
    <name>ranger.plugin.spark.service.name</name>
    <value>test-cdh6-hive</value>
  </property>
  <property>
    <name>ranger.plugin.spark.policy.cache.dir</name>
    <value>./test-cdh6-hive/policycache</value>
  </property>
  <property>
    <name>ranger.plugin.spark.policy.pollIntervalMs</name>
    <value>5000</value>
  </property>
  <property>
    <name>ranger.plugin.spark.policy.source.impl</name>
    <value>org.apache.ranger.admin.client.RangerAdminRESTClient</value>
  </property>
</configuration>
EOF

# 启动 Ranger Spark Plugin 2.1.0
cd /data/ranger/ranger-2.1.0-spark-plugin/ && sh enable-spark-plugin.sh

# 检查 Ranger Spark Plugin 2.1.0 启动状态
# 目录下会生成 ranger 相关配置文件
ll /opt/cloudera/parcels/CDH/lib/spark/conf/
-rw-r--r-- 1 root root 13195 Nov  7 20:47 classpath.txt
-rw-r--r-- 1 root root    20 Nov  7 20:47 __cloudera_generation__
-rw-r--r-- 1 root root    70 Nov  7 20:47 __cloudera_metadata__
-rw-r--r-- 1 root root   888 Nov  7 20:47 log4j.properties
-rw-r--r-- 1 root root     0 Nov  7 20:47 navigator.lineage.client.properties
-rw-r--r-- 1 root root  1776 Nov  7 20:47 spark-defaults.conf
-rw-r--r-- 1 root root  2128 Nov  7 20:47 spark-env.sh
-rw-r--r-- 1 root root 762 Nov 21 15:22 ranger-spark-audit.xml
-rw-r--r-- 1 root root 724 Nov 21 15:20 ranger-spark-security.xml
drwxr-xr-x 2 root root   174 Nov  7 20:47 yarn-conf

# 目录下会生成 Ranger 相关 jar 包
ll /opt/cloudera/parcels/CDH/lib/spark/jars/ |grep -E "ranger|jna|gethostname"
-rw-r--r-- 1 root root     4179 Nov 21 13:31 gethostname4j.jar
-rw-r--r-- 1 root root  1506993 Nov 21 13:31 jna-5.5.0.jar
-rw-r--r-- 1 root root    93766 Nov 21 15:15 ranger-hive-plugin-2.1.0.jar
-rw-r--r-- 1 root root    26943 Nov 21 15:16 ranger-hive-plugin-shim-2.1.0.jar
-rw-r--r-- 1 root root   215530 Nov 21 15:32 ranger-plugins-audit-2.1.0.jar
-rw-r--r-- 1 root root   899844 Nov 21 15:32 ranger-plugins-common-2.1.0.jar
-rw-r--r-- 1 root root    22168 Nov 21 15:32 ranger-plugins-cred-2.1.0.jar
-rw-r--r-- 1 root root 16103757 Nov 21 15:24 spark-ranger-1.0-SNAPSHOT.jar

# 调整 Spark 配置文件
# CDH 环境内,spark-conf/spark-defaults.conf的Spark客户端高级配置代码段(安全阀)添加如下配置
hive.security.authorization.manager=org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory
spark.sql.extensions=org.apache.ranger.authorization.spark.authorizer.RangerSparkSQLExtension