Google SecOps CLI ユーザーガイド

以下でサポートされています。

Google Security Operations SDK は、ターミナルから Google SecOps プロダクトを簡単に操作できる包括的なコマンドライン インターフェース(CLI)を提供します。新しい secops CLI は、機能が強化され、ユーザー エクスペリエンスが向上した従来の chronicle_cli に代わるものです。

概要

secops CLI を使用すると、次のものにアクセスできます。

  • UDM イベントを検索して分析する
  • フィード、フォワーダー、パーサーを管理する
  • 検出ルールを作成して管理する
  • アラートとケースを処理する
  • 参照リストとデータテーブルを管理する
  • BigQuery と Google Cloud Storage にデータをエクスポートする
  • Gemini AI にセキュリティ分析情報をクエリする
  • その他

Google SecOps CLI コマンドでは、次の構文を使用します。

$ secops COMMAND [SUBCOMMAND] [OPTIONS]

たとえば、イベントを検索するには:

$ secops search --query "metadata.event_type = \"NETWORK_CONNECTION\"" --time-window 24

始める前に

Google SecOps CLI をインストールする前に、次のことを確認してください。

  • 環境に Python 3.8 以降がインストールされている。詳細については、Python のインストールをご覧ください。
  • 適切なアクセス権限を持つ Google SecOps インスタンス。
  • 認証情報(サービス アカウントまたはアプリケーションのデフォルト認証情報)。

インストール

CLI を含む SecOps SDK をインストールします。

pip install secops

インストールを確認します。

$ secops --help

認証

CLI は、複数の認証方法をサポートしています。

# Set up ADC with gcloud
gcloud auth application-default login

サービス アカウントの使用

サービス アカウントの JSON ファイルを安全な場所に配置し、コマンドで参照します。

$ secops search --service-account "/path/to/service-account.json" --customer-id "your-instance-id" --project-id "your-project-id" --query "metadata.event_type = \"USER_LOGIN\""

構成

コマンドの繰り返しを避けるため、共通の設定を保存します。

構成を保存

# Save instance and authentication settings
$ secops config set --customer-id "your-instance-id" --project-id "your-project-id" --region "us"

# Save service account path (optional)
$ secops config set --service-account "/path/to/service-account.json" --customer-id "your-instance-id" --project-id "your-project-id"

# Set default time window
$ secops config set --time-window 48

View Configuration

$ secops config view

Clear Configuration

$ secops config clear

リージョン

CLI は、すべての Google SecOps リージョンをサポートしています。リージョンは次のように設定できます。

  • 任意のコマンドで --region フラグを指定
  • secops config set --region REGION を使用した構成ファイル

サポートされているリージョンは次のとおりです。 * US(デフォルト) * EUROPE * ASIA-SOUTHEAST1 * ASIA-SOUTH1 * AUSTRALIA-SOUTHEAST1 * EUROPE-WEST2EUROPE-WEST3EUROPE-WEST6EUROPE-WEST9EUROPE-WEST12 * その他

コアコマンド

検索イベント

クエリ構文を使用して UDM イベントを検索します。

# Search with UDM query
$ secops search --query "metadata.event_type = \"NETWORK_CONNECTION\"" --time-window 24 --max-events 100

# Search using natural language
$ secops search --nl-query "show me failed login attempts" --time-window 24

# Export results as CSV
$ secops search --query "metadata.event_type = \"USER_LOGIN\" AND security_result.action = \"BLOCK\"" \
    --fields "metadata.event_timestamp,principal.user.userid,principal.ip" \
    --time-window 24 --csv

エンティティ情報

IP、ドメイン、ファイル ハッシュに関する詳細情報を取得する:

$ secops entity --value "8.8.8.8" --time-window 24
$ secops entity --value "example.com" --time-window 24
$ secops entity --value "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" --time-window 24

統計情報

データに対して統計分析を実行します。

$ secops stats --query "metadata.event_type = \"NETWORK_CONNECTION\"
match:
  target.hostname
outcome:
  \$count = count(metadata.id)
order:
  \$count desc" --time-window 24

Feed Management

Google SecOps でデータ取り込みフィードを管理する:

フィードの一覧表示

