| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> 基于ranger的presto账号权限管理及事件监听方案 -> 正文阅读 |
|
[大数据]基于ranger的presto账号权限管理及事件监听方案 |
背景:我司为解决hive数据分析慢问题,部署了presto 347版本集群。同时即席分析平台采用开源产品superset 1.0版本。 为满足公司业务场景,需开发以下功能解决认证及审计等问题。
一、账号密码认证 经调研presto支持Password Authenticator接口的开发,可以在createAuthenticatedPrincipal()方法中实现自己的认证逻辑,最终返回 Principal对象用于之后的?System Access Control权限验证。经调研presto 347版本已支持 ranger的权限验证,ranger最低版本为2.0.0。 还有一个问题就是通过 presto jdbc传输密码必须开启https认证。我们为规避繁琐的服务端证书认证环节采用nginx做转发的方案完成。 即客户端开启ssl认证,nginx安装证书接收https请求并转发http请求到服务端。 具体方案如下:
下面分别介绍下各步骤的具体实现: 1.配置权限认证 第一步配置属性文件: ? 第二步在Presto中安装Presto Plugin,这个网上有很多教程这里就不详细介绍了。很多同学公司原来只有hive集群,现在搭建了presto集群想和原有的hive库表权限共用。 我们发现阿里是自己实现了逻辑让presto和hive一起去读取presto中的hive权限,这个方案也不错。我们的方案是同步一份ranger中历史的hive权限到presto空间中, 然后在权限系统中开发统一申请接口,为新用户同时开通两份相同的权限到ranger的两个空间中。好处是特殊情况下我们可以给同一个用户对hive和presto开通不同的访问权限。 2.账号密码认证 ? 这里需要自己开发插件并注册到presto中。 首先需要在pom文件中引入presto-spi依赖 ? 每个插件标识一个入口点:Plugin接口的一个实现?。这个类名通过标准 Java ServiceLoader接口提供给 Presto?:类路径包含在?META-INF/services目录下的以io.prestosql.spi.Plugin命名的资源文件。该文件的内容是一行列出插件类的名称:com.example.authenticator.RangerPasswordAuthenticatorPlugin。 需要实现一个plugin接口: 工厂类实现PasswordAuthenticatorFactory接口: 核心认证类实现PasswordAuthenticator接口: 最终返回一个带用户名的Principal:new BasicPrincipal(username),该用户名用于第一步中的权限认证。 插件开发完需要注册到presto中: <1>添加配置文件: <2>在plugin目录下创建名为ranger-password-authenticator的目录,并把相关依赖包放入。这里有个注意点就是presto打包时需要使用assembly把相关依赖都打到包里。 3.nginx请求转发 nginx conf文件内容如下: 我们是把证书安装到了nginx服务器,通过nginx解析https请求并转发http请求到presto coordinator 上。 二、superset连接认证 为让公司同学更方便使用superset平台,我们需开发公司sso账号登录功能,这一步已完成了用户的身份认证。同样为方便同学们使用superset平台查询presto 离线数据,我们默认为用户建好了统一的数据源连接,但是该连接的账号及密码经过Password Authenticator认证后无法控制住用户库表权限,因为server端 无法识别具体的连接用户。经过我们调研,superset本身支持模拟presto用户,这样我们就可以在Password Authenticator中为superset用户预留一个口子, 通过连接中的唯一复杂密码作为token来识别superset的连接。 具体方案如下: 1.superset模拟用户连接并开启https连接。 2.Password Authenticator接口单独处理superset连接。 3.System Access Control权限认证还是走ranger方案就好了。 下面分别介绍下各步骤的具体实现: 1.superset数据源配置 ? 开启模拟用户,并配置连接协议为https。 2.单独处理superset请求 这块还是在上面的presto-password-authenticator插件中的createAuthenticatedPrincipal方法里实现就好了。 3.System Access Control 因为上面经过模拟用户presto server已经能拿到登录superset的用户了,而且经过自己的逻辑已成功的把登录用户信息转发给了System Access Control模块,所以权限验证模块逻辑不需要做任何改动。 三、SQL审计 经调研,presto支持自定义的事件监听器的开发。基于该接口我们可以开发自定义日志记录、调试以及性能分析插件。我们借助该功能可以实现多事件下查询作业的指标收集、格式化、持久化工作,持久化的目的地为MySQL。 事件监听器的开发和上面的密码验证器的插件开发相似,这里有些环节就简单说一下吧。 同样需要在services里注册插件实现类,事件监听器工厂类中的getName方法返回的名字和配置文件中要一致。 事件监听器类需要实现事件监听器接口,并根据需求重写queryCreated,queryCompleted,splitCompleted等方法。 ? Presto 支持为以下事件调用的自定义事件侦听器:
此功能支持开发自定义日志记录、调试和性能分析插件。 我们这里是做sql的一个审计所以只实现了queryCompleted方法,核心逻辑如下。 插件写完注册方法和上面的密码验证器也是一样的。 经过上面两个presto插件的开发我们就完成了密码登录验证及SQL审计等功能,presto是插件化架构所以开发部署还是相对简单的, 有些复杂的是完整一套的权限账号及审计方案的制定,希望本文能给当前正在基于presto搭建公司离线加速分析系统的同学提供一定帮助。 禁止转载。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 10:18:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |