对Storm的DRPC进行权限控制,

并且设计相应的测试验证。

1.集群安装

请参考Storm集群安装Version1.0.1

2.使用DRPC功能

请参考Storm集群使用DRPC功能Version1.0.1

预置如下数据:

在Strom集群上面启动DRPC进程,

并且提交了DRPC的topology,

方法名称为exclamation。

3.开启DRPC的权限控制

storm.yaml文件中开启DRPC的权限控制:

drpc.authorizer: "org.apache.storm.security.auth.authorizer.DRPCSimpleACLAuthorizer"
drpc.authorizer.acl.filename: "drpc-auth-acl.yaml"
drpc.authorizer.acl.strict: true

在conf目录下新建drpc-auth-acl.yaml文件,

配置内容如下:

drpc.authorizer.acl:
"exclamation":
"client.users":
- "alice"
- "kafka"
"invocation.user": "stormna"

说明,配置用户kafka和alice可以通过客户端调用drpc的方法exclamation,

client.users指定的用户可以执行的操作为operation:execute,

invocation.user可以执行的操作operation:failRequest,fetchRequest,result,

当drpc.authorizer.acl.strict为false时,

意为permissive宽容,

即没有配置权限控制的方法可以被任意用户执行,

而在配置文件中指定了控制权限的方法还需要匹配才能执行。

当drpc.authorizer.acl.strict为ture时,

只有在配置文件中的用户才能执行,

不在则拒绝,即为严格的白名单。

4.重启Storm集群

配置完成后重新启动storm集群,包括nimbus,drpc,

登陆Storm UI管理台可以看到新的配置项已经生效。

5.客户端验证

使用DRPCClientTest.java类中对于exclamation的客户端调用代码,

具体代码请参考Storm集群使用DRPC功能Version1.0.1的第7章节,

打成名称为drpctest.jar的jar包,

然后上传到Linux的storm用户下面,

执行如下测试命令:

java -jar drpctest.jar hi

未授权用户会抛出异常:

Exception in thread "main" AuthorizationException(msg:DRPC request 'execute' for 'unknown' user is not authorized)
at org.apache.storm.generated.DistributedRPC$execute_result$execute_resultStandardScheme.read(DistributedRPC.java:1231)
at org.apache.storm.generated.DistributedRPC$execute_result$execute_resultStandardScheme.read(DistributedRPC.java:1200)
at org.apache.storm.generated.DistributedRPC$execute_result.read(DistributedRPC.java:1134)
at org.apache.storm.thrift.TServiceClient.receiveBase(TServiceClient.java:86)
at org.apache.storm.generated.DistributedRPC$Client.recv_execute(DistributedRPC.java:106)
at org.apache.storm.generated.DistributedRPC$Client.execute(DistributedRPC.java:92)
at org.apache.storm.utils.DRPCClient.execute(DRPCClient.java:60)
at test.zte.storm.drpc.DRPCClientTest.main(DRPCClientTest.java:28)

登陆到kafka用户,

执行同样的测试命令:

java -jar drpctest.jar hi

正常返回结果:

input:hi, result:hi!

用户kafka执行成功,而storm执行失败,

是因为我们在drpc-auth-acl.yaml给kafka配置了权限,

而没有给storm用户权限。

