Cloud One Workload SecurityのAPIを利用して設定操作をしてみた

2021.03.19

こんにちは、コンサル部@大阪オフィスの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キー)
    • Contacts (連絡先)
    • Data Center Gateways (データセンターゲートウェイ)
    • Event Based Tasks (イベントベースのタスク)
    • Scheduled Tasks (スケジュールされたタスク)
    • System Settings (システム設定)
  • COMPUTER
    • AWS Connectors (AWSコネクタ)
    • Computers (コンピュータ)
    • Computer Firewall Rule Assignments (コンピュータ ファイアウォールルール割り当て)
    • Computer Firewall Rule Details (コンピュータ ファイアウォールルール詳細設定)
    • Computer Integrity Monitoring Rule Assignments & Recommendations
      (コンピュータ 整合性監視ルール割り当て)
    • Computer Integrity Monitoring Rule Details
      (コンピュータ 整合性監視ルール詳細設定)
    • Computer Intrusion Prevention Rule Assignments & Recommendations
      (コンピュータ 侵入防止ルール割り当て)
    • Computer Intrusion Prevention Application Type Details
      (コンピュータ 侵入防止アプリタイプ設定)
    • Computer Intrusion Prevention Rule Details
      (コンピュータ 侵入防止ルール詳細設定)
    • Computer Log Inspection Rule Assignments & Recommendations
      (コンピュータ ログ検索ルール割り当て)
    • Computer Log Inspection Rule Details
      (コンピュータ ログ検索ルール詳細設定)
    • Computer Groups (コンピュータグループ)
    • GCP Connectors (GCPコネクタ)
  • POLICIES
    • Policies (ポリシー)
    • Policy Firewall Rule Assignments (ポリシー ファイアウォールルール割り当て)
    • Policy Firewall Rule Details (ポリシー ファイアウォールルール詳細設定)
    • Policy Integrity Monitoring Rule Assignments & Recommendations
      (ポリシー 整合性監視ルール割り当て)
    • Policy Integrity Monitoring Rule Details
      (ポリシー 整合性監視ルール詳細設定)
    • Policy Intrusion Prevention Rule Assignments & Recommendations
      (ポリシー 侵入防止ルール割り当て)
    • Policy Intrusion Prevention Application Type Details
      (ポリシー 侵入防止アプリタイプ設定)
    • Policy Intrusion Prevention Rule Details
      (ポリシー 侵入防止ルール詳細設定)
    • Policy Log Inspection Rule Assignments & Recommendations
      (ポリシー ログ検索ルール割り当て)
    • Policy Log Inspection Rule Details
      (ポリシー ログ検索ルール詳細設定)
  • 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 Inventories (ソフトウェアインベントリ)

登録について

設定の登録は 各API別に用意されている関数を利用しておこないます。
APIドキュメントの中でobjectと表記されているものは、変数に別途オブジェクトを設定する場合があります。
Scheduled Tasksを登録する場合、scheduleDetails > object (ScheduleDetails)と表記があるためScheduleDetails()を利用時に呼び出します。
正常に登録ができた場合、application/jsonにて内容は出力されます。

from __future__ import print_function
import sys
import warnings
import datetime
import time
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キー情報]'

# 時間 タスクは仮で翌日0:00に設定
datetime_now = datetime.datetime.now()
datetime_set = datetime.datetime(datetime_now.year, datetime_now.month, int(datetime_now.day) + 1, 0, 0, 0)
start_time = int(time.mktime(datetime_set.timetuple())) * 1000

# APIリクエスト情報設定
api_version = 'v1'
api_instance = deepsecurity.ScheduledTasksApi(deepsecurity.ApiClient(configuration))

# スケジュールされたタスク設定
# タスク設定
scheduled_task = deepsecurity.ScheduledTask()
scheduled_task.name = "コンポーネントアップデートタスク"
scheduled_task.type = "check-for-security-updates"  #タスクの種類で コンポーネントアップデートタスク 選択
scheduled_task.enabled = True

# スケジュール設定
scheduled_task.schedule_details = deepsecurity.ScheduleDetails()
scheduled_task.schedule_details.time_zone = "Asia/Tokyo"
scheduled_task.schedule_details.recurrence_type = "daily"
scheduled_task.schedule_details.daily_schedule_parameters = deepsecurity.DailyScheduleParameters()
scheduled_task.schedule_details.daily_schedule_parameters.frequency_type = "everyday"
scheduled_task.schedule_details.daily_schedule_parameters.start_time = start_time

# コンポーネントアップデートタスクの詳細設定
scheduled_task.check_for_security_updates_task_parameters = deepsecurity.CheckForSecurityUpdatesTaskParameters()
scheduled_task.check_for_security_updates_task_parameters.timeout = "never"
scheduled_task.check_for_security_updates_task_parameters.computer_filter = deepsecurity.ComputerFilter()
scheduled_task.check_for_security_updates_task_parameters.computer_filter.type = "all-computers"

try:
    api_response = api_instance.create_scheduled_task(scheduled_task, api_version)
    pprint(api_response)
except ApiException as e:
    print("An exception occurred when calling ScheduledTasksApi.create_scheduled_task: %s\n" % e)

変更について

先ほど登録したScheduled Tasksを変更します。
変更が必要な箇所のみAPIに送信をおこないます。
正常に登録ができた場合、application/jsonにて内容は出力されます。

from __future__ import print_function
import sys
import warnings
import datetime
import time
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キー情報]'

# 時間 タスクの時間を翌日6:00に変更
datetime_now = datetime.datetime.now()
datetime_set = datetime.datetime(datetime_now.year, datetime_now.month, int(datetime_now.day) + 1, 0, 0, 0)
start_time = int(time.mktime(datetime_set.timetuple())) * 1000

# APIリクエスト情報設定
api_version = 'v1'
api_instance = deepsecurity.ScheduledTasksApi(deepsecurity.ApiClient(configuration))

# スケジュールされたタスク設定
# 変更対象のID
scheduled_task_id = '[対象ID]'

# タスク設定
scheduled_task = deepsecurity.ScheduledTask()

# スケジュール設定
scheduled_task.schedule_details = deepsecurity.ScheduleDetails()
scheduled_task.schedule_details.daily_schedule_parameters = deepsecurity.DailyScheduleParameters()
scheduled_task.schedule_details.daily_schedule_parameters.frequency_type = "everyday"
scheduled_task.schedule_details.daily_schedule_parameters.start_time = start_time

try:
    api_response = api_instance.modify_scheduled_task(scheduled_task_id, scheduled_task, api_version)
    pprint(api_response)
except ApiException as e:
    print("An exception occurred when calling ScheduledTasksApi.edit_scheduled_task: %s\n" % e)

削除について

先ほど登録したScheduled Tasksを削除します。

from __future__ import print_function
import sys
import warnings
import datetime
import time
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キー情報]'

# APIリクエスト情報設定
api_version = 'v1'
api_instance = deepsecurity.ScheduledTasksApi(deepsecurity.ApiClient(configuration))

# スケジュールされたタスク設定
# 削除対象のID
scheduled_task_id = '[対象ID]'

try:
    api_instance.delete_scheduled_task(scheduled_task_id, api_version)
except ApiException as e:
    print("An exception occurred when calling ScheduledTasksApi.delete_scheduled_task: %s\n" % e)

さいごに

今回はCloud One Workload SecurityのAPIを使って設定を操作してみました。
自動化をする中で設定の操作は必要になりますのでまとめております。