檢視次數:
最初在先前版本的 Deep Security 中發布的 REST API 仍然可用,儘管它已被棄用且不會添加新功能。當可能時,您應該使用 Server & Workload Security保護 API 來利用新功能和持續的技術支援中心。

何時使用傳統 REST API

如果傳統的 REST API 提供了您所需的功能,而這些功能尚未在 Server & Workload Security保護 API 中提供,您應該繼續使用傳統的 REST API。下表總結了 Server & Workload Security保護 API 中 REST API 功能的可用性。
注意
注意
端點不斷被添加到Server & Workload Security保護 API。請定期檢查此表以了解變更。
類別
功能
Server & Workload Security保護 API 技術支援中心
驗證
登入和登出
描述並結束會話
不可用
管理員
建立、描述、列出、修改和刪除管理員
是 - 請參閱 API 參考中的 管理員
政策設定
描述、修改和刪除政策的惡意程式防護設定
是 - 請參閱 API 參考中的 修改政策
重置、描述和修改政策的掃描器設定
不可用
描述和修改政策的 Application Control 設定
是 - 請參閱 API 參考中的 修改政策
主機(電腦)
描述、修改和刪除電腦防護的惡意程式防護設定
是 - 請參閱 API 參考中的 修改電腦防護
重置、描述和修改電腦防護的掃描器設定
不可用
建立、刪除、描述、列出、修改和同步智慧資料夾
不可用
列出智慧資料夾中的電腦
不可用
列出、關閉、描述和修改中繼和中繼群組
不可用
列出主機群組樹
是 - 請參閱 API 參考中的 列出電腦防護群組
描述、修改和刪除電腦防護掃描器設定
不可用
惡意程式掃瞄設定
建立、描述、列出、修改和刪除惡意程式掃瞄配置
是 - 請參閱 API 參考中的 惡意程式防護設定
排程任務
建立、刪除、描述、修改和列出排程任務
是 - 請參閱 API 參考中的 排程任務
修改排程任務的收件者清單
是 - 請參閱 排程任務 > 修改排程任務 > 請求主體 > generateReportTaskParameters 於 API 參考
腳本
列出腳本
是 - 請參閱 API 參考中的 腳本
報告
列出報告範本
是 - 請參閱 API 參考中的 報告範本
警報
描述和列出警報
不可用
描述、列出、修改和重置警報類型
不可用
解除警報,並解除單一目標的警報
不可用
基於事件的任務
建立、刪除和列出基於事件的任務
是 - 請參閱 API 參考中的 事件基礎任務
角色
新增、刪除和修改角色的主機、主機群組和策略存取權限
不可用
新增和刪除角色權限
不可用
建立、刪除、描述、修改和列出角色
不可用
計費
列出 AWS Marketplace 計費記錄和實例費率
不可用
雲端
連接到 AWS 帳戶、刪除、修改和描述連接
不可用
列出、建立、刪除、描述、修改和同步雲端帳戶(非 AWS)
不可用
Application Control
描述、列出和撤銷決策日誌
不可用
建立、刪除、描述和列出規則集
不可用
描述全域規則集,並新增和刪除全域規則集規則
不可用
描述、列出和審查應用程式漂移和電腦防護漂移
不可用
建立、刪除、描述和列出軟體清單
不可用
描述和修改受信任的更新模式(維護模式)
不可用
入侵防護
建立、刪除、修改、描述和列出 SSL 配置
不可用
連接安全威脅防禦
清除並修改可疑物件清單
不可用
事件
列出並描述惡意程式防護、完整性監控、日誌檢查、網頁信譽評等和Application Control事件
不可用
列出、建立、刪除、描述和修改 Syslog 配置
不可用
SAML
描述 SAML 服務提供者
不可用
列出、建立、刪除、描述和修改 SAML 身分提供者
不可用
使用 SAML 承擔角色
不可用
診斷
獲取管理員和代理診斷包
不可用
授權
描述授權狀態並更新啟動碼
不可用
新聞動態
描述、列出和忽略新聞推送項目
不可用
環境
列出、建立、刪除、描述和修改 Proxy
不可用

將您的環境設置為使用 REST API

執行以下任務以準備您的環境以使用 REST API 進行開發:
  1. 下載 Deep Security Web Services SDK
  2. 建立 REST API 用戶端可以使用的使用者帳號

下載 Web Services SDK

下載 Web Services SDK ZIP 檔案並解壓縮:
ZIP 檔案包含 REST API 文件、協助開發 Java 用戶端應用程式的 Java 用戶端庫,以及使用該庫的範例。如果您使用不同的語言,或者您使用 Java 並希望使用您自己的 REST 用戶端技術,請使用 REST API 參考文件來學習 API 調用的語法。對於每個操作,參考文件提供 HTTP 語法,包括 HTTP 路徑和操作(GET、PUT 等),以及傳遞到或從 API 調用的資料結構描述。
請參閱 ZIP 的自述文件以獲取完整的內容列表和其他重要資訊。

建立 Web 服務角色和使用者

建立一個具有存取 Deep Security 網頁服務 API 端點(包括 SOAP 和 REST)以及您想要與 REST API 一起使用的任何其他功能的權限的角色。出於安全原因,您應該專門為您的 API 呼叫建立一個角色和一個使用者。
REST API 強制執行所有角色存取控制,例如電腦防護權限、安全性設定檔權限和使用者權限。例如,當您為 Web 服務 API 建立一個允許使用者查看特定電腦防護的角色時,作為該使用者進行身份驗證的 REST API 用戶端只能查看指定的電腦防護。
  1. Server & Workload Security保護 主控台中,依次選擇 Administration User Management Roles
  2. 點選 New
  3. 取消選取Allow Access to Workload Security Manager User Interface並選取Allow Access to Web Service 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 訪問,這些方法可以從網頁瀏覽器訪問。例如,以下 URL 將返回 REST API 版本到瀏覽器:
https://dsm.example.com:4119/rest/apiVersion
然而,大多數 REST API 呼叫需要驗證。要驗證呼叫,您需要提供會話識別碼 (SID),可以作為 GET 和 DELETE 方法的查詢參數,或在 PUT 和 POST 方法的訊息主體中提供。要獲取會話 ID,請使用允許存取 API 的使用者名稱和密碼呼叫 /rest/authentication/login URL。

管理您的會話

請採取以下行動來管理您的工作階段:
  • 當 API 會話不再需要時終止它們。Server & Workload Security保護 限制同一時間內可以啟動的會話數量。您的應用程式應該終止其會話以避免達到最大同時會話數量。調用 /rest/authentication/logout URL 來結束會話。
  • 會話在可配置的時間段後逾時。要更改每個用戶允許的並發會話數量和會話逾時,請轉到Administration System Settings Security
以下的 範例 Java 程式碼 說明了這個過程。

使用提供的 Java REST API 客戶端

所提供的 Java REST API 客戶端基於 RESTEasy 客戶端框架Apache HTTPComponents 項目。此框架採用已用 JAX-RS 註釋標記的 Java 介面,並生成可與 Server & Workload Security保護 通信的介面實現。Java REST API 客戶端為您處理所有對象序列化和反序列化、HTTP URL 和 HTTP 方法。
要使用 Java REST API 客戶端,請將 JAR 檔案包含在應用程式類路徑的 lib 資料夾中。該 JAR 檔案依賴於其他第三方庫。詳情請參閱 samples 目錄中 Eclipse 專案的 pom.xml 檔案。
所有 API 的介面都位於 Java 套件 com.trendmicro.ds.platform.rest.api 中。所有傳送到 API 或從 API 傳送的物件都位於 Java 套件 com.trendmicro.ds.platform.rest.object 及其子套件中。

範例 Java 代碼

以下範例程式碼使用 Java REST API 用戶端來驗證 Server & 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 Server & 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 代碼

範例資料夾中包含範例 Java 代碼。這些範例是 Eclipse 專案的一部分,您可以將其匯入到您的 Eclipse 工作區中:
  1. 在 Eclipse 中,點選 File Import
  2. 選擇 General Existing Projects into Workspace 作為匯入來源。
  3. 點選Browse並選擇 Deep Security Web Services SDK 的範例資料夾作為根目錄。
  4. 確保選擇了REST API Samples專案,然後點選Finish
要在 Eclipse 中執行範例檔案,請打開檔案並點選Run Run As Java Application。這些範例需要命令列參數,您需要在執行配置畫面中設定。

HTTP 狀態碼

REST API 使用標準 HTTP 狀態碼來返回請求的狀態。下表顯示了可能使用的響應碼及其返回的情況。
HTTP 狀態碼
意義
200 OK
請求已成功完成。
400 錯誤請求
呼叫者未提供呼叫所需的所有資料防護。
401 未經授權
由於閒置時間過長,呼叫者的 SID 已超時。必須重複驗證過程。
403 禁止
以下任何原因:
  • 呼叫沒有對 Web Services API 的存取權限。
  • 呼叫用戶無權呼叫失敗的 API。
  • 呼叫者的 SID 無效。
  • 呼叫者是租戶中的使用者,但此 API 僅限主要租戶使用者使用。
404 找不到
以下任何原因:
  • 呼叫者訪問了不屬於 REST API 的無效 URL。
  • 呼叫者指定了一個不存在的資源。例如,嘗試通過 ID 刪除租戶,但提供的 ID 與現有的租戶不符。
405 方法未找到
呼叫者指定了不允許用於給定 URL 的 HTTP 方法。例如,使用 HTTP POST 訪問提供 GET 訪問的 API。
500 內部伺服器錯誤
以下任何原因:
  • 發生資料庫錯誤。
  • 發生了一些其他未處理的錯誤。

錯誤回應

當 API 呼叫返回的狀態碼不是 200 OK 時,回應主體通常包含類似以下範例的 JSON 代碼:
{
   "error": {
      "message": "The Activation Code KA47-R947M-KDLUZ-A8WLF-WM6A3-LOL is invalid."
   }
}
某些呼叫包含 XML 代碼而不是 JSON,如以下範例所示:
<error>
	<message>Error message string</message>
</error>
秘訣
秘訣
要強制使用 XML 回應主體,請在您的請求中添加值為 application/xmlAccept 標頭。
錯誤訊息對於調試問題很有幫助,但不適合向應用程式的最終使用者展示。

返回 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第5節中規定的日期編碼規則進行編碼,但年份應按照RFC 1123第5.2.14節的規定編碼為4位數字。例如,將2012年十一月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 年十一月 31 日下午 3:45 東部標準時間 之後的所有主機保護資訊,其中日期編碼中的空格已使用 %20 進行 URL 編碼:
https://dsm.example.com:4119/rest/monitoring/usages/hosts/protection?sID=DC5A4AA79326DF3E149A26EA2DA6B0C7&from=31%20Nov%202012%2015:45:00%20-0500