Storm對DRPC權限控制Version1.0.1

對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用戶權限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章