Cloud One Workload Securityの検索APIを使ってみた

2021.03.02

こんにちは、コンサル部@大阪オフィスのTodaです。

Cloud One Workload SecurityのAPIを利用して自動化を試しています。
今回は検索機能について確認を確認・試してみます。

Cloud One Workload Securityとは?

トレンドマイクロ社が提供している製品でサーバ保護に必要な複数のセキュリティ機能を提供するクラウド型総合サーバセキュリティサービスです。
詳細は公式サイトをご覧ください。

同システムには自動化するためのAPIとSDKが用意されています。
下記マニュアルを参考に操作をしていきます。

■ Workload Security Python SDK
https://cloudone.trendmicro.com/docs/jp/workload-security/sdk-python/

■ Trend Micro Deep Security API (50.0.163)
https://cloudone.trendmicro.com/docs/workload-security/api-reference/

目標

  • Pythonを利用してCloud One Workload Securityの操作ができる状態にする。
  • ログインアカウントの情報を色々な検索条件で取得する。

前提条件

  • Python3系が動作できる環境
  • Cloud One トライアル版アカウント登録し、利用できる状態
  • API利用の準備編を試している

検索できるAPIエンドポイント

2021年03月時点で下記APIエンドポイントでリソースを検索するための機能を提供されています。

■ Trend Micro Deep Security API (50.0.163)
https://cloudone.trendmicro.com/docs/workload-security/api-reference/

  • ADMINISTRATION
    • Administrators (管理者)
    • Administrator Roles (管理者の役割)
    • API Keys (APIキー)
    • API Usage (APIの権限)
    • Contacts (連絡先)
    • Data Center Gateways (データセンターゲートウェイ)
    • Event Based Tasks (イベントベースのタスク)
    • Report Templates (レポートテンプレート)
    • Scheduled Tasks (スケジュールされたタスク)
  • COMPUTER
    • AWS Connectors (AWSコネクタ)
    • Computers (コンピュータ)
    • Computer Groups (コンピュータグループ)
    • GCP Connectors (GCPコネクタ)
  • POLICIES
    • Policies (ポリシー)
  • ANTI-MALWARE
    • Anti-Malware Configurations (マルウェア対策の構成)
    • Directory Lists (ディレクトリリスト)
    • File Extension Lists (ファイル拡張子リスト)
    • File Lists (ファイルリスト)
    • Schedules (スケジュール)
  • FIREWALL
    • Firewall Rules (ファイアウォールルール)
    • Interface Types (インターフェイスタイプ)
    • IP Lists (IPリスト)
    • MAC Lists (MACリスト)
    • Port Lists (ポートリスト)
    • Contexts (コンテキスト)
    • Schedules (スケジュール)
    • Stateful Configurations (ステートフル構成)
  • INTEGRITY MONITORING
    • Integrity Monitoring Rules (整合性監視ルール)
  • INTRUSION PREVENTION
    • Application Types (アプリケーションタイプ)
    • Intrusion Prevention Rules (侵入防止ルール)
    • Contexts (コンテキスト)
    • Schedules (スケジュール)
  • LOG INSPECTION
    • Log Inspection Rules (ログ検索)
  • APPLICATION CONTROL
    • Global Rules (グローバルルール)
    • Rulesets (ルールセット)
    • Software Changes (ソフトウェア更新履歴)
    • Software Inventories (ソフトウェアインベントリ)

検索について

検索条件は SearchCriteria() 関数を利用して条件用の変数を用意、設定をおこないます。

単数条件の場合

from __future__ import print_function
import sys, warnings
import deepsecurity
from deepsecurity.rest import ApiException
from pprint import pprint

# 初期設定
if not sys.warnoptions:
    warnings.simplefilter("ignore")
configuration = deepsecurity.Configuration()
configuration.host = 'https://cloudone.trendmicro.com/api'

# API認証情報
configuration.api_key['api-secret-key'] = '[APIキー情報]'

# 検索条件
search_criteria = deepsecurity.SearchCriteria()
search_criteria.field_name = "username"  # 対象要素
search_criteria.string_value = "admin"   # 文字列
search_criteria.string_test = "equal"    # 演算子

# APIリクエスト情報設定
search_filter = deepsecurity.SearchFilter(None, [search_criteria])
search_filter.max_items = 1
api_instance = deepsecurity.AdministratorsApi(deepsecurity.ApiClient(configuration))
api_version = 'v1'

# APIリクエスト処理
try:
    api_response = api_instance.search_administrators(api_version, search_filter=search_filter)
    pprint(api_response)
except ApiException as e:
    print("An exception occurred when calling AdministratorsApi.search_administrators: %s\n" % e)

複数条件の場合

# 検索条件1
search_criteria1 = deepsecurity.SearchCriteria()
search_criteria1.field_name = "id"           # 対象要素
search_criteria1.string_value = "1"          # 文字列
search_criteria1.string_test = "equal"       # 演算子

