1
0

opensearchのダッシュボードのユーザ認証にKeycloakを使う

Posted at

OpenSearchダッシュボードへのサインイン手段としてKeycloak+SAMLを使ったSSOを設定したので、備忘録としてアウトプット。

  • OpenSearchのバージョン:OpenSearch_2_11_R20231113-P3
  • Keycloakのバージョン:23.0.7

また、Keycloakは例のごとくWSL上で起動したものを使用する。

Openserach側の設定

セキュリティ設定のタブの「設定」をクリックします。

スクリーンショット 2024-03-11 085916.png

「OpenSearch Dashboards/Kibana 用の SAML 認証」の「SAML認証を有効化」にチェックを付けます

スクリーンショット 2024-03-11 090057.png

「IdPメタデータをインポート」にKeycloakのメタデータをコピペします

スクリーンショット 2024-03-11 090155.png

「SAMLマスターバックエンドロール」に管理者権限を設定するロールの名前を入力します
(オプションですが、最初に色々な設定を行うためにマスターの権限が必要なので、設定します)

スクリーンショット 2024-03-10 184405.png

「ロールキー」に管理者権限を与えるユーザにバインディングするロールの属性名を入力します

スクリーンショット 2024-03-10 184453.png

「変更の保存」をクリックします

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」をクリックする。

スクリーンショット 2024-03-11 091046.png

このロールが「all_access」のロールに紐づいていることを確認する。

スクリーンショット 2024-03-11 091029.png

左ペインのリストから「Securiy」->「Roles」へと進む。

スクリーンショット 2024-03-11 091335.png

「readall」のロールを探し、選択する。

スクリーンショット 2024-03-11 091443.png

「Mapped Users」タブから「Manage mapping」をクリックする。

スクリーンショット 2024-03-11 091631.png

「Backend roles」に「User」を追加して、「Map」をクリックする。

スクリーンショット 2024-03-11 091710.png

マッピングが完了したら、一度ログアウトする。

Userロールを使用できるユーザでOpenSearchへログイン

keycloakでOpenSearchの参照権限を持たせるユーザへクライアントロール「User」をバインドした上で、ユーザ認証し、OpenSearchへログインする。
ログインできたら、画面右上のユーザアイコンをクリックし、「View Roles and Identities」をクリックする。

スクリーンショット 2024-03-11 092146.png

このユーザは「readall」のロールがマップされていることを確認する。

まとめ

OpenSearchにKeycloakを使ってSSOをする方法をまとめました。最低限の設定なので、使っていく中でパラメータのチューニングは必要ですが、SAMLについての理解が多少深まったと思います。(感想)

1
0
0

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
1
0