對(duì)Storm的DRPC進(jìn)行權(quán)限控制蜂嗽,
并且設(shè)計(jì)相應(yīng)的測(cè)試驗(yàn)證抛虏。
1.集群安裝
請(qǐng)參考Storm集群安裝Version1.0.1
2.使用DRPC功能
請(qǐng)參考Storm集群使用DRPC功能Version1.0.1
預(yù)置如下數(shù)據(jù):
在Strom集群上面啟動(dòng)DRPC進(jìn)程博其,
并且提交了DRPC的topology,
方法名稱為exclamation迂猴。
3.開(kāi)啟DRPC的權(quán)限控制
在storm.yaml文件中開(kāi)啟DRPC的權(quán)限控制:
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文件慕淡,
配置內(nèi)容如下:
drpc.authorizer.acl:
"exclamation":
"client.users":
- "alice"
- "kafka"
"invocation.user": "stormna"
說(shuō)明,配置用戶kafka和alice可以通過(guò)客戶端調(diào)用drpc的方法exclamation沸毁,
client.users指定的用戶可以執(zhí)行的操作為operation:execute峰髓,
invocation.user可以執(zhí)行的操作operation:failRequest,fetchRequest,result傻寂,
當(dāng)drpc.authorizer.acl.strict為false時(shí),
意為permissive寬容儿普,
即沒(méi)有配置權(quán)限控制的方法可以被任意用戶執(zhí)行崎逃,
而在配置文件中指定了控制權(quán)限的方法還需要匹配才能執(zhí)行。
當(dāng)drpc.authorizer.acl.strict為ture時(shí)眉孩,
只有在配置文件中的用戶才能執(zhí)行个绍,
不在則拒絕,即為嚴(yán)格的白名單浪汪。
4.重啟Storm集群
配置完成后重新啟動(dòng)storm集群巴柿,包括nimbus,drpc死遭,
登陸Storm UI管理臺(tái)可以看到新的配置項(xiàng)已經(jīng)生效广恢。
5.客戶端驗(yàn)證
使用DRPCClientTest.java類中對(duì)于exclamation的客戶端調(diào)用代碼,
具體代碼請(qǐng)參考Storm集群使用DRPC功能Version1.0.1的第7章節(jié)呀潭,
打成名稱為drpctest.jar的jar包钉迷,
然后上傳到Linux的storm用戶下面,
執(zhí)行如下測(cè)試命令:
java -jar drpctest.jar hi
未授權(quán)用戶會(huì)拋出異常:
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用戶钠署,
執(zhí)行同樣的測(cè)試命令:
java -jar drpctest.jar hi
正常返回結(jié)果:
input:hi, result:hi!
用戶kafka執(zhí)行成功糠聪,而storm執(zhí)行失敗,
是因?yàn)槲覀冊(cè)赿rpc-auth-acl.yaml給kafka配置了權(quán)限谐鼎,
而沒(méi)有給storm用戶權(quán)限舰蟆。