概要
DeepSecurityManager には REST と SOAP の API があります
現状だと REST よりも SOAP の方ができることが多いです
公式で Java のライブラリが提供されているのですが Java でコールする気にはなれなかったので Ruby からコールしてみました
SOAP 用の Ruby ライブラリは Savon というライブラリを利用しています
環境
- Ubuntu 16.04
- ruby 2.3.1p112
- gem 2.5.1
- Savon 2.11.2
- DeepSecuritManager 10.0
事前準備
事前に DeepSecurityManager で API を有効にする必要があります
Administration -> System Settings -> Advanced
で「SOAP Web Service API」と「Status Monitoring API」を Enabled にします
Status Monitoring API は REST API で今回は使用しないので Enabled にしないでも大丈夫です
ライブラリインストール
- apt install zlib1g-dev
- bundle init
- vim Gemfile
gem "savon"
- bundle install
で vendor 配下にインストールされました
サンプル
まずは DeepSecurityManager にアクセスして wsdl の情報を表示してみます
- vim show_wsdl.rb
require 'savon'
client = Savon.client(
:wsdl => 'https://192.168.100.8:4119/webservice/Manager?WSDL',
:ssl_verify_mode => :none
)
puts client.operations
- bundle exec ruby show_wsdl.rb
wsdl は DeepSecurityManager 自体が配信しているのでそれを指定します
今回は SSL 通信ではないので :ssl_verify_mode
を :none
に設定します
これで実行すると SOAP API のオペレーションの一覧がずらーっと表示されると思います
190 ほどあると思います
認証してみる
ユーザ名とパスワードで認証してみましょう
- vim auth.rb
require 'savon'
client = Savon.client(
:wsdl => 'https://192.168.100.8:4119/webservice/Manager?WSDL',
:ssl_verify_mode => :none
)
response = client.call(:authenticate, message: { username: 'username', password: 'password'})
puts response.body[:authenticate_response][:authenticate_return]
- bundle exec ruby auth.rb
で他の SOAP API をコールするためのセッショントークンを取得することができます
ポリシーの一覧を取得する
ポリシーの一覧を取得してみましょう
- vim get_policies.rb
require 'savon'
client = Savon.client(
:wsdl => 'https://192.168.100.8:4119/webservice/Manager?WSDL',
:ssl_verify_mode => :none
)
response = client.call(:authenticate, message: { username: 'username', password: 'password'})
sid = response.body[:authenticate_response][:authenticate_return]
response = client.call(:security_profile_retrieve_all, message: { sID: sid })
ret = response.body
ret[:security_profile_retrieve_all_response][:security_profile_retrieve_all_return].each { |r|
puts r[:id]
puts r[:name]
puts r[:description]
}
- bundle exec ruby get_policies.rb
でポリシーの一覧から名前と説明を取得することができます
最後に
DeepSecurity の SOAP API を Ruby からコールしてみました
今回は Savon というライブラリを使用しましたが Ruby には他にも SOAP API 用のライブラリがあります
はじめは soap4r というコードジェネレータにもなるツールを使っていたのですがいろいろとエラーが出たのでやめました
最終的には Savon に落ち着きました
現在もメンテナンスはされていそうです
DeepSecurity の SOAP API はかなりたくさんあるのですが、WSDL しか情報がないのでどの API がどの操作に対応しているのか探すのが結構たいへんです
オペレーション名から何ができるか推測して、必要なパラメータを WSDL から生成して実際にコールするしか現状ではなさそうです
0 件のコメント:
コメントを投稿