Trend Micro Deep SecurityのREST APIを試してみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは、藤本です。

先日、Trend Micro Deep SecurityのAPIを試してみたでSOAP API、SOAP APIを利用したSDKをご紹介しました。その中でREST APIも実装中と記載しましたが、同僚よりREST APIのドキュメントのパスを教えていただいたので早速試してみました。

概要

Deep SecurityはAPIの方式として、SOAP / REST両方のAPIを提供しています。SOAP APIは規約を理解していないと使いづらいし、学習コストも高いので、直感で扱いやすい(人が理解しやすい)REST APIが利用できるのであれば、REST APIを使いたいです。ただ現在はSOAP APIの方が操作可能な機能が充実しているため、利用されている方はSOAP APIが多いでしょうか。REST APIは今後のAPI拡充に期待します!

REST APIが対応している機能は以下となります。

  • ログイン/ログアウト
  • Cloud Account管理
  • イベント取得
  • ステータスモニタリング
  • テナント管理
  • 使用状況モニタリング

ドキュメントはこちらのページの対象バージョンのWebService APIのzipからダウンロードできます。

zipを展開すると以下のようなコンテンツが含まれています。

  • SOAP API
    • PDFドキュメント
    • サンプルコード(Java)
    • ライブラリ
  • REST API
    • HTMLドキュメント一式
    • サンプルコード(Java)
    • ライブラリ

やってみた

今回はREST APIのHTMLドキュメントを参考にcurlコマンドを利用して、REST APIをコールします。

環境

今回はDSaaSを利用して検証しています。

  • Deep Seecurity Manager : 10.0.2192

APIの有効化

SOAP API同様、REST APIを利用する場合もAPIを有効化したRoleを持つユーザーを用意する必要があります。

手順はTrend Micro Deep SecurityのAPIを試してみたのAPIの有効化をご参照ください。

REST APIによるログイン/ログアウト

curlコマンドを利用して、REST APIのログインAPIをコールします。

ドキュメントページからHTTPメソッド、URL、パラメータを確認します。

Resource_login 2

XML_element_dsCredentials

HTTPメソッドはPOST、URLはDeep Security ManagerのエンドポイントにAPIのパスを加えたhttps://app.deepsecurity.trendmicro.com/rest/authentication/login、パラメータはテナント名(DSaaSの場合)、ユーザー名、パスワードをXML形式、もしくはJSON形式で指定します。パラメータの形式はContent-Typeヘッダーにより切り替えることが可能です。

XML形式の場合
# curl -XPOST -H "Content-Type: application/xml" https://app.deepsecurity.trendmicro.com/rest/authentication/login -d '<dsCredentials>
  <password>XXXXXXXXXXXXXXXXXX</password>
  <tenantName>XXXXXXXXXXXXXXXXXX</tenantName>
  <userName>apiuser</userName>
</dsCredentials>'
XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:9E388065885079EA71E9EB806FC78AFF
JSON形式の場合
# curl -XPOST -H "Content-Type: application/json" https://app.deepsecurity.trendmicro.com/rest/authentication/login -d '{
  "dsCredentials": {
    "password": "XXXXXXXXXXXXXXXXXX",
    "tenantName": "XXXXXXXXXXXXXXXXXX",
    "userName": "apiuser"
  }
}'
XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:CBD25E948044E0D63684254267742435

レスポンスはセッションIDが返ってきます。
以降の操作はセッションIDを利用します。

ログアウトはHTTPメソッドにDELETE、パスは/authentication/logout、パラメータはクエリストリングでsIDにセッションIDを指定します。

# curl -XDELETE "https://app.deepsecurity.trendmicro.com/rest/authentication/logout?sID=XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:9E388065885079EA71E9EB806FC78AFF"
OK

レスポンスはOKのメッセージが返ってきます。

Cloudアカウント情報取得

Deep Security Managerと連携しているCloudアカウント情報を取得します。今回はAWSアカウントと連携している情報を例に取得します。レスポンスはXML形式、もしくはJSON形式で取得します。形式はAcceptヘッダにより切り替えます。指定しない場合、APIによって挙動が異なるのでご注意ください。

XML形式の場合
curl -H "Content-Type: application/xml" "https://app.deepsecurity.trendmicro.com/rest/cloudaccounts/26?sID=XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:CBD25E948044E0D63684254267742435"
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><cloudAccount><cloudAccountId>26</cloudAccountId><cloudRegion>amazon.cloud.region.key.6</cloudRegion><cloudType>AMAZON</cloudType><description>ap-northeast-1</description><name>アジアパシフィック (東京)</name><realTimeSynchronization>true</realTimeSynchronization></cloudAccount>
JSON形式の場合
# curl -H "Accept: application/json" "https://app.deepsecurity.trendmicro.com/rest/cloudaccounts/26?sID= XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX:CBD25E948044E0D63684254267742435"
{"cloudAccount":{"cloudAccountId":26,"cloudRegion":"amazon.cloud.region.key.6","cloudType":"AMAZON","description":"ap-northeast-1","name":"アジアパシフィック (東京)","realTimeSynchronization":true}}

このようにアカウントのプロバイダ情報やアカウントのリージョン情報をXML形式、もしくはJSON形式で取得します。

まとめ

いかがでしたでしょうか?
SOAP APIと違って、URLのパスやパラメータが明確で直感的にAPIをコールできました。またJSONでやり取りできるのでプログラムに組み込みやすいのも嬉しいです。

参考サイト