背景
Ranger是一款基于策略的权限管理框架,支持多种Haoop生态的组件,如Hadoop、Hive、HBase等。它提供了丰富的权限管理功能,包括权限控制、审计日志等。通过Ranger企业可以实现对数据资产的精细化权限管理,确保数据安全。Ranger部署之后,我们可以登陆Ranger页面,创建相关的服务,也可以通过提供api,来创建服务,从而实现自动化创建的能力。
使用的API
通过服务名查看服务是否存在
# 需要认证:ranger的用户名和密码
GET http://127.0.0.1:6080/service/public/v2/api/service/name/${SERVICE_NAME}
创建服务
# 需要认证:ranger的用户名和密码
# 需要请求体
POST http://127.0.0.1:6080/service/public/v2/api/service
示例
提供一个创建hive服务的脚本。
function usage() {
echo "USAGE: sh create_hive_service.sh -r RANGER_HOST:RANGER_PORT -u RANGER_USER -p RANGER_PASSWORD -s SERVICE_NAME -j JDBC_URL"
exit 1
}
function fail() {
echo "ERROR: $1"
exit 1
}
function parse_params() {
while [[ $# -gt 0 ]]
do
key="$1"
case $key in
-r)
RANGER_URL="$2"
shift
;;
-u)
RANGER_USER="$2"
shift
;;
-p)
RANGER_PASSWORD="$2"
shift
;;
-s)
SERVICE_NAME="$2"
shift
;;
-j)
JDBC_URL="$2"
shift
;;
*)
usage
;;
esac
shift
done
}
function check_hive_service_instance() {
curl -sS -u ''${RANGER_USER}:${RANGER_PASSWORD}'' "http://${RANGER_URL}/service/public/v2/api/service/name/${SERVICE_NAME}" | grep -c "${SERVICE_NAME}"
}
function create_hive_service_instance() {
if [ "$(check_hive_service_instance)" -eq 0 ]; then
local payload="{\"name\":\"${SERVICE_NAME}\",
\"type\":\"hive\",
\"description\":\"created by mozi\",
\"isEnabled\":true,
\"configs\":{\"username\":\"${RANGER_USER}\",
\"password\":\"************\",
\"jdbc.driverClassName\":\"org.apache.hive.jdbc.HiveDriver\",
\"jdbc.url\":\"${JDBC_URL}\",
\"tag.download.auth.users\":\"hive\",
\"policy.download.auth.users\":\"hive\",
\"policy.grantrevoke.auth.users\":\"hive\"}}"
echo "Hive service instance was not found in Ranger Admin, creating it."
local output
output=$(curl -sS -u ''${RANGER_USER}:${RANGER_PASSWORD}'' -H "Content-Type: application/json" -X POST "http://${RANGER_URL}/service/public/v2/api/service" -d "${payload}")
local created
created=$(grep -c "created" <<< "${output}")
if [ "${created}" -eq 0 ] || [ "$(check_hive_service_instance)" -eq 0 ]; then
fail "Creation of Hive service instance in Ranger Admin at ${RANGER_URL} failed. ${output}"
fi
else
echo "Hive service instance already exists in Ranger Admin, nothing to do."
fi
}
main() {
if [[ $# -lt 1 ]]; then
usage
fi
parse_params "$@"
create_hive_service_instance
}
main "$@"
调用命令
# 执行命令时将下面的值{{}}中的值,替换成实际的值
sh create_service_hive.sh -r "{{ RANGER_HOST }}":"{{ RANGER_PORT }}" -u "{{ RANGER_USER }}" -p '{{ RANGER_PASSWORD }}' -s "{{ SERVICE_NAME }}" -j "{{ JDBC_URL }}"