ビュー:
以前のバージョンのDeep Securityで最初にリリースされたREST APIは引き続き使用できますが、廃止され、新機能は追加されません。可能であれば、 Server & Workload Protection APIを使用して、新機能と継続的なサポートを利用してください。

従来のREST APIを使用する場合

従来のREST APIが必要な機能を提供し、それらの機能が Server & Workload Protection APIでまだ提供されていない場合は、引き続き従来のREST APIを使用する必要があります。次の表は、 Server & Workload Protection APIで利用できるREST API機能をまとめたものです。
注意
注意
Server & Workload Protection APIには、エンドポイントが継続的に追加されています。この表の変更を定期的に確認してください。
カテゴリ
機能
Server & Workload Protection APIのサポート
認証
ログインとログアウト
セッションの説明と終了
管理者
管理者の作成、説明、一覧表示、変更、および削除
はい - 参照管理者APIレファレンス/参照情報の
ポリシー設定
ポリシーの不正プログラム対策設定の説明、変更、および削除
はい - 参照ポリシーの変更APIレファレンス/参照情報の
ポリシーの検索設定のリセット、説明、および変更
ポリシーのアプリケーションコントロール設定の説明と変更
はい - 参照ポリシーの変更APIレファレンス/参照情報の
ホスト (コンピュータ)
コンピュータの不正プログラム対策設定の説明、変更、および削除
はい - 参照コンピュータの変更APIレファレンス/参照情報の
コンピュータのスキャナ設定のリセット、説明、および変更
スマートフォルダの作成、削除、説明、一覧表示、変更、および同期
スマートフォルダ内のコンピュータを一覧表示する
RelayおよびRelayグループの一覧表示、無効化、説明、および変更
ホストグループのツリーの表示
はい - 参照コンピュータグループの一覧表示APIレファレンス/参照情報の
コンピュータのスキャナ設定の説明、変更、および削除
不正プログラム検索設定
不正プログラム検索設定の作成、説明、一覧表示、変更、および削除
はい - 参照不正プログラム対策の設定APIレファレンス/参照情報の
予約タスク
予約タスクの作成、削除、説明、変更、および一覧表示
はい - 参照予約タスクAPIレファレンス/参照情報の
予約タスクの受信者リストを変更する
はい - 参照してくださいスケジュールされたタスク> スケジュールされたタスクの変更 > リクエスト本文 > のgenerateReportTaskParameters APIレファレンス/参照情報
スクリプト
スクリプトの一覧表示
はい - 参照スクリプトAPIレファレンス/参照情報の
レポート
レポートテンプレートの一覧表示
はい - 参照レポートテンプレートAPIレファレンス/参照情報の
警告
アラートの説明と一覧表示
アラートの種類の説明、一覧表示、変更、およびリセット
アラートを消去し、単一のターゲットでアラートを消去します。
イベントベースタスク
イベントベースのタスクを作成、削除、および一覧表示する
はい - 参照イベントベースのタスクAPIレファレンス/参照情報の
役割
役割のホスト、ホストグループ、およびポリシーアクセスの追加、削除、および変更
役割権限の追加と削除
役割の作成、削除、説明、変更、および一覧表示
決済
AWS Marketplaceの課金レコードとインスタンスレートを一覧表示する
クラウド
AWSアカウントへの接続、接続の削除、変更、および説明
クラウドアカウントの一覧表示、作成、削除、説明、変更、および同期 (AWS以外)
アプリケーションコントロール
決定ログの説明、一覧表示、および取り消し
ルールセットの作成、削除、説明、および一覧表示
グローバルルールセットの説明、およびグローバルルールセットルールの追加と削除
アプリケーションドリフトとコンピュータドリフトの説明、一覧表示、および確認
ソフトウェアインベントリの作成、削除、説明、および一覧表示
信頼できるアップデートモード (メンテナンスモード) の説明と変更
IPS
SSL設定の作成、削除、変更、説明、および一覧表示
Connected Threat Defense
不審オブジェクトのリストの消去と変更
イベント
不正プログラム対策、変更監視、セキュリティログ監視、Webレピュテーション、およびアプリケーションコントロールの各イベントの一覧と説明
Syslog設定の一覧表示、作成、削除、説明、および変更
SAML
SAMLサービスプロバイダの説明
SAML IDプロバイダの一覧表示、作成、削除、説明、および変更
SAMLを使用して役割を引き受ける
診断
Managerとエージェントの診断パッケージを取得する
ライセンス
ライセンスステータスの説明とアクティベーションコードのアップデート
ニュースフィード
ニュースフィード項目の説明、一覧表示、および非表示
環境
プロキシの一覧表示、作成、削除、説明、および変更

