搜尋是一個強大的工具,在自動化任務時經常很有用。API 中的每個端點都提供搜尋資源的操作。例如,您可以使用 搜尋電腦 操作在
/api/computers
端點中搜尋電腦。要使用搜尋操作,您需要提供一個包含一個或多個搜尋條件的搜尋篩選器物件。搜尋條件物件包括配置以下類型搜尋的屬性:
- Boolean: 搜尋布林值。
- Choice: 搜尋欄位具有一組定義的有效值
- ID: 搜尋唯一 ID
- Null: 搜尋空值
- Numeric: 搜尋數值
- String: 搜尋字串值
- Date range: 搜尋日期值
使用多個條件的搜尋會返回滿足所有條件的結果。
秘訣如資源屬性值的注意事項中所述,當您直接使用 API 時,使用 0 來表示空值。然而,要搜尋空值時,您需要使用 Null 搜尋。您不會執行數值搜尋 0。
|
搜尋條件包括以下項目:
- 您正在搜尋的欄位名稱(資源的屬性)-- 請注意欄位名稱區分大小寫
- 要搜尋的值(或對於日期值,則為日期範圍)
- 運算子用於測試欄位值(不適用於日期值搜尋)
- 返回項目的最大數量(預設為 5000)
秘訣在執行 ID 搜尋時,您不需要包含欄位名稱,因為預設為 ID 欄位。
|
您正在搜尋的值類型決定了可用的運算子。
類型
|
操作員
|
布林值
|
true (default) false
|
選擇(適用於具有定義的有效值集合的欄位)
|
等於(預設)不等於
|
日期
|
與日期相關的搜尋使用日期範圍,您不需要明確使用運算符。
|
ID(用於唯一 ID)
|
等於 (預設) 大於 大於或等於 小於 小於或等於 不等於
|
空
|
true(預設;true 表示 null) false
|
數字
|
等於 (預設) 大於 大於或等於 小於 小於或等於 不等於
|
字串
|
等於 不等於
|
以下範例對政策名稱進行簡單搜尋。
# Set search criteria search_criteria = api.SearchCriteria() search_criteria.field_name = "name" search_criteria.string_test = "equal" search_criteria.string_value = name # Create a search filter search_filter = api.SearchFilter(None, [search_criteria]) search_filter.max_items = 1 # Perform the search policies_api = api.PoliciesApi(api.ApiClient(configuration)) policies_api.search_policies(api_version, search_filter=search_filter)
以下範例顯示如何建立包含多個條件的搜尋篩選器。
# Set search criteria for platform policy_criteria = api.SearchCriteria() policy_criteria.field_name = "policyID" policy_criteria.numeric_test = "equal" policy_criteria.numeric_value = policy_id # Set search criteria for relay relay_criteria = api.SearchCriteria() relay_criteria.field_name = "relayListID" relay_criteria.numeric_test = "equal" relay_criteria.numeric_value = relay_list_id # Create the search filter search_filter = api.SearchFilter(None, [policy_criteria, relay_criteria])
如需有關驗證 API 呼叫的資訊,請參閱 使用 Server & Workload Security保護 驗證。
可搜尋欄位
API 參考指出資源的哪些欄位是可搜尋的。您可以在操作的回應物件中找到這些欄位的資訊。
- 點選返回您正在搜尋的資源類型的操作。例如,
描述電腦
操作返回電腦防護資源。 - 點選200 successful operation在回應部分。
- 閱讀欄位的描述。可搜尋欄位的描述包含「可搜尋為資料類型」,其中資料類型可以是字串、數值、ID、日期、布林值和選擇。
欄位名稱區分大小寫。
以下欄位無法搜尋:
- 任何物件的
locale
欄位 - 大多數具有物件作為值的欄位,例如
Policy
物件的policySettings
欄位(例外情況請參見下文的“搜尋電腦防護子物件”)。
當您搜尋一個不可搜尋的欄位時,您會收到類似
Invalid SearchFilter: unknown fieldName: platform
的錯誤。搜尋電腦防護子物件
雖然具有物件作為值的欄位通常不可搜尋,但在電腦防護類別中有幾個例外。例如,
ec2VirtualMachineSummary
欄位的值是一個物件,該物件的幾個欄位是可搜尋的,例如 accountID
和 availabilityZone
。同樣地,您可以搜尋電腦 interfaces
的 name
欄位。(請參閱 描述電腦 操作的回應架構,位於 API 參考 中,以了解更多可搜尋的子物件。)以下 JSON 顯示了這些在電腦防護物件資料結構中的子物件:{ "hostName": "gui2-336", "displayName": "", "description": "", ... "interfaces": { "name": "ethernet", ... }, "ec2VirtualMachineSummary": { "accountID": "123456789012", "availabilityZone": "ap-northeast-1", ... }, ... "ID": 201 }
在搜尋條件中,子物件的欄位名稱表示為路徑,例如
ec2VirtualMachineSummary/publicIPAddress
和 interfaces/name
。
秘訣在搜尋時使用
expand 參數,以僅包含您在返回的電腦防護物件中所需的資訊。欲了解詳細資訊,請參閱 效能提示 指南中的「最小化電腦防護回應大小」。 |
當您在電腦防護子對象上進行搜索時,該子對象會自動包含在返回的
電腦防護
對象中,除非expand
設置為none
(不返回任何子對象)。例如,如果您搜索 EC2 帳號 ID 並且expand
設置為tasks
,則返回的電腦防護
對象包括tasks
和ec2VirtualMachineSummary
屬性。如果expand
設置為ec2VirtualMachineSummary
,則返回的電腦防護
對象包括ec2VirtualMachineSummary
屬性。# Search criteria computer_criteria = api.SearchCriteria() computer_criteria.field_name = "ec2VirtualMachineSummary/accountID" computer_criteria.string_test = "equal" computer_criteria.string_value = account_id # Search filter max_items = None search_filter = api.SearchFilter(max_items, computer_criteria) # Include only the EC2 virtual machine summary in the returned computers expand = api.Expand(api.Expand.ec2_virtual_machine_summary) # Perform the search computers_api = api.ComputersApi(api.ApiClient(configuration)) return computers_api.search_computers(api_version, search_filter=search_filter, expand=expand.list(), overrides=False)
Python 代碼中的欄位名稱
在使用 Python 用戶端程式庫時,請確保在搜尋中使用正確的欄位名稱。一些欄位名稱由多個連接的單詞組成,並使用駝峰式大小寫字母,例如入侵防護規則的
lastUpdated
屬性。相應的 Python 屬性使用底線字符 (_) 來分隔連接的單詞,而不是駝峰式大小寫字母,例如 last_updated
。當您在某個欄位上進行搜尋時,必須提供您正在搜尋的欄位名稱 (lastUpdated
),而不是類屬性 (last_updated
)。當您使用不正確的欄位名稱時,您會收到一個錯誤訊息
Invalid SearchFilter: unknown fieldName
。當屬性名稱包含一個或多個底線字元 (_) 時,請使用以下算法將 Python 類屬性轉換為欄位名稱:
- 將每個底線後面的字母大寫。
- 刪除每個底線。
在字串搜尋中使用萬用字元
字串搜尋支援在字串值中使用兩個萬用字元:
%
:匹配零個或多個字元_
; 匹配 1 個字元
例如,字串值
%Security
符合 Server & Workload Security保護
,也符合 Security
。字串值 version_
符合 version1
,但不符合 version
。如果您想搜尋字面上的 %
或 _
字元,您可以關閉萬用字元。然而,萬用字元預設是已啟動的。以下的搜尋篩選器可用於尋找名為 "Base Policy" 的政策。# Create the search criteria search_criteria = api.SearchCriteria() search_criteria.field_name = "name" search_criteria.string_test = "equal" search_criteria.string_value = "Base%"
秘訣若要關閉萬用字元搜尋,請將 `SearchCriteria` 物件的 `stringWildcards` 屬性設置為 `false`。
search_criteria.string_wildcards = "false" |
執行日期範圍搜尋
您可以搜尋包含日期值的欄位,這些日期值落在兩個指定日期之間。以下搜尋條件欄位定義了日期範圍:
- FirstDate: 範圍內的較早日期。預設值是最早的可能日期。
- FirstDateInclusive: 一個布林值,指示範圍是否包含 FirstDate(true)或不包含(false)。預設值為 false。
- LastDate: 範圍內的較晚日期。預設值為最晚的可能日期。
- LastDateInclusive: 一個布林值,指示範圍是否包含 LasteDate(true)或不包含(false)。預設值為 false。
FirstDate
和 LastDate
的值表示自 1970 年一月 1 日 (GMT) 起的毫秒數。以下範例根據入侵防護規則的最後更新時間進行搜尋。
# Time that rules were last updated current_time_in_ms = int(round(time.time() * 1000)) last_updated_in_ms = current_time_in_ms - (num_days * 24 * 60 * 60 * 1000) # Set search criteria for the date range search_criteria = api.SearchCriteria() search_criteria.field_name = "lastUpdated" search_criteria.first_date_value = last_updated_in_ms search_criteria.last_date_value = current_time_in_ms search_criteria.first_date_inclusive = True search_criteria.last_date_inclusive = True # Create a search filter search_filter = api.SearchFilter(None, [search_criteria]) # Perform the search intrusion_prevention_rules_api = api.IntrusionPreventionRulesApi(api.ApiClient(configuration)) return intrusion_prevention_rules_api.search_intrusion_prevention_rules(api_version, search_filter=search_filter)
另請參閱 API 參考中的 搜尋入侵防護規則 操作。有關 API 認證呼叫的資訊,請參閱 使用 Server & Workload Security保護 認證。
搜尋空值
使用空測試搜尋來根據欄位是否沒有值(null)或有任何值來查找資源。例如,電腦的
lastSendPolicySuccess
欄位表示電腦最後一次成功更新策略的時間。要查找從未接收過策略更新的電腦,您可以對該欄位執行空測試搜尋。對於此類搜尋,搜尋條件包括要搜尋的欄位名稱,以及您是否想要找到沒有值的資源(
null_test = true
)或任何值的資源(null_test = false
)。以下範例會搜尋從未接收過策略更新的電腦:
# Search criteria computer_criteria = api.SearchCriteria() computer_criteria.field_name = "lastSendPolicySuccess" computer_criteria.null_test = True # Search filter max_items = None search_filter = api.SearchFilter(max_items, computer_criteria) # Include minimal information in the returned computers expand = api.Expand(api.Expand.none) # Perform the search computers_api = api.ComputersApi(api.ApiClient(configuration)) return computers_api.search_computers(api_version, search_filter=search_filter, expand=expand.list(), overrides=False)
如需詳細資訊,請參閱 API 參考中的 搜尋電腦 操作。
排序順序
搜尋條件的特性決定搜尋結果的排序順序:
-
Boolean, Choice, Null, and String searches: 按返回對象的 ID 以升序排序。
-
ID searches: 按 ID 排序。操作員決定順序是升序還是降序:
- 小於和小於或等於:降序
- 所有其他運算子:遞增
-
Numeric searches: 按照搜尋的欄位排序。運算子決定順序是升序還是降序:
- 小於和小於或等於:降序
- 所有其他運算子:遞增
當多個搜尋結果在搜尋欄位中具有相同的值時,這些對象將按 ID 進行次要排序。 -
Date searches: 按照搜尋的欄位排序。搜尋提供的日期範圍參數決定排序順序:
- 僅提供 LastDate:降序
- 任何其他組合:升序
當多個搜尋結果在搜尋日期欄位具有相同的值時,這些對象將按 ID 進行次要排序。 -
Multiple search criteria: 使用多個搜尋條件的搜尋結果會按 ID(升序)排序,而不考慮各個條件的預設排序順序。
SearchFilter 物件使您能夠覆蓋預設的排序順序,並按返回物件的 ID 進行排序。
限制搜尋結果和分頁
使用搜尋篩選器的
maxItems
欄位來限制返回物件的數量。預設情況下,返回物件的最大數量為 5000,且不能超過 5000。您也可以使用
maxItems
欄位來實現 ID 搜索結果的分頁:- 使用大於運算符號依 ID 搜尋
- 使用 maxItems 來設定頁面大小
- 根據上一頁結果中的最高 ID 計算要搜尋的 ID 值。
以下範例顯示如何使用搜尋來檢索一系列頁面中的所有電腦。
# Set search criteria search_criteria = api.SearchCriteria() search_criteria.id_value = 0 search_criteria.id_test = "greater-than" # Create a search filter with maximum returned items page_size = 10 search_filter = api.SearchFilter() search_filter.max_items = page_size search_filter.search_criteria = [search_criteria] # Include the minimum information in the returned Computer objects expand = api.Expand(api.Expand.none) # Perform the search and do work on the results computers_api = api.ComputersApi(api.ApiClient(configuration)) paged_computers = [] while True: computers = computers_api.search_computers(api_version, search_filter=search_filter, expand=expand.list(), overrides=False) num_found = len(computers.computers) current_paged_computers = [] if num_found == 0: print("No computers found.") break for computer in computers.computers: current_paged_computers.append(computer) paged_computers.append(current_paged_computers) # Get the ID of the last computer in the page and return it with the number of computers on the page last_id = computers.computers[-1].id search_criteria.id_value = last_id print("Last ID: " + str(last_id), "Computers found: " + str(num_found)) return paged_computers
另請參閱 API 參考中的 搜尋電腦 操作。有關 API 調用身份驗證的信息,請參閱 使用 Server & Workload Security保護 進行身份驗證。