$ secops feed list

フィードの作成

# Create an HTTP feed
$ secops feed create \
    --display-name "My HTTP Feed" \
    --details '{"logType":"projects/your-project-id/locations/us/instances/your-instance-id/logTypes/WINEVTLOG","feedSourceType":"HTTP","httpSettings":{"uri":"https://example.com/feed","sourceType":"FILES"}}'

フィードの更新

$ secops feed update --id "feed-123" --display-name "Updated Feed Name"

フィードを有効/無効にする

$ secops feed enable --id "feed-123"
$ secops feed disable --id "feed-123"

フィードを削除

$ secops feed delete --id "feed-123"

パーサーの管理

パーサーは、未加工のログデータを処理して UDM 形式に正規化します。

パーサーの一覧表示

$ secops parser list
$ secops parser list --log-type "WINDOWS"

パーサーの詳細を取得する

$ secops parser get --log-type "WINDOWS" --id "pa_12345"

パーサーを作成する

# Create from file
$ secops parser create --log-type "CUSTOM_LOG" --parser-code-file "/path/to/parser.conf"

# Create from string
$ secops parser create --log-type "CUSTOM_LOG" --parser-code "filter { mutate { add_field => { \"test\" => \"value\" } } }"

テスト パーサー

デプロイ前にサンプルログに対してパーサーをテストします。

# Test with inline logs
$ secops parser run \
    --log-type OKTA \
    --parser-code-file "./parser.conf" \
    --log '{"message": "Test log 1"}' \
    --log '{"message": "Test log 2"}'

# Test with logs from file
$ secops parser run \
    --log-type WINDOWS \
    --parser-code-file "./parser.conf" \
    --logs-file "./sample_logs.txt"

パーサーを有効化/無効化する

$ secops parser activate --log-type "WINDOWS" --id "pa_12345"
$ secops parser deactivate --log-type "WINDOWS" --id "pa_12345"

パーサーを削除

$ secops parser delete --log-type "WINDOWS" --id "pa_12345"

パーサー拡張機能の管理

パーサー拡張機能は、既存のパーサーを置き換えることなく拡張します。

拡張機能を一覧表示する

$ secops parser-extension list --log-type OKTA

拡張機能を作成

$ secops parser-extension create --log-type OKTA \
    --log /path/to/sample.log \
    --parser-config-file /path/to/parser-config.conf

拡張機能を有効にする

$ secops parser-extension activate --log-type OKTA --id "1234567890"

フォワーダー管理

転送ツールは、特定の構成でログを取り込むために使用されます。

フォワーダーの作成

# Basic forwarder
$ secops forwarder create --display-name "my-custom-forwarder"

# With metadata and settings
$ secops forwarder create --display-name "prod-forwarder" \
    --metadata '{"environment":"prod","team":"security"}' \
    --upload-compression true \
    --http-settings '{"port":80,"host":"example.com"}'

フォワーダーの一覧表示

$ secops forwarder list --page-size 100

Get Forwarder

$ secops forwarder get --id "1234567890"

Update Forwarder

$ secops forwarder update --id "1234567890" --display-name "updated-name"

Delete Forwarder

$ secops forwarder delete --id "1234567890"

ログの取り込み

ログを Google SecOps に取り込みます。

未加工ログを取り込む

# From file
$ secops log ingest --type "OKTA" --file "/path/to/okta_logs.json"

# With labels
$ secops log ingest --type "WINDOWS" --file "/path/to/logs.xml" \
    --labels "environment=production,team=security"

# Inline message
$ secops log ingest --type "WINDOWS" --message "{\"event\": \"data\"}"

UDM イベントを取り込む

$ secops log ingest-udm --file "/path/to/udm_event.json"

ログタイプの一覧を取得する

$ secops log types
$ secops log types --search "windows"

UDM マッピングを生成する

$ secops log generate-udm-mapping \
    --log-format "JSON" \
    --log '{"id":"123","user":"test_user","source_ip":"192.168.1.10"}'

ルールの管理

検出ルールを管理する:

ルールの一覧表示

$ secops rule list --page-size 50

ルールを作成

$ secops rule create --file "/path/to/rule.yaral"