REST APIを使用するための環境の設定

REST APIを使用して開発するための環境を準備するには、次のタスクを実行します。
  1. Deep Security Webサービス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. Server & Workload Protection コンソールで、次の場所に移動します。[管理] [ユーザ管理] [役割]
  2. [新規]をクリックします。
  3. [Workload Security Managerユーザインタフェースへのアクセスを許可] の選択を解除し、 [WebサービスAPIへのアクセスを許可]を選択します。
  4. 他のすべての設定が完了したら、 [保存]をクリックします。
  5. 詳細に従ってアカウントに参加するようユーザを招待するここ
  6. ユーザに必要なプロパティを指定します。 [役割] プロパティで、作成した役割を選択します。
  7. 新しいユーザアカウントのユーザ名とパスワードを書き留めます。

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

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

基本的な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を取得するには、/rest/authentication/login APIへのアクセスを許可されたユーザのユーザ名とパスワードを含むURL。

セッションの管理

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

提供されたJava REST APIクライアントを使用する

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

Javaコードの例

次のコード例では、Java REST APIクライアントを使用して Server & Workload Protectionで認証します。
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 Server & Workload Protection 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(); } }Server & Workload Protection 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コードの使用

サンプルの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 - アクセスは許可されていません
次のいずれかの理由:
  • 呼び出し元にWebサービスAPIへのアクセス権がありません。
  • 呼び出し元ユーザには、失敗したAPIを呼び出すためのアクセス権がありません。
  • 呼び出し元のSIDが無効です。
  • 呼び出し元はテナント内のユーザですが、このAPIはプライマリテナントユーザに限定されています。
404 - ページが見つかりません
次のいずれかの理由:
  • 呼び出し元が、REST APIの一部ではない無効なURLにアクセスしました。
  • 呼び出し元が、存在しないリソースを指定しました。たとえば、テナントをIDで削除しようとしましたが、指定されたIDが既存のテナントに対応していません。
405 Method Not Found
呼び出し元が、指定されたURLで許可されていないHTTPメソッドを指定しました。たとえば、HTTP POSTを使用して、GETアクセスを提供するAPIにアクセスします。
500 - 内部サーバエラー
次のいずれかの理由:
  • データベースエラーが発生しました。
  • その他の未処理のエラーが発生しました。

エラー応答

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クライアントフレームワーク」で説明されているように、サーバへの基礎となる接続を手動で解放して接続プールに戻す必要があります。例:
org.jboss.resteasy.client.ClientResponse&lt;?> clientResponse = (ClientResponse&lt;?>)apiObject.methodThatReturnsResponse(methodParameters); clientResponse.releaseConnection();

特別な考慮事項

クエリパラメータに日付を指定する

検索クエリで日付を指定する場合は、 RFC 822ただし、年は2桁ではなく4桁でエンコードする必要があります。 RFC1123 。たとえば、次のようにエンコードします。November 31 2012 at 3:45 PM Eastern Standard Timeとして31 Nov 2012 15:45:00 -0500
Javaでは、これらの日付は次を使用してエンコードできます。java.text.SimpleDateFormatおよび日付形式パターンdd MMM yyyy HH:mm:ss zzz
たとえば、DC5A4AA79326DF3E149A26EA2DA6B0C7の場合、次のURLはすべてのホスト保護情報をクエリします。November 31 2012 at 3:45 PM Eastern Standard Time 、日付エンコードのスペースはURLエンコードされています。%20 :
https://dsm.example.com:4119/rest/monitoring/usages/hosts/protection?sID=DC5A4AA79326DF3E149A26EA2DA6B0C7&from=31%20Nov%202012%2015:45:00%20-0500