OpenDistroで FGAC

# 前提

CloudTrailのログを流し込んでいるとします。

# Kibanaでの管理者操作

## 一般ユーザー作成

画面左メニューの"Security"をクリックし、人型マークの"Internal User Database"をクリック

<img width="796" alt="スクリーンショット 0002-08-13 13.06.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/3c56583e-fd39-7da9-0286-861b90de35d9.png">

"+"をクリックし、以下の値を入れ"Submit"をクリックしユーザー作成
ユーザー名：user4
パスワード：任意の値

<img width="917" alt="スクリーンショット 0002-08-13 13.07.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/daf56c40-f29f-ee8c-47ec-e2f14b658b58.png">

## テナントの作成

"Tenants"をクリック

<img width="796" alt="スクリーンショット 0002-08-13 13.06.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/3c56583e-fd39-7da9-0286-861b90de35d9.png">

"+"をクリック

<img width="1150" alt="スクリーンショット 0002-08-13 13.28.52.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/65f916b3-7ba5-5b90-5aa6-96809194cdb0.png">

テナント名に"yokogushi"と入れて[Submit]

<img width="913" alt="スクリーンショット 0002-08-13 13.29.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/1a67147f-c663-2020-f1e1-1325799e103d.png">


## ロール作成

"Roles"をクリック

<img width="796" alt="スクリーンショット 0002-08-13 13.06.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/3c56583e-fd39-7da9-0286-861b90de35d9.png">

"+"をクリック

<img width="1240" alt="スクリーンショット 0002-08-13 13.11.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/92a067d0-85f6-95d1-e071-b3ced4b95cfe.png">

以下の値を入力し、[Save Role Definition]をクリックする

* Overviewタブ
  * Role name:kansa-role

* Cluster Permissionsタブ
  * "Permissions:Action Groups"で[Add Action Group]をクリックして"data_access"を選択

* Index Permissionsタブ
  * [Add index permissions]をクリック、Index patternsに"log-aws-cloudtrail-*"を入力
  * "Permissions:Action Groups"で[Add Action Group]をクリックして"read"を選択
 
* Tenant Permissionsタブ
  * [Add tenant permissions]をクリックし、「Add tenant pattern]をクリックし、"yokogushi*"を入力
  * Permissionsで[Add Field]をクリックし、"kibana_all_read"を選択

<img width="842" alt="スクリーンショット 0002-08-13 13.34.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/1616b0b1-6f55-6a04-fa7a-76b8ec7c854f.png">

#### Action Group

ロールで設定した"data_access"と"read"はAction Groupと呼ばれ、権限のセットです。
例えば、readは、"indices:data/read*"と"indices:admin/pammpings/fields/get*"のSingle Permissionのセットです。
https://opendistro.github.io/for-elasticsearch-docs/docs/security/access-control/default-action-groups/

このAction Groupの中にAction Groupをセットすることもできます。data_accessがそんな感じでした。

## ユーザーとロールのマッピング

"Role Mappings"をクリック

<img width="796" alt="スクリーンショット 0002-08-13 13.06.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/3c56583e-fd39-7da9-0286-861b90de35d9.png">

"+"をクリック

<img width="1263" alt="スクリーンショット 0002-08-13 13.22.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/07e0a481-cf1f-8ae9-f542-1e6da0f16307.png">

ロールにkansa-roleを選び、ユーザーにuser4を選び[Submit]をクリック

<img width="911" alt="スクリーンショット 0002-08-13 13.23.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/14ce185f-2784-479d-0624-1ecfc90abea1.png">

## Index Pattern/Visual/Dashboard作成

テナントを"yokogushi"に移動します。
左メニューのTenantsをクリックして、yokogushiの文字列をクリックします。

![スクリーンショット 0002-08-29 10.07.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/aba7b935-b605-38ff-3f6f-67eee0736d53.png)

このテナントにはインデックスパターン定義がないので作成します。
左メニューのManagementをクリックし、画面右上の[Create Index Pattern]をクリックします。

![スクリーンショット 0002-08-29 10.10.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/1f706643-4735-54f8-3954-6a55db6c929d.png)

今回はcloudtrailとGuardDutyのインデックスパターンを作ります。
一般ユーザーにはCloudTrailのみ許可しているので、CloudTrailは見えるがGuardDutyは見えないというシナリオです。

![スクリーンショット 0002-08-29 10.10.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/14308097-7d10-6467-d604-8d230f9f0d65.png)

Discoverでデータが見えることを確認します。

![スクリーンショット 0002-08-29 10.17.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/b182a94c-3ba5-a591-ed81-76cf9218d99b.png)

時間があればVisualやDashboardも作成してください

# Kibanaでの一般ユーザー操作

## user4でログインし直す

テナントyokogushiを選択

<img width="1276" alt="スクリーンショット 0002-08-13 13.38.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/216e1468-41eb-270a-ad4e-65cf436590dc.png">

Discoverで
log-aws-cloudtrail-*のログは見える

![スクリーンショット 0002-08-29 10.45.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/f853276a-debd-8338-232a-11c435b37754.png)

他は見えない

![スクリーンショット 0002-08-29 10.46.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/343bb168-0b2d-982d-a32b-0d0f4695bd6e.png)

ダッシュボードで、
左側のlog-aws-cloudtrail-*を元にしたものは見える
右側のGuadDutyを元にしたものは権限がないので見えない

![スクリーンショット 0002-08-29 10.45.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/a67f1b6b-670b-1a85-fbe4-9f54677f8e8f.png)

## イメージ図

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27932/d702928a-16af-0f92-5bda-65cb55b2727b.png)


# 感想

同じテナント内だと、そもそもDiscoverでのIndexマッピング情報や、ダッシュボードなどが見えてしまう(中身はエラーとなり見えない)。FGACのPermissionでは、indexのリスト、ダッシュボードのリストの制限はできなそう
必要がないIndexマッピングやダッシュボードなどを見せたくない場合はテナントを分けることになりそう。Indexマッピングやダッシュボードを他のテナントでも使いたい場合は、テンプレートとしてエクスポートし、他のテナントでインポートになりそう

## シングルテナントでやる場合

* メリット：
  * ダッシュボードを見るなどの表示やサーチだけの用途なら権限設定がシンプルになる
  * 管理者側でダッシュボード作成が1つのテナントだけで済むので手間が少ない
* デメリット：
  * indexやダッシュボードはリストされちゃう。選択してもエラーにはなる
  * アラートや異常値検知やダッシュボード作ったりなど書き込み操作するニーズが出てきたら細かい権限制御が必要になる。

## マルチテナント
* メリット：
  * indexやダッシュボードが自身のテナントのものだけが表示されて見やすい
  * アラートや異常値検知やダッシュボード作ったりなど書き込み操作するニーズが出てきても、制御しやすい
* デメリット
  * 管理者側でダッシュボード作成をテナントごとにしないといけない。テンプレート化するなどで手間は減らせるが手間はある。

# 参考情報

AmazonESのFGAC
https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/fgac.html

Access Control Permission
https://opendistro.github.io/for-elasticsearch-docs/docs/security/access-control/permissions/

OpenDistro Security
https://opendistro.github.io/for-elasticsearch/features/security.html