元のバージョンのDeep Securityで元々リリースされていたREST APIは引き続き使用できますが、非推奨となっており、新機能は追加されません。可能な場合は、 Workload Security APIを使用して、新機能と継続的なサポートを利用する必要があります。
レガシーREST APIで必要な機能が提供され、それらの機能がWorkload Security APIでまだ提供されていない場合、引き続きレガシーREST APIを使用する必要があります。次の表は、Workload Security APIにおけるREST APIの機能の概要を示しています。
エンドポイントが Workload Security APIに継続して追加されています。定期的にこのテーブルの変更を確認してください。
カテゴリ
能力
Workload Security APIのサポート
認証
ログインしてログアウトする
セッションを記述して終了する
使用不可
管理者
管理者の作成、記述、一覧表示、変更、および削除
はい - APIレファレンスの管理者を参照してください
ポリシー設定
ポリシーの 不正プログラム対策 設定を記述、変更、および削除する
はい - APIレファレンスのポリシーの変更を参照してください
ポリシーの検索設定をリセット、記述、および変更する
使用不可
ポリシーの アプリケーションコントロール 設定の説明と変更
はい - APIレファレンスのポリシーの変更を参照してください
ホスト(コンピュータ)
コンピュータの 不正プログラム対策 設定を記述、変更、および削除する
はい - APIレファレンスのコンピュータの変更を参照してください
コンピュータのスキャナ設定をリセット、記述、および変更する
使用不可
スマートフォルダの作成、削除、説明、リスト作成、変更、および同期
使用不可
スマートフォルダ内のコンピュータを一覧表示する
使用不可
リレーおよびリレーグループの表示、無効化、説明、および変更
使用不可
ホストグループのツリーをリストします。
はい - APIレファレンスのコンピュータグループの一覧を参照してください
コンピュータの検索設定を記述、変更、および削除する
使用不可
不正プログラム検索設定
不正プログラム検索設定の作成、記述、表示、変更、および削除
はい - APIレファレンスの不正プログラム対策の設定を参照してください
予約タスク
予約タスクの作成、削除、記述、変更、およびリスト表示
はい - APIレファレンスのスケジュールされたタスクを参照してください
予約タスクの受信者リストを変更する
はい - 予約タスク > 予約タスクの変更 > リクエスト本文 > generateReportTaskParameters を参照してください。詳細は APIレファレンス/参照情報 をご覧ください
スクリプト
リストスクリプト
はい - APIレファレンスのスクリプトを参照してください
レポート
レポートテンプレートのリスト表示
はい - APIレファレンスのレポートテンプレートを参照してください
アラート
アラートの説明とリスト
使用不可
アラートの種類の説明、表示、変更、およびリセット
使用不可
アラートを消去して、1つのターゲットに対してアラートを閉じます。
使用不可
イベントベースタスク
イベントベースのタスクの作成、削除、およびリスト表示
はい - APIレファレンスのイベントベースのタスクを参照してください
役割
役割のホスト、ホストグループ、およびポリシーへのアクセスの追加、削除、および変更
使用不可
役割の追加と削除権限
使用不可
ロールの作成、削除、記述、変更、およびリスト表示
使用不可
課金
AWS Marketplace請求レコードとインスタンスレートのリスト
使用不可
クラウド
AWSアカウントへの接続、削除、変更、および接続の説明
使用不可
クラウドアカウントのリスト表示、作成、削除、記述、変更、および同期(非AWS)
使用不可
アプリケーションコントロール
決定ログの説明、リスト、および元に戻す
使用不可
ルールセットの作成、削除、記述、およびリスト表示
使用不可
グローバルルールセットを記述し、グローバルルールセットルールを追加および削除します。
使用不可
アプリケーションのドリフトとコンピュータのドリフトを記述、リスト表示、およびレビューする
使用不可
ソフトウェアインベントリの作成、削除、記述、およびリスト表示
使用不可
信頼済みアップデートモードの説明と変更(メンテナンスモード)
使用不可
侵入防御
SSL設定の作成、削除、変更、記述、およびリスト表示
使用不可
接続された脅威の防御
不審オブジェクトのリストをクリアして変更する
使用不可
イベント
不正プログラム対策、変更監視、セキュリティログ監視、Webレピュテーション、およびアプリケーションコントロールイベントのリストと説明
使用不可
Syslog設定の表示、作成、削除、記述、および変更
使用不可
SAML
SAMLサービスプロバイダの説明
使用不可
SAML IDプロバイダのリスト作成、作成、削除、記述、および変更
使用不可
SAMLを使用するロールを仮定する
使用不可
診断
マネージャとエージェントの診断パッケージを取得する
使用不可
ライセンス
ライセンスのステータスの説明とアクティベーションコードのアップデート
使用不可
ニュースフィード
ニュースフィード項目の説明、表示、および消去
使用不可
Environment
プロキシのリスト作成、削除、記述、および変更
使用不可

