10日で覚えるSplunkDay 9: Splunkの管理

Day 9: Splunkの管理

今日学ぶこと

  • ユーザーとロールの管理
  • インデックスの管理
  • ナレッジオブジェクト
  • Splunkアプリ
  • 設定ファイルの優先順位

ユーザーとロールの管理

ロールの階層

flowchart TB
    Admin["admin<br>フルアクセス"]
    Power["power<br>高度なサーチ・レポート作成"]
    User["user<br>基本的なサーチ・ダッシュボード閲覧"]
    CanDelete["can_delete<br>イベント削除権限"]
    Admin --> Power --> User
    Admin --> CanDelete
    style Admin fill:#ef4444,color:#fff
    style Power fill:#f59e0b,color:#fff
    style User fill:#22c55e,color:#fff
    style CanDelete fill:#8b5cf6,color:#fff

デフォルトロール

ロール 権限
admin すべての操作、設定変更、ユーザー管理
power レポート・アラート作成、ダッシュボード共有
user サーチ実行、個人ダッシュボード作成
can_delete イベントの削除

ユーザーの作成

Settings > Users > Add new

設定 説明
Username ログインID
Full name 表示名
Email メールアドレス
Roles 割り当てるロール
Default app デフォルトアプリ

カスタムロールの作成

Settings > Roles > Add new

Name: analyst
Inheritance: user
Allowed indexes: main, web_logs, security
Search filter: index=main OR index=web_logs OR index=security
Max search jobs: 5
Max concurrent searches: 3

authorize.conf

# authorize.conf
[role_analyst]
importRoles = user
srchFilter = index=main OR index=web_logs OR index=security
srchIndexesAllowed = main;web_logs;security
srchIndexesDefault = main
srchJobsQuota = 5
cumulativeSrchJobsQuota = 10

インデックスの管理

インデックスの設計

flowchart TB
    subgraph Indexes["インデックス設計例"]
        Main["main<br>一般ログ"]
        Web["web_logs<br>Webアクセスログ"]
        Security["security<br>セキュリティイベント"]
        App["application<br>アプリケーションログ"]
        Internal["_internal<br>Splunk内部ログ"]
    end
    style Main fill:#3b82f6,color:#fff
    style Web fill:#22c55e,color:#fff
    style Security fill:#ef4444,color:#fff
    style App fill:#f59e0b,color:#fff
    style Internal fill:#8b5cf6,color:#fff

インデックスの作成

# indexes.conf
[web_logs]
homePath = $SPLUNK_DB/web_logs/db
coldPath = $SPLUNK_DB/web_logs/colddb
thawedPath = $SPLUNK_DB/web_logs/thaweddb
maxTotalDataSizeMB = 50000
frozenTimePeriodInSecs = 7776000
maxDataSize = auto_high_volume

保持期間の設定

パラメータ 説明
frozenTimePeriodInSecs データ保持期間 7776000(90日)
maxTotalDataSizeMB 最大データサイズ 50000(50GB)
coldToFrozenDir アーカイブ先 /archive/web_logs

インデックスの監視

# インデックスのサイズ確認
| dbinspect index=main
| stats sum(sizeOnDiskMB) AS size_mb by index

# インデックスごとのイベント数
| tstats count where index=* by index
| sort -count

# 日次のインジェスト量
index=_internal source=*license_usage.log type=Usage
| stats sum(b) AS bytes by idx
| eval gb = round(bytes/1024/1024/1024, 2)
| sort -gb

ナレッジオブジェクト

ナレッジオブジェクトはSplunkの設定やカスタマイズを管理する仕組みです。

flowchart TB
    subgraph KO["ナレッジオブジェクト"]
        SavedSearch["保存済みサーチ<br>レポート・アラート"]
        EventType["イベントタイプ<br>イベントの分類"]
        Tag["タグ<br>フィールド値のラベル"]
        FieldExtraction["フィールド抽出<br>正規表現・変換"]
        Lookup["ルックアップ<br>外部データの紐付け"]
        Macro["マクロ<br>再利用可能なSPL"]
        DataModel["データモデル<br>構造化データ定義"]
    end
    style SavedSearch fill:#3b82f6,color:#fff
    style EventType fill:#22c55e,color:#fff
    style Tag fill:#f59e0b,color:#fff
    style FieldExtraction fill:#8b5cf6,color:#fff
    style Lookup fill:#ef4444,color:#fff

イベントタイプ

イベントをカテゴリに分類します。

# eventtypes.conf
[web_error]
search = index=web_logs status>=400

[auth_failure]
search = index=security action=failed sourcetype=auth_log
# イベントタイプで検索
eventtype=web_error
| stats count by host

タグ

フィールド値にラベルを付けます。

# tags.conf
[eventtype=web_error]
error = enabled
web = enabled

[eventtype=auth_failure]
error = enabled
authentication = enabled
# タグで検索
tag=error
| stats count by eventtype

データモデル

構造化されたデータのスキーマを定義します。Pivot機能やアクセラレーションに使用されます。

概念 説明
データモデル フィールドの構造定義
データセット データモデル内のテーブル
Pivot GUIでの分析ツール
アクセラレーション サーチの高速化

Splunkアプリ

アプリの構造

$SPLUNK_HOME/etc/apps/my_app/
├── default/
│   ├── app.conf          # アプリ設定
│   ├── data/
│   │   └── ui/
│   │       ├── views/    # ダッシュボード
│   │       └── nav/      # ナビゲーション
│   ├── savedsearches.conf # 保存済みサーチ
│   ├── macros.conf        # マクロ
│   └── transforms.conf    # ルックアップ定義
├── local/                  # ユーザーカスタマイズ
├── lookups/               # ルックアップファイル
├── metadata/
│   └── default.meta       # 権限設定
└── bin/                   # スクリプト

app.conf

[install]
is_configured = true

[ui]
is_visible = true
label = My Security App

[launcher]
description = Custom security monitoring application
version = 1.0.0
author = admin

ナビゲーション(default.xml)

<nav>
  <view name="overview" default="true" />
  <view name="errors" />
  <view name="performance" />
  <collection label="Reports">
    <view name="daily_report" />
    <view name="weekly_report" />
  </collection>
</nav>

人気のSplunkbase アプリ

アプリ 説明
Splunk Enterprise Security (ES) SIEM
Splunk IT Service Intelligence (ITSI) IT監視
Splunk Add-on for AWS AWSデータ取り込み
Splunk Add-on for Microsoft 365 M365データ取り込み
DB Connect データベース連携

設定ファイルの優先順位

Splunkの設定は複数のレイヤーで管理され、優先順位があります。

flowchart TB
    System["system/local<br>最高優先"]
    AppLocal["app/local<br>ユーザーカスタマイズ"]
    AppDefault["app/default<br>アプリのデフォルト"]
    SystemDefault["system/default<br>最低優先"]
    System --> AppLocal --> AppDefault --> SystemDefault
    style System fill:#ef4444,color:#fff
    style AppLocal fill:#f59e0b,color:#fff
    style AppDefault fill:#22c55e,color:#fff
    style SystemDefault fill:#3b82f6,color:#fff
優先順位 パス 説明
1(最高) system/local/ システム全体のカスタマイズ
2 app/local/ アプリ内のカスタマイズ
3 app/default/ アプリのデフォルト設定
4(最低) system/default/ Splunkのデフォルト

重要: カスタマイズは必ずlocal/ディレクトリに行います。default/は変更しません。

btool での設定確認

# 有効な設定を確認
/opt/splunk/bin/splunk btool inputs list --debug

# 特定のスタンザを確認
/opt/splunk/bin/splunk btool props list my_sourcetype --debug

Splunkの健全性監視

内部ログの確認

# Splunk内部のエラー
index=_internal log_level=ERROR
| stats count by component
| sort -count

# サーチのパフォーマンス
index=_audit action=search
| stats avg(total_run_time) AS avg_runtime, max(total_run_time) AS max_runtime by user
| sort -avg_runtime

# ライセンス使用量
index=_internal source=*license_usage.log type=Usage
| timechart span=1d sum(b) AS bytes
| eval gb = round(bytes/1024/1024/1024, 2)

実践: 管理タスクの実行

# 1. インデックスの健全性チェック
| rest /services/data/indexes
| table title, currentDBSizeMB, maxTotalDataSizeMB, totalEventCount
| eval usage_pct = round(currentDBSizeMB/maxTotalDataSizeMB*100, 1)
| sort -currentDBSizeMB

# 2. ユーザーアクティビティ監査
index=_audit action=search
| stats count AS search_count, latest(_time) AS last_active by user
| eval last_active = strftime(last_active, "%Y-%m-%d %H:%M")
| sort -search_count

# 3. スケジュールサーチの状況
| rest /services/saved/searches
| where is_scheduled=1
| table title, cron_schedule, next_scheduled_time, dispatch.earliest_time, dispatch.latest_time
| sort next_scheduled_time

# 4. フォワーダーの接続状態
index=_internal source=*metrics.log group=tcpin_connections
| stats latest(connectionType) AS type, latest(version) AS version, latest(fwdType) AS fwd_type by hostname
| sort hostname

まとめ

概念 説明
ロール ユーザー権限の定義
インデックス データの保存先と保持設定
ナレッジオブジェクト イベントタイプ、タグ、マクロ等
アプリ 機能をパッケージ化した単位
設定優先順位 local/ > default/
btool 設定の確認ツール

重要ポイント

  1. ロールで適切なアクセス制御を行う
  2. インデックスはデータの種類ごとに分ける
  3. カスタマイズは必ず**local/**に保存する
  4. **btool**で設定の問題を診断する

練習問題

問題1: 基本

analystロールを作成し、mainweb_logsインデックスのみアクセスできるように設定してください。

問題2: 応用

イベントタイプとタグを作成して、セキュリティイベント(認証失敗、権限エラー)をtag=securityで検索できるようにしてください。

チャレンジ問題

カスタムSplunkアプリ(ディレクトリ構造、app.conf、ダッシュボード、ナビゲーション)を手動で作成し、Splunkに認識させてください。


参考リンク


次回予告: Day 10では「総合プロジェクト」に取り組みます。これまで学んだすべてのSplunk技術を使って、セキュリティ監視ダッシュボードを構築しましょう!