# 検索条件2
search_criteria2 = deepsecurity.SearchCriteria()
search_criteria2.field_name = "username"     # 対象要素
search_criteria2.string_value = "admin"      # 文字列
search_criteria2.string_test = "equal"       # 演算子

# APIリクエスト情報設定
search_filter = deepsecurity.SearchFilter(None, [search_criteria1, search_criteria2])  # 条件を複数設定
search_filter.max_items = 1

演算子について

演算子は要素の形式により入力内容が変わります。

形式 演算子
Boolean:ブール true 【初期設定】
false
Choice:選択肢 equal (等しい) 【初期設定】
not-equal (等しくない)
ID equal (等しい) 【初期設定】
greater-than (未満)
greather-than-or-equal (以下)
less-than (超える)
less-than-or-equal (以上)
not-equal (等しくない)
Null true 【初期設定】
false
Numeric:数値 equal (等しい) 【初期設定】
greater-than (未満)
greather-than-or-equal (以下)
less-than (超える)
less-than-or-equal (以上)
not-equal (等しくない)
String:文字列 equal (等しい) 【初期設定】
not-equal (等しくない)
Date:日付 日付検索は範囲検索になります

Boolean検索の場合

Boolean検索の場合はboolean_test変数を利用します。

# 検索条件
search_criteria = deepsecurity.SearchCriteria()
search_criteria.field_name = "active"  # 対象要素
search_criteria.boolean_test = True    # Boolean演算子

NULL検索の場合

NULL検索の場合はnull_test変数を利用します。

# 検索条件
search_criteria = deepsecurity.SearchCriteria()
search_criteria.field_name = "unlock_time"  # 対象要素
search_criteria.null_test = True            # NULL条件

選択肢検索の場合

選択肢検索の場合はchoice_test,choice_value変数を利用します。

# 検索条件
search_criteria = deepsecurity.SearchCriteria()
search_criteria.field_name = "time_format"  # 対象要素
search_criteria.choice_test = "equal"       # 演算子
search_criteria.choice_value = 24           # 選択肢(番号)

ID検索の場合

ID検索の場合はid_test,id_value変数を利用します。

# 検索条件
search_criteria = deepsecurity.SearchCriteria()
search_criteria.field_name = "id"  # 対象要素
search_criteria.id_test = "equal"  # 演算子
search_criteria.id_value = 1       # id

数値検索の場合

数値検索の場合はnumeric_test,numeric_value変数を利用します。

# 検索条件
search_criteria = deepsecurity.SearchCriteria()
search_criteria.field_name = "time_format"           # 対象要素
search_criteria.numeric_test = "less-than-or-equal"  # 演算子
search_criteria.numeric_value = 2                    # 数値

日付検索の場合

日付検索の場合は first_date_value,first_date_inclusive,last_date_value,last_date_inclusive変数を利用します。 期間はミリ秒にて指定します。

# 検索条件
current_time_in_ms = int(round(time.time() * 1000))    # 現在時間
last_updated_in_ms = current_time_in_ms - (7 * 24 * 60 * 60 * 1000)  # 7日前

search_criteria = deepsecurity.SearchCriteria()
search_criteria.field_name = "created"                 # 対象要素
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             # 検索期間-終了 ※同時刻を含むか

文字列のワイルドカード検索

文字列の値は初期状態でワイルドカード検索が有効の状態になっています。
%または_を利用頂くことができます。

  • % : 任意の0文字以上の文字列
  • _ : 任意の1文字
# 検索条件
search_criteria = deepsecurity.SearchCriteria()
search_criteria.field_name = "username"  # 対象要素
search_criteria.string_value = "ad%"     # 文字列 % を設定
search_criteria.string_test = "equal"    # 演算子

ワイルドカード検索が有効になっているため一部_など文字を含んでいる要素で検索が正常にできない場合があります。 その場合はワイルドカード検索を無効に設定する事ができます。

# 検索条件
search_criteria = deepsecurity.SearchCriteria()
search_criteria.field_name = "username"       # 対象要素
search_criteria.string_value = "admin_staff"  # 文字列 (admin_staff にて検索)
search_criteria.string_wildcards = False      # ワイルドカード検索無効

情報の並び順について

検索条件に当てはまる情報が複数ある場合、検索条件に合わせて並び順が設定されるようになります。

Boolean, NULL, 選択肢, 文字列検索の場合

結果内のIDにより昇順ソートされます。

ID, 数値検索の場合

演算子でgreater-than(未満)/greather-than-or-equal(以下)を選択した場合、対象の要素で降順ソートされます。 その他は昇順ソートされます。

複数条件で検索の場合

結果内のIDにより昇順ソートされます。

さいごに

今回はCloud One Workload Securityの検索APIを使ってみました。
自動化をする中で情報の検索が必要になりますのでまとめております。
次回は登録、編集、削除について確認いたします。