OpenSearchダッシュボードへのサインイン手段としてKeycloak+SAMLを使ったSSOを設定したので、備忘録としてアウトプット。
- OpenSearchのバージョン:OpenSearch_2_11_R20231113-P3
- Keycloakのバージョン:23.0.7
また、Keycloakは例のごとくWSL上で起動したものを使用する。
Openserach側の設定
セキュリティ設定のタブの「設定」をクリックします。
「OpenSearch Dashboards/Kibana 用の SAML 認証」の「SAML認証を有効化」にチェックを付けます
「IdPメタデータをインポート」にKeycloakのメタデータをコピペします
「SAMLマスターバックエンドロール」に管理者権限を設定するロールの名前を入力します
(オプションですが、最初に色々な設定を行うためにマスターの権限が必要なので、設定します)
「ロールキー」に管理者権限を与えるユーザにバインディングするロールの属性名を入力します
「変更の保存」をクリックします
keycloak側の設定
クライアントを追加する
- レルムの管理権限を持つユーザでKeycloakの管理コンソールへ入ります
- 「Create client」をクリックして新しくクライアントを作成する画面へ移動します
- 以下の値を入力します
項目 | 値 |
---|---|
プロトコル | SAML |
クライアントID | OpenSearchのドメインエンドポイント |
- 「次へ」をクリックします
クライアントの設定
「設定」タブ
ほぼデフォルト設定ですが、以下の追加で以下のように設定しました。
項目 | 値 | 補足 |
---|---|---|
有効なリダイレクトURI | <ドメインエンドポイント>/* | クライアントがリダイレクトする際に有効なURI。今回使用するOpenSearch宛は全て有効にしたいのでワイルドカードを使用します |
IDP Initiated SSOを行う際にクライアントを参照するためのURLフラグメント名を設定します。 | opensearch | IDP起点のSSOを行う際のURLの組み立てに使うクライアントの識別子的なもの。 |
「鍵」タブ
クライアント署名はサポートされていないので、「クライアント署名が必須」はオフにします。(ざっと調べた感じ、OpenSearch側のメタデータは提供されていない?)
「ロール」タブ
OpenSearch上でバックエンドロールとして使用するクライアントロールを作成します。
今回は以下のように設計しました。
ロール | 用途 | OpenSearch上のロール |
---|---|---|
Admin | フルアクセス | all_access/security_manager |
User | 参照権限 | readall(要マッピング) |
「クライアント・スコープ」タブ
- 割り当てられたDedicatedスコープがあるので選択します
- 「スコープ」タブで「フルスコープを許可」をオフにします
- 「マッパー」タブで以下のマッパーを作成します
項目 | 値 |
---|---|
マッパータイプ | Role list |
クライアント・スコープの名前。 | Role |
Role attribute name | Role |
SAML Attribute NameFormat | Basic |
「Advanced」タブ
SAMLエンドポイントの詳細設定で以下の値を入力します。
項目 | 値 | 備考 |
---|---|---|
アサーション・コンシューマー・サービスのPOSTバインディングURL | IdP によって開始された SSO URL※1 | SAMLアサーションをPOSTする先のURL |
ログアウト・サービスのRedirectバインディングURL | IDP Initiated SSOのURL※2 | ログアウトレスポンスを転送する先のURL。Kecloakの認証画面に戻す。POSTすると404が返ってきたので、Redirect先として設定 |
※1:OpenSearchへSAML認証を設定する際に、OpenSearchの画面上で確認できます
※2:フォーマットは「{server-root}/realms/{realm}/protocol/saml/clients/{client-url-name}」となります
OpenSearchのロール設定
Adminロールを使用できるユーザでOpenSearchへログイン
keycloakでOpenSearchのAdmin権限を持たせるユーザへクライアントロール「Admin」をバインドした上で、ユーザ認証し、OpenSearchへログインする。
ログインできたら、画面右上のユーザアイコンをクリックし、「View Roles and Identities」をクリックする。
このロールが「all_access」のロールに紐づいていることを確認する。
左ペインのリストから「Securiy」->「Roles」へと進む。
「readall」のロールを探し、選択する。
「Mapped Users」タブから「Manage mapping」をクリックする。
「Backend roles」に「User」を追加して、「Map」をクリックする。
マッピングが完了したら、一度ログアウトする。
Userロールを使用できるユーザでOpenSearchへログイン
keycloakでOpenSearchの参照権限を持たせるユーザへクライアントロール「User」をバインドした上で、ユーザ認証し、OpenSearchへログインする。
ログインできたら、画面右上のユーザアイコンをクリックし、「View Roles and Identities」をクリックする。
このユーザは「readall」のロールがマップされていることを確認する。
まとめ
OpenSearchにKeycloakを使ってSSOをする方法をまとめました。最低限の設定なので、使っていく中でパラメータのチューニングは必要ですが、SAMLについての理解が多少深まったと思います。(感想)