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 | 表示名 |
| メールアドレス | |
| 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 |
設定の確認ツール |
重要ポイント
- ロールで適切なアクセス制御を行う
- インデックスはデータの種類ごとに分ける
- カスタマイズは必ず**
local/**に保存する - **
btool**で設定の問題を診断する
練習問題
問題1: 基本
analystロールを作成し、mainとweb_logsインデックスのみアクセスできるように設定してください。
問題2: 応用
イベントタイプとタグを作成して、セキュリティイベント(認証失敗、権限エラー)をtag=securityで検索できるようにしてください。
チャレンジ問題
カスタムSplunkアプリ(ディレクトリ構造、app.conf、ダッシュボード、ナビゲーション)を手動で作成し、Splunkに認識させてください。
参考リンク
次回予告: Day 10では「総合プロジェクト」に取り組みます。これまで学んだすべてのSplunk技術を使って、セキュリティ監視ダッシュボードを構築しましょう!