Storm對DRPC許可權控制Version1.0.1
對Storm的DRPC進行許可權控制,
並且設計相應的測試驗證。
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使用者許可權。