Storm对DRPC权限控制Version1.0.1的更多相关文章

  1. 基于SqlSugar的开发框架循序渐进介绍(9)-- 结合Winform控件实现字段的权限控制

    字段的权限控制,一般就是控制对应角色人员对某个业务对象的一些敏感字段的可访问性:包括可见.可编辑性等处理.本篇随笔结合基于SqlSugar的开发框架进行的字段控制管理介绍. 在设计字段权限的时候,我们 ...

  2. Storm集群安装Version1.0.1开启Kerberos

    Storm集群安装,基于版本1.0.1, 同时开启Kerberos安全认证, 使用apache-storm-1.0.1.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 ...

  3. OAuth2.0 原理流程及其单点登录和权限控制

    2018年07月26日 07:21:58 kefeng-wang 阅读数:5468更多 所属专栏: Java微服务构架   版权声明:[自由转载-非商用-非衍生-保持署名]-转载请标明作者和出处. h ...

  4. 权限控制终于来了!Redis 6.0新特性——ACLs

    在2019年纽约的Redis Day上,Salvatore Sanfilippo(AKA Antirez)介绍了即将发布的Redis 6.0的新特性.以下是关于ACLs的内容. ACLs简介 在过去的 ...

  5. android:Android 6.0权限控制代码封装

    新建的Activity类可以继承这个Activity,这个类封装了关于新版的权限处理相关的代码 使用方法: package com.glsite.phone; import android.conte ...

  6. yii2.0 引入权限控制插件

    权限控制:"mdmsoft/yii2-admin": "~2.0" 教程:http://www.cnblogs.com/zyf-zhaoyafei/p/5825 ...

  7. Atlas 2.1.0 实践(4)—— 权限控制

    Atlas的权限控制非常的丰富,本文将进行其支持的各种权限控制的介绍. 在atlas-application.properties配置文件中,可以设置不同权限的开关. atlas.authentica ...

  8. AgileConfig轻量级配置中心1.3.0发布,支持多用户权限控制

    AgileConfig 当初是设计给我自己用的一个工具,所以只设置了一道管理员密码,没有用户的概念.但是很多同学在使用过后都提出了需要多用户支持的建议.整个团队或者整个公司都使用同一个密码来管理非常的 ...

  9. yii2.0权限控制 ACF权限

    ACF是一种通过yii\filters\AccessControl类来实现的简单授权 有两种角色 ?:未经认证的游客用户 @:已认证的用户 ACF可同过对角色设置权限控制访问 1)记得引入yii\fi ...

随机推荐

  1. String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?

    原理知识: 如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的.如果在函数中改变了副本的 值不会改变原始的值. 如果参数类型是引用类型,那 ...

  2. Nginx模块之nginx_upstream_check_module

    目录 一.介绍 二.使用 三.参数 一.介绍 大家都知道,前端nginx做反代,如果后端服务器宕掉的话,nginx是不能把这台realserver剔除upstream的,所以还会有请求转发到后端的这台 ...

  3. 如何查看电脑IP地址

    如何查看电脑的IP地址 win+r输入cmd回车,然后输入:ipconfig回车

  4. Mybatis中对象关系映射

    在实际开发中,实体类之间有一对一.一对多.多对多的关系,所以需要正确配置它们对应关系,Mybatis通过配置文件能够从数据库中获取列数据后自动封装成对象. 如:一个订单Orders类对应一个用户Use ...

  5. 总结Vue第二天:自定义子组件、父子组件通信、插槽

    总结Vue第二天:自定义子组件.父子组件通信.插槽 一.组件: 组件目录 1.注册组件(全局组件.局部组件和小demo) 2.组件数据存放 3.父子组件通信(父级向子级传递数据.子级向父级传递数据) ...

  6. js-fn函数返回一个引用变量的细节

    1.直接返回一个字面量对象 function fun1() { return { age:10, name:'adain' } a = fun1(); b = fun1(); b.age = 18 ; ...

  7. nim_duilib之virtualListbox用法(22)

    概述 本文将介绍virtualListbox的用法. 更多请参考源码. 一个样式 样式丑了点,勿喷. 重写函数 使用virtualListbox, 需要一个派生类(继承自基类VirtualListIn ...

  8. java源码——计算立体图形的表面积和体积

    计算球,圆柱,圆锥的表面积和体积. 利用接口实现. 上代码. Contants.java 常量存储类 package com.fuxuemingzhu.solidgraphics.contants; ...

  9. 【LeetCode】53. Maximum Subarray 最大子序和 解题报告(Python & C++ & Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 暴力解法 动态规划 日期 题目地址: https:/ ...

  10. 【LeetCode】845. Longest Mountain in Array 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双数组 参考资料 日期 题目地址:https://l ...