LoginSignup
7
6

More than 3 years have passed since last update.

[Splunk]ユーザーによって参照可能データを絞るテクニック

Last updated at Posted at 2020-06-02

やりたいこと

  • Splunkにログインするユーザー(及びロール)によって表示可能なデータとダッシュボードを制御したい
  • Splunkを使っていると、システム担当以外のメンバー、またはチームにも特定のダッシュボードと特定のデータのみにアクセスさせる要件が出てくる
  • 単純なものであればRoleに参照indexの指定だけですむのだが、ここではindex内の特定期間のデータに絞り込んで表示制限をかけてみました。
  • イメージはこちら。ポイントは利用デバイスに利用期間情報が含まれている点です。 スクリーンショット 2020-06-01 18.31.31.png

How to Build

  1. アカウントとデバイスに関するlookupアセットの用意
  2. 基本となるダッシュボードApp(app4sysadm)の作成
  3. ユーザ向けの参照ロール(customer_user)の作成
  4. ユーザの作成
  5. ユーサ向けダッシュボードApp(app4user)の作成
  6. Appの権限設定

1. アカウントとデバイスに関するlookupアセットの用意

  • アカウントリストのlookupを用意
    • Splunk管理画面にログインするアカウント情報(会社名、ユーザ名)を用意します
  • デバイス利用リストのlookupを用意
    • デバイスの利用履歴(device、会社名、利用期間)を用意します。

スクリーンショット 2020-06-01 18.32.24.png

2. 基本となるダッシュボードApp(app4sysadm)の作成

  • まずは全データにアクセスできるシステム管理者向けのApp(ダッシュボード)を用意します
  • クリックしたレコードに紐づく時間をtoken化して2段目以降のパネルにわたすようなパネルを用意しました

スクリーンショット 2020-06-01 19.59.43.png

  • 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したりして加工しています。
    • まずはlookupしてマッチング スクリーンショット 2020-06-01 21.29.32.png
    • 次にmvzipで1フィールドに束ねてpackフィールドを作成 スクリーンショット 2020-06-01 21.29.46.png
    • そして、packを再び展開して必要なtableに絞る スクリーンショット 2020-06-01 21.30.05.png
    • 最後はpackをrexコマンドでフィールド抽出 スクリーンショット 2020-06-01 21.30.13.png

3. ユーザ向けの参照ロール(customer_user)の作成

  • まず特定データにアクセスするための最小権限にしたロールを1つ作成します スクリーンショット 2020-06-01 18.39.23.png

4. ユーザの作成

  • 1で作成したロールを割り当てたユーザ(user_s)を用意します

スクリーンショット 2020-06-01 18.39.16.png

5. ユーサ向けダッシュボードApp(app4user)の作成

  • 続いてシステム管理者向けのAppをコピーしてユーザ用Appを用意します。
    • app内のメニューをシンプルにする際は[設定]-[ユーザーインターフェイス]-[ナビゲーションメニュー]-[default]にて修正
    • 編集権限をなくす際には、「6. Appの権限設定」を参考に。

スクリーンショット 2020-06-02 9.06.07.png

  • このユーザ用Appにエッセンスを加えることで、たちまち特定期間の参照可能なデータのみにアクセス可能な画面が用意できます

  • ポイント:REST APIを使ってログインユーザを確認

SPL
|rest /services/authentication/current-context splunk_server=local 
|fields + username
|lookup account username
  • |restでsplunkにログインしているアカウント名を表示できます
    スクリーンショット 2020-05-25 13.08.03.png

  • 上の3行を追加したもの

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にないため何もデータが表示されません。

スクリーンショット 2020-06-01 20.18.11.png

  • しかしSplunk管理画面をログアウトして今度はuser_sでログインすると、lookup内にuser_sに関連するレコードがあるため、user_sが参照可能なデータのみ閲覧ができるようになります。

Untitled.png

6. Appの権限設定

  • app4userのcustomer_userロールはReadにしておくことでダッシュボードの編集を制限できます
  • app4sysadのcutomer_userロールはRead/Writeのどちらもチェックを外しておくことで不要なAppは参照できなくなります。

スクリーンショット 2020-06-01 18.37.48.png

まとめ

  • ログインアカウント名をrestのSPLコマンドで表示することができる
  • lookupを使えばフィルタ条件としても利用できる
  • mvzip&mvexpandはデータを一時的にパックして持ち運ぶのに便利
7
6
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6