对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. Template Metaprogramming in C++

    说实话,学习C++以来,第一次听说"Metaprogramming"这个名词. Predict the output of following C++ program. 1 #in ...

  2. Copy elision in C++

    Copy elision (or Copy omission) is a compiler optimization technique that avoids unnecessary copying ...

  3. SpringAOP简单例子

    这个只是个简单AOP例子,包括前置通知,后置通知,环绕通知,和目标对象.写这个例子的主要目标只是想让想学AOP的能更快地入门,了解一下如何去配置AOP里面的东东.目标对象的接口:IStudent.ja ...

  4. 【Python】【Module】hashlib

    用于加密相关的操作,代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import hashlib # ######## ...

  5. Linux下部署Java项目(jetty作为容器)常用脚本命令

    startup.sh #!/bin/bash echo $(basename $(pwd)) "jetty started" cd jetty nohup java -Xmx8g ...

  6. Go语言核心36讲(Go语言实战与应用二十四)--学习笔记

    46 | 访问网络服务 前导内容:socket 与 IPC 人们常常会使用 Go 语言去编写网络程序(当然了,这方面也是 Go 语言最为擅长的事情).说到网络编程,我们就不得不提及 socket. s ...

  7. Python enumerate():使用计数器简化循环

    摘要:当您需要计数和迭代中的值时,Pythonenumerate()允许您编写 Pythonicfor循环.最大的优点enumerate()是它返回一个带有计数器和值的元组,因此您不必自己增加计数器. ...

  8. 使用matplotlib中的bar函数绘制柱状图

    使用柱状图显示三日电影的票房信息 要显示的数据为2018年12月7日-9日四场电影的票房信息 四场电影分别为:无名之辈,狗十三,毒液:知名守卫者,憨豆特工3 2018年12月7日四场电影票房分别为:[ ...

  9. 可落地的DDD代码实践

    目录 前言 一.从六边形架构谈起 二.依赖倒置 三.DDD 代码分层 3.1 用户接口层 3.2 应用层 3.2 1 Response vs Exception 3.2.2 CQE vs DTO 3. ...

  10. php-正则邮箱验证及详解

    当前的邮箱格式有哪些//1.第1种是QQ邮箱,它的后缀名是,@qq, .com.// 2.第2种是网易邮箱后缀名是,@163.com或者,@126.com// 3.第3种是雅虎邮箱,后缀名是,@yah ...