ファイルアップロードAPIの利用開始🔗
重要
先にAPI認証の手順を完了し、有効なアクセストークンを取得してください。
ファイルアップロードAPIを使用すると、Taegis™ XDR Collectorを使用せずに、適切にフォーマットされたログファイルをSecureworks® Taegis™ XDRへ送信し、取り込みおよび正規化を行うことができます。ログファイルがサポートされているSecureworks® Taegis™連携済みsyslogデータソースによって生成された場合、イベントはそのデータソースに関連付けられたスキーマに従って正規化されます。それ以外の場合、イベントはGenericスキーマに従って正規化されます。
ヒント
より高いレベルのサポートをご希望の場合、SecureworksプロフェッショナルサービスチームがTaegis XDRへの投資から最大限の価値を引き出すお手伝いをいたします。高度なスキルを持つコンサルタントが、迅速な展開、最適化、価値実現までの時間短縮をサポートします。詳細については、以下をご覧ください。 プロフェッショナルサービス概要。
ファイルアップロードAPIの主な用途🔗
- syslog集約ポイントでのログファイルのバッチ処理
- XDR Collectorに接続できないデバイス
サポートされているファイルタイプ🔗
- プレーンテキスト
- GNU zip圧縮ファイル(.gz)
注意事項🔗
- 1回のPUT操作で最大100MBまでのファイルをアップロードできます。
- 最小ファイルサイズは1024バイトです。
- アクセストークンの有効期間は10時間であり、毎回新しいトークンを作成するのではなくキャッシュして利用してください。
ファイルアップロードの手順🔗
- アクセストークンの生成
- S3署名付きURLのリクエスト
- ログファイルのPUT
REST API🔗
地域
XDR APIにアクセスするためのURLは、お客様の環境が展開されているリージョンによって異なる場合があります。
- US1—
https://api.ctpx.secureworks.com - US2—
https://api.delta.taegis.secureworks.com - US3—
https://api.foxtrot.taegis.secureworks.com - EU1—
https://api.echo.taegis.secureworks.com - EU2—
https://api.golf.taegis.secureworks.com
このXDR APIドキュメントの例では、https://api.ctpx.secureworks.com を使用しています。別のリージョンをご利用の場合は、適切なURLに置き換えてください。
signed-s3url🔗
ログをPUTできるURLを返します。
URLパラメータ🔗
| Name | Type | 説明 |
|---|---|---|
| file_name | String | アップロードしようとしているファイル名 |
| content_length | Integer | アップロードしようとしているファイルのバイトサイズ |
| sensor_id | String | オプション。ご希望のセンサー識別子。省略した場合、値はtoaster.localhostがデフォルトとなります |
例🔗
TAEGIS_API_ENDPOINTおよびACCESS_TOKEN環境変数を設定し、次のPythonスクリプトを実行してください。
#!/usr/bin/env python
import requests
import os
from os import sys
import json
def upload_file(endpoint,token,filename, sensorid = "toaster.localhost", service = "Syslog"):
contents = ""
if os.path.exists(filename):
content_length = os.path.getsize(filename)
try:
with open(filename,"rb") as fd:
contents = fd.read()
except OSError as err:
print("OS error: {0}".format(err))
sys.exit(2)
else:
print("The file does not exist")
sys.exit(2)
s3url = endpoint + "/s3-signer/v2/signed-s3url?file_name=" + filename + "&content_length=" + str(content_length) + "&service=" + service
if sensorid != "":
s3url += "&sensor_id=" + sensorid
headers = {'Authorization': 'Bearer '+ token}
response = requests.request(method = "POST", url = s3url, headers = headers)
if response.status_code != 200:
print("Failed to request a pre-signed url with error: {0}".format(response.text))
res = json.loads(response.content)
try:
url = res['location']
except:
sys.exit(2)
response = requests.put(url, data=contents)
if response.status_code == 200:
print("Upload success! of file {0} with sensorId {1}".format(filename,sensorid))
else:
print("Upload failed with error {0}".format(response.text))
if __name__ == "__main__":
token = os.environ.get('ACCESS_TOKEN')
endpoint = os.environ.get("TAEGIS_API_ENDPOINT")
filename = sys.argv[1]
upload_file(endpoint,token,filename)