元のバージョンの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を使用した開発環境を準備します。
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クライアントは指定されたコンピュータのみを表示できます。
- Workload Security コンソールで、 に進みます。
- [新規]をクリックします。
- [[Workload Security Managerユーザインタフェースへのアクセスを許可]の選択を解除し、[WebサービスAPIへのアクセスを許可]を選択します。
- 他の設定がすべて完了したら、[保存] をクリックします。
- ユーザをアカウントに招待する。
- ユーザに必要なプロパティを指定します。[Role]プロパティで、作成した役割を選択します。
- 新しいユーザアカウントのユーザ名とパスワードを書き留めておきます。
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/logout
URLを呼び出してください。 - セッションは、設定可能な期間が経過した後にタイムアウトします。ユーザごとに許可される同時セッション数とセッションタイムアウトを変更するには、 を選択します。
以下の例の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プロジェクトの一部です。
- Eclipseで、 をクリックします。
- インポートソースとして、 を選択します。
- [参照]をクリックし、Deep Security Web Services SDKのサンプルフォルダをルートとして選択します。
- [REST APIサンプル]プロジェクトが選択されていることを確認し、[完了] をクリックします。
Eclipse内でサンプルファイルを実行するには、ファイルを開き、
をクリックします。サンプルには、[実行構成]画面で設定する必要があるコマンドライン引数が必要です。HTTPステータスコード
REST APIでは、標準HTTPステータスコードを使用してリクエストのステータスが返されます。次の表は、使用されるレスポンスコードと、それらが返される状況を示しています。
HTTPステータスコード
|
意味
|
200 OK
|
要求が正常に終了しました。
|
400 Bad Request
|
呼び出し元が、呼び出しに必要なすべてのデータを指定していませんでした。
|
401 Unauthorized
|
呼び出し元のSIDが非アクティブなためタイムアウトしました。認証プロセスを繰り返す必要があります。
|
403 Forbidden
|
次のいずれかの理由が考えられます。
|
404 Not Found
|
次のいずれかの理由が考えられます。
|
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