2017年8月30日水曜日

DeepSecurity の SOAP API を ruby で嗜む

概要

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 件のコメント:

コメントを投稿