ルールの更新

$ secops rule update --id "ru_12345" --file "/path/to/updated_rule.yaral"

ルールを有効/無効にする

$ secops rule enable --id "ru_12345" --enabled true
$ secops rule enable --id "ru_12345" --enabled false

Test Rule

過去のデータに対してルールをテストする:

# Test for last 24 hours
$ secops rule test --file "/path/to/rule.yaral" --time-window 24

# Test with specific time range
$ secops rule test --file "/path/to/rule.yaral" \
    --start-time "2023-07-01T00:00:00Z" \
    --end-time "2023-07-02T00:00:00Z" \
    --max-results 1000

ルールを検証する

$ secops rule validate --file "/path/to/rule.yaral"

ルールを削除

$ secops rule delete --id "ru_12345"

アラート管理

アラートを取得して管理するには:

$ secops alert --time-window 24 --max-alerts 50
$ secops alert --snapshot-query "feedback_summary.status != \"CLOSED\"" --time-window 24

ケース管理

ケースの詳細を取得します。

$ secops case --ids "case-123,case-456"

データテーブル

データテーブルは、検出ルールで使用する構造化データ コレクションです。

データテーブルを作成する

$ secops data-table create \
    --name "suspicious_ips" \
    --description "Known suspicious IP addresses" \
    --header '{"ip_address":"CIDR","description":"STRING","severity":"STRING"}'

行を追加する

$ secops data-table add-rows \
    --name "suspicious_ips" \
    --rows '[["192.168.1.100","Scanning activity","Medium"]]'

行の一覧表示

$ secops data-table list-rows --name "suspicious_ips"

データテーブルを削除します

$ secops data-table delete --name "suspicious_ips"

リファレンス リスト

リファレンス リストは、検出ルールの単純な値リストです。

リファレンス リストを作成する

$ secops reference-list create \
    --name "admin_accounts" \
    --description "Administrative accounts" \
    --entries "admin,administrator,root,superuser"

リファレンス リストを更新する

$ secops reference-list update \
    --name "admin_accounts" \
    --entries "admin,administrator,root,superuser,sysadmin"

参照リストを一覧表示する

$ secops reference-list list

データ エクスポート

分析用のデータをエクスポートする:

エクスポートを作成

# Export specific log type
$ secops export create \
    --gcs-bucket "projects/my-project/buckets/my-bucket" \
    --log-type "WINDOWS" \
    --time-window 24

# Export all logs
$ secops export create \
    --gcs-bucket "projects/my-project/buckets/my-bucket" \
    --all-logs \
    --time-window 168

エクスポートのステータスを確認する

$ secops export status --id "export-123"

エクスポートをキャンセル

$ secops export cancel --id "export-123"

エクスポート可能なログタイプを一覧表示する

$ secops export log-types --time-window 24

Gemini AI の統合

Gemini AI にセキュリティ分析情報をクエリします。

# Ask about security concepts
$ secops gemini --query "What is Windows event ID 4625?"

# Generate detection rules
$ secops gemini --query "Write a rule to detect PowerShell downloading files"

# Get vulnerability information
$ secops gemini --query "Tell me about CVE-2021-44228"

Gemini を有効にする:

$ secops gemini --opt-in

ダッシュボードの管理

ネイティブ ダッシュボードを管理する:

ダッシュボードを作成

$ secops dashboard create \
    --display-name "Security Overview" \
    --description "Security monitoring dashboard" \
    --access-type PRIVATE

ダッシュボードの一覧表示

$ secops dashboard list --page-size 10

ダッシュボードの更新

$ secops dashboard update --id dashboard-id \
    --display-name "Updated Security Dashboard" \
    --description "Updated security monitoring dashboard"

ダッシュボードのエクスポート/インポート

# Export
$ secops dashboard export --dashboard-names 'projects/your-project-id/locations/us/instances/your-instance-id/nativeDashboard/xxxxxxx'

# Import
$ secops dashboard import --dashboard-data-file dashboard_data.json

ダッシュボードにグラフを追加する

$ secops dashboard add-chart --dashboard-id dashboard-id \
    --display-name "DNS Query Chart" \
    --description "Shows DNS query patterns" \
    --query-file dns_query.txt \
    --chart_layout '{"startX": 0, "spanX": 12, "startY": 0, "spanY": 8}'

ダッシュボードを削除

$ secops dashboard delete --id dashboard-id

高度な例

パーサーのワークフローを完了する

パーサーを取得、テスト、デプロイします。

# List parsers
$ secops parser list --log-type "OKTA" > okta_parsers.json

# Get parser details
PARSER_ID=$(cat okta_parsers.json | jq -r '.[0].name' | awk -F'/' '{print $NF}')
$ secops parser get --log-type "OKTA" --id "$PARSER_ID" > parser_details.json

# Extract parser code
cat parser_details.json | jq -r '.cbn' | base64 -d > okta_parser.conf

# Test parser
$ secops parser run \
    --log-type "OKTA" \
    --parser-code-file "okta_parser.conf" \
    --logs-file "sample_logs.txt" > parser_result.json

# Activate if successful
$ secops parser activate --log-type "OKTA" --id "$PARSER_ID"

検索と書き出しのワークフロー

イベントを検索して結果をエクスポートする:

# Search for failed logins
$ secops search \
    --query "metadata.event_type = \"USER_LOGIN\" AND security_result.action = \"BLOCK\"" \
    --fields "metadata.event_timestamp,principal.user.userid,principal.ip" \
    --time-window 24 \
    --csv > failed_logins.csv

# Get entity details for suspicious IPs
cat failed_logins.csv | awk -F',' '{print $3}' | sort -u | while read ip; do
    secops entity --value "$ip" --time-window 72
done

ルールのテストとデプロイ

検出ルールを作成、テスト、デプロイする:

# Create rule file
cat > suspicious_activity.yaral << 'EOF'
rule suspicious_powershell {
    meta:
        description = "Detects suspicious PowerShell activity"
        severity = "Medium"
    events:
        $e.metadata.event_type = "PROCESS_LAUNCH"
        $e.principal.process.file.full_path = /powershell\.exe/i nocase
        $e.principal.process.command_line = /download|invoke-expression|hidden/i nocase
    condition:
        $e
}
EOF

# Validate rule
$ secops rule validate --file suspicious_activity.yaral

# Test against historical data
$ secops rule test --file suspicious_activity.yaral --time-window 168

# Create and enable if tests pass
$ secops rule create --file suspicious_activity.yaral
$ secops rule enable --id "ru_generated_id" --enabled true

トラブルシューティング

一般的な問題

認証エラー

認証エラーが発生した場合は、次の操作を行います。

  1. 認証情報が有効であることを確認する
  2. サービス アカウントに必要な権限があることを確認する
  3. ADC が正しく構成されていることを確認します。gcloud auth application-default login

リージョン エラー

リージョン関連のエラーが発生した場合:

  1. リージョンがサポートされていることを確認する
  2. インスタンスが指定されたリージョンにあることを確認する
  3. --region フラグを使用するか、構成で設定する

レート制限

レート制限に関する問題の場合:

  1. API 呼び出しの頻度を減らす
  2. 大規模な結果セットにページ割り付けを使用する
  3. 再試行に指数バックオフを実装する

困ったときは

任意のコマンドのヘルプを表示します。

$ secops --help
$ secops search --help
$ secops rule create --help

chronicle_cli からの移行

以前の chronicle_cli から移行する場合は、一般的なコマンドのマッピングは次のとおりです。

chronicle_cli secops
chronicle_cli feeds create secops feed create
chronicle_cli feeds list secops feed list
chronicle_cli feeds update secops feed update
chronicle_cli feeds delete secops feed delete
chronicle_cli parsers list secops parser list
chronicle_cli parsers create secops parser create
chronicle_cli parsers activate secops parser activate
chronicle_cli forwarders create secops forwarder create
chronicle_cli forwarders list secops forwarder list

新しい secops CLI には、chronicle_cli では使用できない次のような多くの追加機能があります。

  • 自然言語検索
  • Gemini AI の統合
  • ダッシュボードの管理
  • ルールのテストと検証
  • データテーブルと参照リスト
  • ケース管理
  • その他

参考情報