REST APIを使用するように環境を設定する

次のタスクを実行して、REST APIを使用した開発環境を準備します。
  1. Deep Security Web Services SDKをダウンロード
  2. REST APIクライアントが使用できるユーザアカウントを作成する

WebサービスSDKのダウンロード

WebサービスSDK ZIPファイルをダウンロードして解凍します。
ZIPファイルには、REST APIドキュメント、Javaクライアントアプリケーションの開発に役立つJavaクライアントライブラリ、およびこのライブラリを使用するサンプルが含まれています。別の言語を使用している場合、またはJavaを使用していて独自のRESTクライアントテクノロジを使用する場合は、REST APIリファレンスドキュメントを使用してAPI呼び出しの構文を学習してください。このリファレンスでは、各オペレーションについて、HTTPパスとオペレーション (GET、PUTなど) を含むHTTP構文、およびAPIコールとの間でやり取りされるデータの構造について説明します。
コンテンツの完全なリストやその他の重要な情報については、ZIPのReadmeファイルを参照してください。

Webサービスの役割とユーザを作成する

Deep Security WebサービスAPIエンドポイント(SOAPおよびRESTの両方)にアクセスするための権限と、REST APIで使用するその他の機能を持つ役割を作成します。セキュリティ上の理由から、API呼び出し専用の役割とユーザを作成する必要があります。
REST APIでは、コンピュータ権限、セキュリティプロファイル権限、およびユーザ権限など、すべての役割アクセスコントロールが適用されます。たとえば、特定のコンピュータを表示できるWebサービスAPIの役割を作成する場合、そのユーザとして認証されるREST APIクライアントは指定されたコンピュータのみを表示できます。
  1. Workload Security コンソールで、[管理][ユーザ管理][ロール] に進みます。
  2. [新規]をクリックします。
  3. [[Workload Security Managerユーザインタフェースへのアクセスを許可]の選択を解除し、[WebサービスAPIへのアクセスを許可]を選択します。
  4. 他の設定がすべて完了したら、[保存] をクリックします。
  5. ユーザをアカウントに招待する
  6. ユーザに必要なプロパティを指定します。[Role]プロパティで、作成した役割を選択します。
  7. 新しいユーザアカウントのユーザ名とパスワードを書き留めておきます。

REST APIクライアントアプリケーションの開発

APIのドキュメントに従って、任意のプログラミング言語を使用して、REST APIを呼び出すコードを記述します。XMLまたはJSONエンコードをサポートするプログラミング言語、およびHTTPプロトコルとHTTPSプロトコルを使用できます。

Basic APIへのアクセス

すべてのREST APIへのアクセスは、REST APIエンドポイント: https://app.deepsecurity.trendmicro.com/restを通じて行われます。
REST APIでは標準のHTTPメカニズムが使用されるため、HTTP GETを使用した認証を行わずに一部の操作にアクセスできるため、Webブラウザからこれらのメソッドにアクセスできます。たとえば、次のURLはREST APIバージョンをブラウザに返します。
https://dsm.example.com:4119/rest/apiVersion
ただし、ほとんどのREST API呼び出しには認証が必要です。呼び出しを認証するには、GETおよびDELETEメソッドのクエリパラメータとして、またはPUTおよびPOSTメソッドのメッセージ本文にセッション識別子 (SID) を提供します。セッションIDを取得するには、APIにアクセスすることが許可されているユーザのユーザ名とパスワードを使用して、/rest/authentication/login URLを呼び出します。

セッションを管理する

セッションを管理するには、次の処理を実行します。
  • 必要がなくなったらAPIセッションを終了してください。Workload Securityは同時にアクティブにできるセッションの数を制限しています。アプリケーションは最大同時セッション数に達しないようにセッションを終了する必要があります。セッションを終了するには/rest/authentication/logoutURLを呼び出してください。
  • セッションは、設定可能な期間が経過した後にタイムアウトします。ユーザごとに許可される同時セッション数とセッションタイムアウトを変更するには、[管理][システム設定][セキュリティ]を選択します。
以下の例のJavaコードは、このプロセスを示しています。

提供されているJava REST APIクライアント

提供されたJava REST APIクライアントは、RESTEasy Client FrameworkおよびApache HTTPComponentsプロジェクトに基づいています。このフレームワークは、JAX-RSアノテーションでマークされたJavaインターフェースを取り込み、Workload Securityと通信できるインターフェースの実装を生成します。Java REST APIクライアントは、オブジェクトのシリアライズおよびデシリアライズ、HTTP URL、およびHTTPメソッドをすべて処理します。
Java REST APIクライアントを使用するには、JARファイルをアプリケーションのクラスパス上のlibフォルダに含めます。JARファイルには他のサードパーティライブラリへの依存関係があります。詳細については、サンプルディレクトリ内のEclipseプロジェクトのpom.xmlファイルを参照してください。
すべてのAPIのインターフェースはJavaパッケージcom.trendmicro.ds.platform.rest.apiにあります。APIに送信またはAPIから受信されるすべてのオブジェクトは、Javaパッケージcom.trendmicro.ds.platform.rest.objectおよびサブパッケージにあります。

Javaコードの例

次のサンプルコードでは、Java REST APIクライアントを使用して Workload Securityで認証を行います。
import javax.ws.rs.core.Response.Status;

import org.jboss.resteasy.client.ClientResponse;
import org.jboss.resteasy.client.ClientResponseFailure;
import org.jboss.resteasy.client.ProxyFactory;
import org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor;
import org.jboss.resteasy.plugins.providers.RegisterBuiltin;
import org.jboss.resteasy.spi.ResteasyProviderFactory;

import com.trendmicro.ds.platform.rest.api.IAuthenticationAPI;
import com.trendmicro.ds.platform.rest.message.error.ErrorMessage;
import com.trendmicro.ds.platform.rest.object.DSCredentials;

public class AuthenticateSample {

	public static void main(String[] args) {
		// URL for the REST API. Change this as appropriate. 
		String restApiUrl = "https://10.0.0.5:4119/rest";
		
		// The user name to use for authentication. Change this as appropriate.
		String username = "admin";
		
		// The user's password. Change this as appropriate.
		String password = "supersecretpassword";

		// Variable to store the session identifier (SID).
		String sID = null;

		// RESTEasy client framework initialization that only needs to be done once per VM
		RegisterBuiltin.register(ResteasyProviderFactory.getInstance());

		// An object that will execute HTTP requests
		ApacheHttpClient4Executor executor = new ApacheHttpClient4Executor();

		// Create the object that will communicate with the authentication API.
		IAuthenticationAPI authClient = ProxyFactory.create(IAuthenticationAPI.class, restApiUrl, executor);

		// Create the object to pass to the authentication call.
		DSCredentials credentials = new DSCredentials();
		credentials.setUserName(username);
		credentials.setPassword(password);

			try {
				System.out.println("Attempting to authenticate to Workload Security REST API...");
				sID = authClient.login(credentials);
	
				System.out.println("Authentication successful.");
				System.out.println("Authentication session ID string received: " + sID);

			} catch (ClientResponseFailure e) {
				// This is a special type of exception that means the server threw
				// an exception because there was a problem with the credentials.
				// It's important to handle these exceptions explicitly or the
				// connection to the server won't be released back in to the
				// underlying connection pool, meaning any subsequent API calls would fail.
				// See the RESTEasy Client Framework documentation for more details. 
				ClientResponse<?> clientResponse = e.getResponse();

				// Try to parse the error response in to an instance of the special
				// ErrorMessage class and display the result.
				Status status = clientResponse.getResponseStatus();
				System.out.println("Server returned error status code " + status.getStatusCode() + " (" + status + ")");
				ErrorMessage errorMessage = clientResponse.getEntity(ErrorMessage.class);
				System.out.println("Returned error message: " + errorMessage.getMessage());

			} catch (Exception e) {
				// Some other error happened, most likely related to network communication problems.
				System.out.println("There was an error during authentication.");
				e.printStackTrace();
			
			} finally {
				if (sID != null) {
					// Make sure to always log out.
					System.out.println("");
					System.out.println("Ending session...");
					authClient.endSession(sID);
					System.out.println("End session successful.");
					// make sure the session ID isn't accidentally re-used.
					sID = null;
				}
			}
		
			// Cleanup: force the HTTP Client to close any open sockets
			executor.close();

	}
	
}

サンプルJavaコードの使用

Sample Javaコードはsamplesフォルダに含まれています。サンプルは、EclipseワークスペースにインポートできるEclipseプロジェクトの一部です。
  1. Eclipseで、[ファイル][インポート]をクリックします。
  2. インポートソースとして、[一般][既存プロジェクトをワークスペースに] を選択します。
  3. [参照]をクリックし、Deep Security Web Services SDKのサンプルフォルダをルートとして選択します。
  4. [REST APIサンプル]プロジェクトが選択されていることを確認し、[完了] をクリックします。
Eclipse内でサンプルファイルを実行するには、ファイルを開き、[実行][別のユーザーとして実行][Javaアプリケーション] をクリックします。サンプルには、[実行構成]画面で設定する必要があるコマンドライン引数が必要です。

HTTPステータスコード

REST APIでは、標準HTTPステータスコードを使用してリクエストのステータスが返されます。次の表は、使用されるレスポンスコードと、それらが返される状況を示しています。
HTTPステータスコード
意味
200 OK
要求が正常に終了しました。
400 Bad Request
呼び出し元が、呼び出しに必要なすべてのデータを指定していませんでした。
401 Unauthorized
呼び出し元のSIDが非アクティブなためタイムアウトしました。認証プロセスを繰り返す必要があります。
403 Forbidden
次のいずれかの理由が考えられます。
  • 呼び出しには、WebサービスAPIへのアクセス権がありません。
  • 呼び出し元のユーザは、失敗したAPIを呼び出すためのアクセス権を持っていません。
  • 発信者のSIDが無効です。
  • 呼び出し元はテナント内のユーザですが、APIはプライマリテナントユーザのみに制限されています。
404 Not Found
次のいずれかの理由が考えられます。
  • 呼び出し元がREST APIに含まれていない無効なURLにアクセスしました。
  • 呼び出し側が存在しないリソースを指定しました。たとえば、IDごとにテナントを削除しようとしましたが、指定されたIDが既存のテナントに一致しません。
405 Method Not Found
呼び出し側が、指定されたURLに対して許可されていないHTTPメソッドを指定しました。たとえば、HTTP POSTを使用してGETアクセスを提供するAPIにアクセスします。
500 Internal Server Error
次のいずれかの理由が考えられます。
  • データベースエラーが発生しました。
  • 未処理のエラーが発生しました。

エラー応答

APIコールが200 OK以外のステータスコードを返すと、レスポンス本文には通常、次の例のようなJSONコードが含まれます。
{
   "error": {
      "message": "The Activation Code KA47-R947M-KDLUZ-A8WLF-WM6A3-LOL is invalid."
   }
}
一部のコールには、次の例のようにJSONではなくXMLコードが含まれます。
<error>
	<message>Error message string</message>
</error>
XMLレスポンス本文の使用を強制するには、リクエストにAcceptヘッダーを追加し、値をapplication/xmlに設定します。
このエラーメッセージは、問題のデバッグに役立ちますが、アプリケーションのエンドユーザにプレゼンテーションするのには適していません。

javax.ws.rs.core.Responseを返すAPI呼び出し

一部のAPI呼び出しは、javax.ws.rs.core.Response型のオブジェクトを返すと記載されています。これらの呼び出しは、HTTPステータスコードを返すだけと考えることができます。
提供されたJava REST APIクライアントを使用する場合、その呼び出しの結果を無視せずに取得することが重要です。Responseオブジェクトを取得したら、RESTEasy Client Frameworkで説明されているように、サーバへの接続を手動で接続プールに戻す必要があります。例えば:
org.jboss.resteasy.client.ClientResponse<?> clientResponse = (ClientResponse<?>)apiObject.methodThatReturnsResponse(methodParameters);
clientResponse.releaseConnection();

特別な考慮事項

クエリパラメータ

検索クエリで日付を指定する場合、RFC 822のセクション5に記載されている日付エンコーディングルールを使用してエンコードしますが、RFC 1123のセクション5.2.14に従って年は2桁ではなく4桁でエンコードする必要があります。例えば、2012年11月31日 午後3:45 東部標準時31 Nov 2012 15:45:00 -0500としてエンコードします。
Javaでは、これらの日付はjava.text.SimpleDateFormatを使用し、日付形式パターンdd MMM yyyy HH:mm:ss zzzでエンコードできます。
たとえば、セッションIDがDC5A4AA79326DF3E149A26EA2DA6B0C7の場合、次のURLは2012年11月31日、3:45 PM東部標準時以降のすべてのホスト保護情報を照会します。ただし、日付エンコード内のスペースは%20でエンコードされています。
https://dsm.example.com:4119/rest/monitoring/usages/hosts/protection?sID=DC5A4AA79326DF3E149A26EA2DA6B0C7&from=31%20Nov%202012%2015:45:00%20-0500