CDH 6.3.2 集成 Apache Ranger 2.1.0 开启 Kerberos 认证
文档目录
- Ranger 官方文档:Ranger installation in Kerberized Environment
架构图
- Ranger 集成 Kerberos
- CDH 集成 Ranger
节点分布
主机名 | IP 地址 | MySQL 版本 | MySQL 服务 | CDH 版本 | CDH 服务 | Kerberos 版本 | Kerberos 服务 | Ranger 版本 | Ranger 服务 |
---|---|---|---|---|---|---|---|---|---|
cdh6-01 | 10.10.10.137 | 5.7.40 | MySQL Server | 6.3.2 | HS2 | 1.51.1 | KDC Server | 2.1.0 | Admin\Usersync |
cdh6-02 | 10.10.10.138 | 6.3.2 | NN | 1.51.1 | 2.1.0 | ||||
cdh6-03 | 10.10.10.139 | 6.3.2 | NN | 1.51.1 | 2.1.0 |
前提条件
-
已完成 CDH 6.3.2 集成 Kerberos。具体步骤,可见文档:Linux 7.9 部署 KDC 1.15.1
-
已完成 Ranger 2.1.0 For CDH 6.3.2 编译。具体操作步骤,可见文档:CDH 6.3.2 集成 Apache Ranger 2.1.0
-
已使用 Ranger 所提供的 Solr 完成 Solr Standalone 部署。具体操作步骤,可见文档:CDH 6.3.2 集成 Apache Ranger 2.1.0
-
已将 Ranger 编译后安装包存入
/data/ranger
目录下,名称为ranger-release-ranger-2.1.0-cdh-6.3.2
-
文档中所提及的 Kerberos 主体,密码都为:Passw0rd!
部署 Ranger Admin
在进行此步骤前,需确认已完成 Ranger 2.1.0 For CDH 6.3.2 编译、已在可使用的 MySQL 中创建数据库 ranger、已使用 Ranger 所提供的 Solr 完成 Solr Standalone 部署
1. 创建所需 Kerberos 主体和 keytab
Ranger 集成 Kerberos 的配置过程中,需要牵涉到 5 个服务主体是:
- HTTP:用于执行服务间的通讯协议。若已完成 CDH 6.3.2 集成 Kerberos,则可直接查看到此主体
- rangerusersync:Ranger Usersync 服务
- rangerlookup:Ranger Lookup 服务
- rangertagsync: Ranger Tagsync 服务
1 个用户主体是:
- root:Ranger Admin 的启动用户。可为任何启动 Ranger Admin 的用户
- 按节点分布,请在 cdh6-01 - 10.10.10.137 节点上完成如下操作:
# 登录 KDC Server
kadmin.local
# 创建主体
addprinc root/cdh6-01@CDHKRB.COM # 输入密码
addprinc rangeradmin/cdh6-01@CDHKRB.COM # 输入密码
addprinc rangerusersync/cdh6-01@CDHKRB.COM # 输入密码
addprinc rangerlookup/cdh6-01@CDHKRB.COM # 输入密码
addprinc rangertagsync/cdh6-01@CDHKRB.COM # 输入密码
# 将所有所需主体集合至一个 keytab 中
ktadd -kt /data/ranger/ranger-2.1.0-admin/rangeradmin.keytab HTTP/cdh6-01@CDHKRB.COM root/cdh6-01@CDHKRB.COM rangeradmin/cdh6-01@CDHKRB.COM rangerusersync/cdh6-01@CDHKRB.COM rangerlookup/cdh6-01@CDHKRB.COM rangertagsync/cdh6-01@CDHKRB.COM
- 调整 keytab 权限
chmod 777 /data/ranger/ranger-2.1.0-admin/rangadmin.keytab
- 检查 keytab 所包含主体
# 登录 KDC 管理工具
ktutil
# 加载指定 keytab
read_kt /data/ranger/ranger-2.1.0-admin/rangadmin.keytab
# 罗列指定 keytab 中的主体
list
# 输出结果
# 多个相同主体,主要由于不同的加密策略
slot KVNO Principal
---- ---- ---------------------------------------------------------------------
1 4 HTTP/cdh6-01@CDHKRB.COM
2 4 HTTP/cdh6-01@CDHKRB.COM
3 4 HTTP/cdh6-01@CDHKRB.COM
4 4 HTTP/cdh6-01@CDHKRB.COM
5 4 HTTP/cdh6-01@CDHKRB.COM
6 4 HTTP/cdh6-01@CDHKRB.COM
7 4 HTTP/cdh6-01@CDHKRB.COM
8 4 HTTP/cdh6-01@CDHKRB.COM
9 3 root/cdh6-01@CDHKRB.COM
10 3 root/cdh6-01@CDHKRB.COM
11 3 root/cdh6-01@CDHKRB.COM
12 3 root/cdh6-01@CDHKRB.COM
13 3 root/cdh6-01@CDHKRB.COM
14 3 root/cdh6-01@CDHKRB.COM
15 3 root/cdh6-01@CDHKRB.COM
16 3 root/cdh6-01@CDHKRB.COM
17 2 rangeradmin/cdh6-01@CDHKRB.COM
18 2 rangeradmin/cdh6-01@CDHKRB.COM
19 2 rangeradmin/cdh6-01@CDHKRB.COM
20 2 rangeradmin/cdh6-01@CDHKRB.COM
21 2 rangeradmin/cdh6-01@CDHKRB.COM
22 2 rangeradmin/cdh6-01@CDHKRB.COM
23 2 rangeradmin/cdh6-01@CDHKRB.COM
24 2 rangeradmin/cdh6-01@CDHKRB.COM
25 2 rangerlookup/cdh6-01@CDHKRB.COM
26 2 rangerlookup/cdh6-01@CDHKRB.COM
27 2 rangerlookup/cdh6-01@CDHKRB.COM
28 2 rangerlookup/cdh6-01@CDHKRB.COM
29 2 rangerlookup/cdh6-01@CDHKRB.COM
30 2 rangerlookup/cdh6-01@CDHKRB.COM
31 2 rangerlookup/cdh6-01@CDHKRB.COM
32 2 rangerlookup/cdh6-01@CDHKRB.COM
33 2 rangertagsync/cdh6-01@CDHKRB.COM
34 2 rangertagsync/cdh6-01@CDHKRB.COM
35 2 rangertagsync/cdh6-01@CDHKRB.COM
36 2 rangertagsync/cdh6-01@CDHKRB.COM
37 2 rangertagsync/cdh6-01@CDHKRB.COM
38 2 rangertagsync/cdh6-01@CDHKRB.COM
39 2 rangertagsync/cdh6-01@CDHKRB.COM
40 2 rangertagsync/cdh6-01@CDHKRB.COM
41 2 rangerusersync/cdh6-01@CDHKRB.COM
42 2 rangerusersync/cdh6-01@CDHKRB.COM
43 2 rangerusersync/cdh6-01@CDHKRB.COM
44 2 rangerusersync/cdh6-01@CDHKRB.COM
45 2 rangerusersync/cdh6-01@CDHKRB.COM
46 2 rangerusersync/cdh6-01@CDHKRB.COM
47 2 rangerusersync/cdh6-01@CDHKRB.COM
48 2 rangerusersync/cdh6-01@CDHKRB.COM
- 通过如下方式,检查所有主体是否能够完成认证
# 通过 kinit,使用指定 keytab 完成指定主体认证
kinit -kt /data/ranger/ranger-2.1.0-admin/rangadmin.keytab HTTP/cdh6-01@CDHKRB.COM
# 查看当前已认证主体
klist
# 输出结果
# 默认主体已更新为 HTTP/cdh6-01@CDHKRB.COM
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP/cdh6-01@CDHKRB.COM
Valid starting Expires Service principal
03/07/2024 16:08:30 03/08/2024 16:08:30 krbtgt/CDHKRB.COM@CDHKRB.COM
2. 安装服务
- 按节点分布,请在 cdh6-01 - 10.10.10.137 节点上完成如下操作:
2.1 解压安装包
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
2.2 备份配置文件
cp /data/ranger/ranger-2.1.0-admin/install.properties /data/ranger/ranger-2.1.0-admin/install.properties.orig
2.3 调整配置文件
cat > /data/ranger/ranger-2.1.0-admin/install.properties << EOF
PYTHON_COMMAND_INVOKER=python
DB_FLAVOR=MYSQL
# 需在此目录下存有 mysql-connector-java.jar
SQL_CONNECTOR_JAR=/usr/share/java/mysql-connector-java.jar
# 需能够通过如下参数连接 MySQL
db_root_user=root
db_root_password=Passw0rd!
db_host=10.10.10.137
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=
# 指定 Ranger 所使用数据库名称及登陆方式
db_name=ranger
db_user=root
db_password=Passw0rd!
# 指定 Ranger 内部用户密码
rangerAdmin_password=Passw0rd!
rangerTagsync_password=Passw0rd!
rangerUsersync_password=Passw0rd!
keyadmin_password=Passw0rd!
# 指定使用 solr 存储审计信息
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
# 此部分为 Solr 配置。需与所部署 Sorl 服务保持一致
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://10.10.10.137: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=
# 此部分为 Kerberos 配置。需与所创建主体一一对应
spnego_principal=HTTP/cdh6-01@CDHKRB.COM
spnego_keytab=/data/ranger/ranger-2.1.0-admin/rangeradmin.keytab
token_valid=30
cookie_domain=cdh6-01
cookie_path=/
admin_principal=rangeradmin/cdh6-01@CDHKRB.COM
admin_keytab=/data/ranger/ranger-2.1.0-admin/rangeradmin.keytab
lookup_principal=rangerlookup/cdh6-01@CDHKRB.COM
lookup_keytab=/data/ranger/ranger-2.1.0-admin/rangeradmin.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
2.4 安装服务
sh /data/ranger/ranger-2.1.0-admin/setup.sh
2.5 删除非兼容 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
2.6 启动服务
sh /data/ranger/ranger-2.1.0-admin/ews/ranger-admin-services.sh start
3. 验证 Ranger Admin
- 网页查看: http://10.10.10.137:6080
- 用户名: admin
- 密码:Passw0rd!
部署 Ranger Usersync
- 按节点分布,请在 cdh6-01 - 10.10.10.137 节点上完成如下操作:
1 解压安装包
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
2 备份配置文件
cp /data/ranger/ranger-2.1.0-usersync/install.properties /data/ranger/ranger-2.1.0-usersync/install.properties.orig
3 调整配置文件
cat > /data/ranger/ranger-2.1.0-usersync/install.properties << EOF
ranger_base_dir = /etc/ranger
# 指定 Ranger Admin 地址。此处必须为主机名,否则无法完成 Kerberos 认证
POLICY_MGR_URL = http://cdh6-01: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
# 需与 Ranger Admin 的 install.properties 配置保持一致
rangerUsersync_password=Passw0rd!
# 此部分为 Kerberos 配置。需与所创建主体一一对应
usersync_principal=rangerusersync/cdh6-01@CDHKRB.COM
usersync_keytab=/data/ranger/ranger-2.1.0-admin/rangeradmin.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
4 安装服务
sh /data/ranger/ranger-2.1.0-usersync/setup.sh
5 备份配置文件
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
6 调整配置文件
<!-- 开启 UserSync 功能 -->
<property>
<name>ranger.usersync.enabled</name>
<value>true</value>
</property>
7 启动服务
sh /data/ranger/ranger-2.1.0-usersync/ranger-usersync-services.sh start
8. 验证服务
- 通过网页查看用户信息,会发现大量本地用户被同步至 Ranger 中
部署 HDFS Plugin
-
HDFS 的 Ranger 插件需要安装在所有的 NameNode 节点上
-
按节点分布,请在 cdh6-02 - 10.10.10.138 和 cdh6-03 - 10.10.10.139 节点上完成如下操作:
1. 安装 HDFS Plugin
1.1 解压安装包
tar -zxf /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2/target/ranger-2.1.0-hdfs-plugin.tar.gz -C /data/ranger
1.2 调整 HDFS jar 包和配置文件
通过软链接的方式,进一步保证 HDFS 在每次启动时,能够获取到所需的 jar 包和配置文件
- 创建 HDFS Plugin 存放 jar 包路径
mkdir -p /data/ranger/ranger-2.1.0-hdfs-plugin/hadoop/etc
- 将 Hadoop 所有 jar 包,软链接至 HDFS Plugin 中
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
- 将 HDFS Plugin 所有 jar 包,软链接至 Hadoop 中
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
1.3 备份配置文件
cp /data/ranger/ranger-2.1.0-hdfs-plugin/install.properties /data/ranger/ranger-2.1.0-hdfs-plugin/install.properties.orig
1.4 调整配置文件
cat > install.properties <<EOF
# 指定 Ranger Admin 地址。此处必须为主机名,否则无法完成 Kerberos 认证
POLICY_MGR_URL=http://cdh6-01:6080
# 指定插件名称
REPOSITORY_NAME=cdh6_hdfs
# 指定服务路径
COMPONENT_INSTALL_DIR_NAME=/data/ranger/ranger-2.1.0-hdfs-plugin/hadoop
# 此部分为 Solr 配置。需与所部署 Sorl 服务保持一致
XAAUDIT.SOLR.ENABLE=ture
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
1.5 创建配置文件
创建此配置文件主要用于 Ranger Plugin 访问数据库 ranger
而在实际使用中发现,只需要保证数据库信息正确即可,用户名和密码对于插件本身无任何影响
cat > /data/ranger/ranger-2.1.0-hdfs-plugin/hadoop/etc/hadoop/xasecure-audit.xml << EOF
<!-- MySQL 的连接地址及端口号,须与 Ranger Admin 中 install.properties 配置相同 -->
<property>
<name>xasecure.audit.jpa.javax.persistence.jdbc.url</name>
<value>jdbc:mysql://10.10.10.137: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
1.6 启动服务
sh /data/ranger/ranger-2.1.0-hdfs-plugin/enable-hdfs-plugin.sh
2. 调整 HDFS 配置文件
<property>
<name>dfs.permissions</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.acls.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.namenode.inode.attributes.provider.class</name>
<value>org.apache.ranger.authorization.hadoop.RangerHdfsAuthorizer</value>
<description>ranger</description>
</property
3. 重启 HDFS
4. 检查 HDFS
ll /etc/ranger/cdh6_hdfs/policycache/
# 输出结果
-rw-r--r-- 1 hdfs hdfs 12764 Mar 7 18:18 hdfs_cdh6_hdfs.json
-rw-r--r-- 1 hdfs hdfs 107 Mar 7 17:43 hdfs_cdh6_hdfs_roles.json
5. 关联 Ranger Admin
- 创建 HDFS 服务后,按如下信息填写:
- Service Name: cdh6_hdfs
- Display Name: cdh6_hdfs
- Active Status: Enabeld
- Username: admin
- Password: Passw0rd!
- NameNode URL: hdfs://cdh6-03:8020,hdfs://cdh6-02:8020
- Authorization Enabled: Yes
- Authentication Type: Kerberos
- hadoop.security.auth_to_local: DEFAULT
- dfs.datanode.kerberos.principal: hdfs/_HOST@CDHKRB.COM
- dfs.namenode.kerberos.principal: hdfs/_HOST@CDHKRB.COM
- RPC Protection Type: Authentication
- Add New Configurations: policy.download.auth.users = hdfs
- Service Name 需与 HDFS Plugin 中 install.properties 的 REPOSITORY_NAME 参数保持一致
- Username 和 Password 虽为必填项,但并不影响关联。可随意填写
- 此处的 NameNode URL 填写方式为 HA 模式。若不是 HA 模式,只需配置 NameNode 即可。建议在集成 Kerberos 后,使用主机名配置
- hadoop.security.auth_to_local 参数须于 HDFS 的 core-site.xml 配置相同
- dfs.datanode.kerberos.principal、dfs.namenode.kerberos.principal 和 dfs.secondary.namenode.kerberos.principal 参数须于 HDFS 的 hdfs-site.xml 配置相同
- Test Connection 测试连通性
6. 验证服务
6.1 创建测试用户
由于在部署 Usersync 服务之前,节点上已建有 test 账户,所以已被同步至 Ranger Admin。此处直接使用此用户进行验证
若需重新创建普通用户进行验证,需保证 Ranger Admin 和发起命令的节点上包含相同用户,而不需要所有节点都包含此用户
6.2 查看权限
配置完成后的初始状态,所有用户都能够访问 HDFS
# 通过 kinit,使用指定用户主体认证
kinit test@CDHKRB.COM
# 查看是否含有 HDFS 权限
hdfs dfs -ls /
# 输出结果
# test 用户能够正常访问 HDFS
drwxr-xr-x - hbase hbase 0 2023-11-21 15:12 /hbase
drwxrwxr-x - solr solr 0 2023-09-25 13:59 /solr
drwxr-xr-x - hdfs supergroup 0 2023-05-30 11:46 /test1
drwxr-xr-x - hdfs supergroup 0 2023-05-30 11:46 /test2
drwxr-xr-x - hdfs supergroup 0 2023-05-30 11:46 /test3
drwxrwxrwt - hdfs supergroup 0 2023-11-27 17:04 /tmp
drwxrwxrwx - hdfs supergroup 0 2023-11-27 16:15 /user
6.3 调整权限
- 通过 禁用其它任何用户 的方式,限制 test 用户访问 HDFS 的权限
6.4 查看权限
Ranger 配置权限后,会有短暂的生效过程。建议等待 3-5 秒
- 发现 test 用户已无操作 HDFS 的权限。与 Ranger 所配置的权限保持一致
# 通过 kinit,使用指定用户主体认证
kinit test@CDHKRB.COM
# 查看是否含有 HDFS 权限
hdfs dfs -ls /
# 输出结果
ls: Permission denied: user=test, access=EXECUTE, inode="/"
部署 Hive Plugin
-
Hive 的 Ranger 插件需要安装在所有的 HiveServer2 节点上
-
在 cdh6-01 - 10.10.10.137 节点上,进行如下操作
1. 安装 Hive Plugin
1.1 解压安装包
tar -zxf /data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2/target/ranger-2.1.0-hive-plugin.tar.gz -C /data/ranger
1.2 备份配置文件
cp /data/ranger/ranger-2.1.0-hive-plugin/install.properties /data/ranger/ranger-2.1.0-hive-plugin/install.properties.orig
cp /opt/cloudera/parcels/CDH/lib/hive/conf/hive-env.sh /opt/cloudera/parcels/CDH/lib/hive/conf/hive-env.sh.orig
1.3 调整配置文件
- /data/ranger/ranger-2.1.0-hive-plugin/install.properties
cat > /data/ranger/ranger-2.1.0-hive-plugin/install.properties << EOF
# 此处必须为主机名,否则无法完成 Kerberos 认证
POLICY_MGR_URL=http://cdh6-01:6080
# 指定插件名称
REPOSITORY_NAME=cdh6_hive
# 指定服务路径
COMPONENT_INSTALL_DIR_NAME=/opt/cloudera/parcels/CDH/lib/hive
# 此部分为 Solr 配置。需与所部署 Sorl 服务保持一致
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
-
/opt/cloudera/parcels/CDH/lib/hive/conf/hive-env.sh
-
注释变量 HIVE_OPTS,以防止通过 beeline 连接 Hive 时,产生异常
sed -i '/^export HIVE_OPTS/ s/^/# /' /opt/cloudera/parcels/CDH/lib/hive/conf/hive-env.sh
1.4 创建配置文件
cat > /data/ranger/ranger-2.1.0-hive-plugin/install/conf.templates/enable/xasecure-audit.xml << EOF
<!-- MySQL 的连接地址及端口号,须与 Ranger Admin 中 install.properties 配置相同 -->
<property>
<name>xasecure.audit.jpa.javax.persistence.jdbc.url</name>
<value>jdbc:mysql://10.10.10.137: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
1.5 启动服务
sh /data/ranger/ranger-2.1.0-hive-plugin/enable-hive-plugin.sh
2. 检查状态
- 检查 Hive 配置目录。确认已包含 Ranger 配置文件及所创建 xasecure-audit.xml
ll /opt/cloudera/parcels/CDH/lib/hive/conf/ | grep -E "ranger|xasecure"
# 输出结果
-rwxr--r-- 1 hive hadoop 9575 Mar 8 13:58 ranger-hive-audit.xml
-rwxr--r-- 1 hive hadoop 2905 Mar 8 13:58 ranger-hive-security.xml
-rwxr--r-- 1 hive hadoop 1910 Mar 8 13:58 ranger-policymgr-ssl.xml
-rw-r--r-- 1 hive hadoop 69 Mar 8 13:58 ranger-security.xml
-rw-r--r-- 1 hive hadoop 364 Mar 8 13:58 xasecure-audit.xml
- 检查 Hive lib 目录。确认已包含 Ranger 相关 jar 包
ll /opt/cloudera/parcels/CDH/lib/hive/lib/ | grep ranger
# 输出结果
lrwxrwxrwx 1 root root 65 Mar 8 13:58 ranger-hive-plugin-impl -> /data/ranger/ranger-2.1.0-hive-plugin/lib/ranger-hive-plugin-impl
lrwxrwxrwx 1 root root 75 Mar 8 13:58 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 77 Mar 8 13:58 ranger-plugin-classloader-2.1.0.jar -> /data/ranger/ranger-2.1.0-hive-plugin/lib/ranger-plugin-classloader-2.1.0.jar
3. 调整 Hive 配置文件
<property>
<name>hive.security.authenticator.manager</name>
<value>
org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator
</value>
<description>ranger</description>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>
org.apache.ranger.authorization.hive.authorizer.RangerHiveAuthorizerFactory
</value>
<description>ranger</description>
</property>
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
<description>ranger</description>
</property>
<property>
<name>hive.conf.restricted.list</name>
<value>
hive.security.authorization.enabled,hive.security.authorization.manager,hive.security.authenticator.manager
</value>
<description>ranger</description>
</property>
4. 重启 Hive
5. 检查 Hive
ll /etc/ranger/cdh6_hive/policycache/
# 输出结果
-rwxrwxrwx 1 hive hive 10287 Mar 8 14:22 hiveServer2_cdh6_hive.json
-rwxrwxrwx 1 hive hive 108 Mar 8 14:20 hiveServer2_cdh6_hive_roles.json
6. 关联 Ranger Admin
6.1 提升 Hive 用户权限
开启 Kerberos 后,Hive 需要通过指定用户进行策略下载。而此用户需满足如下两个条件:
- 该用户为 Hive 服务启动用户
- 该用户为 Rander Admin 的管理员级用户
CDH 的 Hive 服务,是由 Hive 用户启动。而在运行 Usersync 服务时,已将节点上的 Hive 用户同步至 Ranger Admin 中,所以需要将 Ranger Admin 中的 Hive 用户权限提升至 Admin
6.2 创建 Hive 服务
- 创建 Hive 服务后,按如下信息填写:
- Service Name: cdh6_hive
- Display Name: cdh6_hive
- Active Status: Enabeld
- Username: test
- Password: Passw0rd!
- jdbc.driverClassName: org.apache.hive.jdbc.HiveDriver
- jdbc.url: jdbc:hive2://cdh6-01:10000/;principal=hive/_HOSTNAME@CDHKRB.COM
- Add New Configurations: policy.download.auth.users = hive
- Service Name 需与 Hive Plugin 中 install.properties 的 REPOSITORY_NAME 参数保持一致
- Username 和 Password 虽为必填项,但并不影响关联。可随意填写
- jdbc.url 后缀的 Kerberos 主体需与 Hive 配置文件 hive-site.xml 中的参数 hive.server2.authentication.kerberos.principal 保持一致
- policy.download.auth.users 需是上述提权的用户 Hive。用于将权限从 Ranger 中下载至 HiveServer2
6.3 调整策略
Ranger Admin 通过内部用户 rangerlookup 将 Hive 的表信息导入 Ranger 中,所以 rangerlookup 用户需要有 Hive 的所有权限
- 通过下述方式,为 rangerlookup 用户提供 Hive 的所有权限
6.4 测试连通性
- 再次会回退至配置 Hive 服务界面,通过 Test Connection 测试连通性
7. 验证服务
- 由于在上述测试 HDFS 时,已创建测试用户 test,所以此处直接复用 test 用户进行测试
7.1 查看权限
配置完成后的初始状态,所有用户都不能访问 Hive
# 通过 kinit,使用指定用户主体认证
kinit test@CDHKRB.COM
# 通过 beeline 连接 hive
beeline -u "jdbc:hive2://cdh6-01:10000/default;principal=hive/cdh6-01@CDHKRB.COM"
# 查看数据库
show databases;
# 输出结果
Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [test] does not have [USE] privilege on [*] (state=42000,code=40000)
7.2 调整权限
- 通过与上述为 rangerlookup 用户授权相同的方式,为 test 用户授权
7.3 查看权限
Ranger 配置权限后,会有短暂的生效过程。建议等待 3-5 秒
- 发现 test 用户已有操作 Hive 的权限。与 Ranger 所配置的权限保持一致
# 通过 kinit,使用指定用户主体认证
kinit test@CDHKRB.COM
# 通过 beeline 连接 hive
beeline -u "jdbc:hive2://cdh6-01:10000/default;principal=hive/cdh6-01@CDHKRB.COM"
# 查看数据库
show databases;
# 输出结果
+----------------+
| database_name |
+----------------+
| default |
| test |
+----------------+
附录
关闭认证功能
可通过调整源码的方式,关闭 Ranger 的所有认证功能。需要注意的是:目前的测试结果较为有限,无法完全了解更改后可能存在的问题。不建议在生产环境中使用。目前只能确定在 AD + CDH 的架构下,能够使 Hive Plugin 在不配置 Kerberos 的情况下完成权限管理
- 调整源码文件:/data/ranger/ranger-release-ranger-2.1.0-cdh-6.3.2/agents-common/src/main/java/org/apache/ranger/admin/client/RangerAdminRESTClient.java
# 在第 57 行后,添加如下变量
private Boolean isSecure;
# 在第 102 行后,添加如下赋值
isSecure = config.getBoolean("ranger.admin.isSecure", false);
# 将第 136 行,改为如下赋值
final boolean isSecureMode = user != null && UserGroupInformation.isSecurityEnabled() && isSecure;
# 将第 216 行,改为如下赋值
final boolean isSecureMode = user != null && UserGroupInformation.isSecurityEnabled() && isSecure;
# 将第 926 行,改为如下赋值
final boolean isSecureMode = user != null && UserGroupInformation.isSecurityEnabled() && isSecure;
- 重新编译
- 替换原先编译所获取的 ranger-2.1.0-hive-plugin 下的 /data/ranger/ranger-2.1.0-hive-plugin/lib/ranger-hive-plugin-impl/ranger-plugins-common-2.1.0.jar