OpenSearch - Access control

ref: https://opensearch.org/docs/latest/security/access-control/index/
OpenSearch としての概念と、OpenSearch Service としての概念が混じるので、できるだけ区別していくつもり

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 に対して対応付けられる。
主要概念の関連性を図に起こしてみた
Security Plugin を有効化することで、Backend Role に IAM Role ARN を指定することも可能になる。こうすることで、IAM Role を OpenSearch Role に紐づけることが可能。この設定をやりたい場合は、以下のような前提条件を満たす必要がある。
- その IAM Role が OpenSearch Service Domain に対する権限を持っていること (例えば
es:ESHttpGet
など) - 対象の Domain のアクセスポリシーが、IAM Role からのリクエストを許可するように構成されていること (ex. Principal による指定)
- その IAM Role を用いた HTTP リクエストに SigV4 署名を行うこと

"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*

multi-tenancy
今すぐ必要じゃないので、ドキュメントのリンクだけ貼っておく。ダッシュボード用の機能っぽい雰囲気。
https://opensearch.org/docs/latest/security/multi-tenancy/tenant-index/
https://opensearch.org/docs/latest/security/multi-tenancy/multi-tenancy-config/
https://opensearch.org/docs/latest/security/multi-tenancy/dynamic-config/

認証に関係する OpenSearch ではない要素について見ていく。
Dashboard (Kibana) と、OpenSearch 本体に対するアクセス制御は別物の概念だし、機能的にも区別があるらしい。
Security Configuration のタブに出てくる要素の表示の仕方にも意味があるっぽい
中央の列は Authentication for **OpenSearch Dashboards/Kibana**
と書いてあるように Dashboard への(ブラウザ経由の)アクセスに関する話であって OpenSearch 本体のことではない(らしい)。Cognito との連携も同じで Dashboard に関する話をしているぽい
今日時点で新しい IdC との連携の機能は IAM Identity Center(IDC) enabled for **API** Access
と書いてある。画面上にも API と書いてあるように Dashboard のことは含まれていない。あくまで OpenSearch 本体に関する話。
マネコンの Security Configuration のタブで編集画面に書いてあるテキストを確認してみる。
SAML authentication for OpenSearch Dashboards/Kibana
SAML authentication lets you use your existing identity provider for single sign-on for OpenSearch Dashboards/Kibana.
JWT authentication and authorization
JSON Web Token (JWT) auth lets you use your existing identity provider for single sign-on for OpenSearch.
IAM Identity Center (IDC) Authentication
IAM Identity Center allows you to connect your existing identity source and gives your AWS applications a common view of your users. Your users get a streamlined, consistent Single Sign-On experience across AWS applications.
"IAM Identity Center (IDC) Authentication" に関しては、有効化する項目に "Enable API access authenticated with IAM Identity Center" と書いてある通りで Dashboard には関係がないらしい。