検索は、タスクの自動化に役立つ強力なツールです。APIの各エンドポイントは、リソースを検索するための操作を提供します。例えば、コンピュータの検索操作を
/api/computers
エンドポイントで使用してコンピュータを検索できます。検索操作を使用するには、1つ以上の検索条件を含む検索フィルタオブジェクトを指定します。検索条件オブジェクトには、次の種類の検索を設定するためのプロパティが含まれます。
- ブール値: ブール値で検索します。
- 選択: 有効な値の定義セットを持つ検索フィールド
- ID: 一意のIDを検索
- Null: null値の検索
- Numeric: 数値で検索
- String: 文字列値で検索
- 日付範囲: 日付値で検索
複数の条件を使用する検索では、すべての条件を満たす結果が返されます。
リソースプロパティ値に関する注意事項で述べたように、APIを直接使用する場合、null値を表すために0を使用します。ただし、null値を検索するにはNull検索を使用します。0の数値検索は行いません。
検索条件には次の項目が含まれます。
- 検索するフィールド (リソースのプロパティ) の名前。フィールド名では大文字と小文字が区別されることに注意してください。
- 検索する値 (日付値の場合は日付の範囲)。
- フィールド値に対してテストする演算子です (日付値の検索には適用されません)。
- 返される項目の最大数 (初期設定は5000)。
ID検索を実行する際には、IDフィールドと見なされるフィールドの名前は含めないでください。
検索する値のタイプによって、利用可能な演算子が決まります。
種類
|
演算子
|
ブール
|
true (default) false
|
選択肢(有効な値のセットが定義されているフィールドの場合)
|
等しい (デフォルト) 等しくない
|
日付
|
日付関連検索では日付範囲が使用されており、オペレータは明示的に使用していません。
|
ID(一意のIDの場合)
|
equal (default) greater-than greater-than-or-equal less-than less-than-or-equal not-equal
|
Null
|
true (デフォルト; trueはnullを示す) false
|
数値
|
equal (default) greater-than greater-than-or-equal less-than less-than-or-equal not-equal
|
文字列
|
等しい 等しくない
|
次の例では、ポリシー名の簡単な検索を実行します。
# 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呼び出しの認証に関する情報については、Workload Securityで認証するを参照してください。
検索可能なフィールド
APIレファレンスには、リソースのどのフィールドが検索可能であるかが示されています。操作の応答オブジェクト内のフィールドに関する情報を見つけることができます。
- 検索しているリソースの種類を返す操作をクリックします。例えば、
Describe a Computer
操作はコンピュータリソースを返します。 - 応答セクションで200 successful operationをクリックします。
- フィールドの説明を読んでください。検索可能なフィールドの説明にはdatatypeとして検索可能と記載されており、datatypeにはString、Numeric、ID、Date、Boolean、Choiceが含まれます。
フィールド名は大文字と小文字が区別されます。
次のフィールドは検索できません。
- 任意オブジェクトの
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
(サブオブジェクトが返されない) に設定されている場合を除き、サブオブジェクトは自動的に返されるComputer
オブジェクトに含まれます。例えば、EC2アカウントIDで検索し、expand
がtasks
に設定されている場合、返されるComputer
オブジェクトにはtasks
およびec2VirtualMachineSummary
プロパティが含まれます。expand
がec2VirtualMachineSummary
に設定されている場合、返されるComputer
オブジェクトには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クライアントライブラリを使用する場合、検索で正しいフィールド名を使用するようにしてください。フィールド名の中には複数の単語が連結されており、キャメルケースの文字を使用しているものがあります。例えば、IPSルールの
lastUpdated
プロパティです。対応するPythonプロパティは、キャメルケースの文字の代わりにアンダースコア文字 (_
) を使用して連結された単語を区切ります。例えば、last_updated
です。フィールドを検索する際には、クラスプロパティ (last_updated
) ではなく、検索対象のフィールド名 (lastUpdated
) を指定する必要があります。不正なフィールド名を使用すると、
Invalid SearchFilter: unknown fieldName
というメッセージのエラーが表示されます。プロパティ名に1つ以上のアンダースコア文字 (
_
) が含まれている場合、次のアルゴリズムを使用してPythonクラスプロパティをフィールド名に変換します。- 各アンダースコアの直後にある文字を大文字にします。
- アンダースコア(_)を1つずつ削除します。
文字列検索でのワイルドカードの使用
文字列検索では、文字列値に次の2つのワイルドカードを使用できます。
%
: 文字以上と一致_
; 1文字に一致
例えば、文字列値
%Security
はWorkload Security
に一致し、Security
にも一致します。文字列値version_
はversion1
に一致し、version
には一致しません。リテラル%
または_
文字を検索したい場合は、ワイルドカードを無効にすることができます。ただし、ワイルドカードの使用はデフォルトで有効になっています。次の検索フィルターを使用して、ベースポリシーという名前のポリシーを見つけることができます。# 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" |
日付範囲の検索を実行する
指定された2つの日付に該当する日付値を含むフィールドを検索できます。次の検索条件フィールドは、日付範囲を定義します。
- FirstDate: 範囲内の最も早い日付。デフォルト値は可能な限り最も早い日付です。
- FirstDateInclusive: 範囲にFirstDateを含むかどうかを示すブール値です。含む場合はtrue、含まない場合はfalseです。デフォルト値はfalseです。
- LastDate: 範囲内の後の日付。デフォルト値は可能な限り最新の日付です。
- LastDateInclusive: 範囲にLastDateを含むかどうかを示すブール値です (trueの場合は含む、falseの場合は含まない)。デフォルト値はfalseです。
FirstDate
とLastDate
の値は、1970年1月1日 (GMT) からのミリ秒数として表されます。次の例は、最後に更新された日時に基づいてIPSルールを検索します。
# 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レファレンスのIPSルールの検索操作も参照してください。API呼び出しの認証に関する情報については、Workload Securityで認証するを参照してください。
ヌル値を検索する
フィールドに値がない (null) か、何らかの値があるかに基づいてリソースを検索するには、nullテスト検索を使用します。例えば、コンピュータの
lastSendPolicySuccess
フィールドは、コンピュータのポリシーが最後に正常にアップデートされた時刻を示します。ポリシーのアップデートを一度も受け取っていないコンピュータを見つけるには、そのフィールドでnullテスト検索を実行します。このタイプの検索では、検索条件に検索対象のフィールド名が含まれ、値がないリソースを見つけたいか (
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レファレンスのコンピュータの検索操作を参照してください。
並べ替え順序
検索条件の特性によって、検索結果の並べ替え順序が決まります。
-
ブール値、選択、Null、および文字列検索: 返されたオブジェクトのIDで昇順に並べ替えられます。
-
ID検索: IDで並べ替え。順序が昇順か降順かはオペレーターが決定します。
- 小なりおよび小なり: 降順
- その他すべての演算子:昇順
-
数値検索: 検索されたフィールドで並べ替えられます。オペレーターは、順序が昇順か降順かを決定します。
- 小なりおよび小なり: 降順
- その他すべての演算子:昇順
複数の検索結果が検索されたフィールドで同じ値を持つ場合、それらのオブジェクトは2次的にIDでソートされます。 -
日付検索: 検索されたフィールドで並べ替えられます。検索のために提供された日付範囲パラメータが並べ替え順序を決定します。
- 提供されるのはLastDateのみです:降順
- 他の組み合わせ:昇順
複数の検索結果が検索された日付フィールドの値が同じ場合、これらのオブジェクトは2次的にIDでソートされます。 -
複数の検索条件: 複数の検索条件を使用する検索は、個々の条件のデフォルトの並べ替え順序に関係なく、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呼び出しの認証に関する情報については、Workload Securityでの認証を参照してください。