コンテンツにスキップ

ファイルアップロード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時間であり、毎回新しいトークンを作成するのではなくキャッシュして利用してください。

ファイルアップロードの手順🔗

  1. アクセストークンの生成
  2. S3署名付きURLのリクエスト
  3. ログファイルの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を返します。

POST https://api.ctpx.secureworks.com/s3-signer/v2/signed-s3url

URLパラメータ🔗

Name Type 説明
file_name String アップロードしようとしているファイル名
content_length Integer アップロードしようとしているファイルのバイトサイズ
sensor_id String オプション。ご希望のセンサー識別子。省略した場合、値はtoaster.localhostがデフォルトとなります

🔗

TAEGIS_API_ENDPOINTおよびACCESS_TOKEN環境変数を設定し、次のPythonスクリプトを実行してください。

export TAEGIS_API_ENDPOINT="your_region_url"
export ACCESS_TOKEN="your_access_token"
#!/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)