OpenSearch - Access control
Permissions
IAM ポリシーにおける Action と同じものと考えて良さそう。指定可能なアクションのリストは以下。
https://opensearch.org/docs/latest/security/access-control/permissions/
Action group
IAM ポリシーのアクションで *
を付けたときのような概念かと思ったが、少し違うらしい。
SEARCH
のように、指定できる値が事前定義されている。その実体がどの Action を指定しているのかは、そのワード次第らしい。
ただし、やっていることのノリは IAM でも良くやる List*
のような CRUD の動詞指定とか、 securityhub:*
のようなサービス名指定に特定のエイリアスを付けたもの(要するに AWS 定義のマネージドポリシー)などと近そうな印象。
Role
OpenSearch の内部概念としての Role であって、IAM Role とは異なる概念。permission または action group(つまり実質は action の集合)でもってスコープを定義するための道具。cluster, index,. document, field に関する指定をする。
たとえば「分析」業務だけをやる人に cluster permission は不要だろうし、READ
action group の許可を持っている(かもしれない)。
仮にこの人が Security Hub 関連のイベントを見ている人であれば、index に対する権限は security-hub-*
のパターンを持つ index に対する許可になるかもしれない。さらに、許可されているインデックスの中でも、特定のフィールドだけはアクセスを許可しないようにすることも可能。
※特定のフィールドの値を評価して、その値が一致する場合のドキュメントのみアクセスを許可するようにしたいなと思った。できそうな気がしているが、そのうち調べる。マルチテナンシーの実装。
Backend Role (optional)
AD や LDAP のような外部の認証システムを用いる場合に使うもの。
例えば、特定の部署やチームが同じことをやりたい場合、そのメンバーを単一の Backend Role に割り当てることが可能になる。権限変更は IdP 側を変えればいいので、管理が楽になる。
User
OpenSearch cluster へのリクエストを行う主体のこと。username/password のような credential を持つ。
Role mapping
User の認証が通れば、特定の Role に引き受けることができる。Role mapping は Role -> User (or Backend Role) への対応関係を定義する。
Role は実質的な権限の内容を定義しているもので、mapping によって特定の User / Backend Role に対して対応付けられる。
"Backend Role" という言葉の解釈について。
最初は Role という単語との対比で Role の後ろにあるようなイメージを持ってしまったが、そのイメージはおそらく誤り。
外部の認証システムが管理している ID の裏側で(OpenSearch 側として)対応する識別子を持つものだから "backend" という名称が使われている、と解釈した方が意味としての通りは妥当。
OpenSearch での管理方法として見ると、Backend Role はむしろ Role よりも手前に位置するイメージを持った方が良い。Mapping の対応関係が Backend Role -> Role の方向であることからもそう解釈するのが自然。
Default (predefined) action groups
ref: https://opensearch.org/docs/latest/security/access-control/default-action-groups/
https://opensearch.org/docs/latest/security/access-control/default-action-groups/
IAM のマネージドポリシー的なやつのリスト。
このへんを見ておけば、どういう句(?)が使えるのか、なんとなくノリは掴めるはず。
いくつかメモっておく
cluster:*
cluster:admin/*
cluster:admin/snapshot/*
cluster:admin/repository/*
cluster:admin/ingest/pipeline/*
cluster:admin/mappings/*
indices:admin/*
indices:/data/read/*
indices:/data/write/*
indices:admin/aliases*