[Splunk]ユーザーによって参照可能データを絞るテクニック
やりたいこと
- Splunkにログインするユーザー(及びロール)によって表示可能なデータとダッシュボードを制御したい
- Splunkを使っていると、システム担当以外のメンバー、またはチームにも特定のダッシュボードと特定のデータのみにアクセスさせる要件が出てくる
- 単純なものであればRoleに参照indexの指定だけですむのだが、ここではindex内の特定期間のデータに絞り込んで表示制限をかけてみました。
- イメージはこちら。ポイントは利用デバイスに利用期間情報が含まれている点です。
How to Build
- アカウントとデバイスに関するlookupアセットの用意
- 基本となるダッシュボードApp(app4sysadm)の作成
- ユーザ向けの参照ロール(customer_user)の作成
- ユーザの作成
- ユーサ向けダッシュボードApp(app4user)の作成
- Appの権限設定
1. アカウントとデバイスに関するlookupアセットの用意
- アカウントリストのlookupを用意
- Splunk管理画面にログインするアカウント情報(会社名、ユーザ名)を用意します
- デバイス利用リストのlookupを用意
- デバイスの利用履歴(device、会社名、利用期間)を用意します。
2. 基本となるダッシュボードApp(app4sysadm)の作成
- まずは全データにアクセスできるシステム管理者向けのApp(ダッシュボード)を用意します
- クリックしたレコードに紐づく時間をtoken化して2段目以降のパネルにわたすようなパネルを用意しました
- 1つ目のパネルのサーチは以下のようになっています。
- アカウント情報とデバイス情報をマージするサーチです
spl
|inputlookup account
|lookup devicelist customer
| eval index = lower(deviceid)
|eval pack = mvzip(mvzip(index,from,","),to,",")
|mvexpand pack
|table username customer pack
|rex field=pack "(?<index>.*)\,(?<from>.*)\,(?<to>.*)"
|eval from2 = strptime(from,"%Y-%m-%d")
|eval to2 = strptime(to,"%Y-%m-%d")
|fields - pack
|table index username customer from to from2 to2
|sort index
|rename index as デバイス名, username as Account, customer as 顧客名, from as 利用開始日, to as 利用終了日
- lookupでマージしただけだとキレイなリストにならないので、mvzip&mvexpandしたりして加工しています。
3. ユーザ向けの参照ロール(customer_user)の作成
4. ユーザの作成
- 1で作成したロールを割り当てたユーザ(user_s)を用意します
5. ユーサ向けダッシュボードApp(app4user)の作成
- 続いてシステム管理者向けのAppをコピーしてユーザ用Appを用意します。
- app内のメニューをシンプルにする際は[設定]-[ユーザーインターフェイス]-[ナビゲーションメニュー]-[default]にて修正
- 編集権限をなくす際には、「6. Appの権限設定」を参考に。
このユーザ用Appにエッセンスを加えることで、たちまち特定期間の参照可能なデータのみにアクセス可能な画面が用意できます
ポイント:REST APIを使ってログインユーザを確認
SPL
|rest /services/authentication/current-context splunk_server=local
|fields + username
|lookup account username
spl
|rest /services/authentication/current-context splunk_server=local
|fields + username
|lookup account username
|lookup devicelist customer
|eval index = lower(deviceid)
|eval pack = mvzip(mvzip(index,from,","),to,",")
|mvexpand pack
|table username customer pack
|rex field=pack "(?<index>.*)\,(?<from>.*)\,(?<to>.*)"
|eval from2 = strptime(from,"%Y-%m-%d")
|eval to2 = strptime(to,"%Y-%m-%d")
|fields - pack
|table index username customer from to from2 to2
|sort index
|rename index as デバイス名, username as Account, customer as 顧客名, from as 利用開始日, to as 利用終了日
- そうするとadminでアクセスすると、adminアカウントに紐づく利用実績がdeviceのlookupにないため何もデータが表示されません。
- しかしSplunk管理画面をログアウトして今度はuser_sでログインすると、lookup内にuser_sに関連するレコードがあるため、user_sが参照可能なデータのみ閲覧ができるようになります。
6. Appの権限設定
- app4userのcustomer_userロールはReadにしておくことでダッシュボードの編集を制限できます
- app4sysadのcutomer_userロールはRead/Writeのどちらもチェックを外しておくことで不要なAppは参照できなくなります。
まとめ
- ログインアカウント名をrestのSPLコマンドで表示することができる
- lookupを使えばフィルタ条件としても利用できる
- mvzip&mvexpandはデータを一時的にパックして持ち運ぶのに便利
Author And Source
この問題について([Splunk]ユーザーによって参照可能データを絞るテクニック), 我々は、より多くの情報をここで見つけました https://qiita.com/odorusatoshi/items/6aa25f613c28f3bd05e1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .