Amazon OpenSearch Service と Microsoft Entra ID を SAML 連携し、複数アプリロールでテナント切り替えを実現してみた
こんにちは、川田です。
今回は Microsoft Entra ID と SAML 連携することで、Amazon OpenSearch Service の Role 設計を簡素化する方法を紹介します。
環境
- Amazon OpenSearch Service: 3.7
課題
OpenSearch Dashboard への認証処理に Amazon Cognito を利用する場合、以下のような課題が存在します。

「テナント AAA」と「テナント BBB」の利用者向けに、「テナント AAA & BBB」向けの Cognito 設定一式を用意する必要があります。今後テナント数が増え、利用テナントの組み合わせが増えてきた場合、管理の煩雑さが懸念に残ります。
対応方針案
Microsoft Entra ID と SAML 連携することで、以下のような構成を実現可能です。

アクセス可能なテナントを、Entra ID のアプリロールで管理します。Entra ID 上のユーザーに、テナントごとに作成したアプリロールを付与することで、アクセス可能なテナントを管理します。
基本的な環境を作成
動作を確認するため、まずは Amazon OpenSearch Domain と Entra ID を SAML 連携した環境を作成します。
なお、Amazon OpenSearch Domain の環境は、既に作成済みとして作業を進めます。また、OpenSearch Domain は「きめ細かなアクセス制御(FGAC)」が有効である必要があります。
OpenSearch 側での設定情報を確認
AWS コンソール画面より、以下を値を取得しておきます。
- サービスプロバイダーエンティティ ID
- SP によって開始された SSO URL
AWS コンソールの OpenSearch Domain 画面より、「セキュリティ設定」タブの編集をクリックし、「OpenSearch ダッシュボード/Kibana 用の SAML 認証」の項目より取得できます。

Entra ID 側で SAML 連携向けの設定を実施
続いて、Microsoft Entra ID 側で設定を実施します。
(1) 独自のアプリケーションを作成
Microsoft Entra 管理センターより、左ペインの「エンタープライズアプリ」に進み、表示画面のタブより「新しいアプリケーション」を選択。
表示された画面のタブより「独自のアプリケーションの作成」をクリックし、SAML 連携用のアプリケーションを作成します。

(2) SAML 向け設定を実施
作成した独自アプリケーションの画面にて、「シングルサインオン」から「SAML」を選択します。

「基本的な SAML 構成」の「編集」をクリック。

識別子 と 応答 URL に値を設定します。
| パラメーター | 設定値 |
|---|---|
| 識別子 (エンティティ ID) | AWS コンソールよりコピーした サービスプロバイダーエンティティ ID を設定 |
| 応答 URL (Assertion Consumer Service URL) | AWS コンソールよりコピーした SP によって開始された SSO URL を設定 |

(3) メタデータ XML をダウンロード
同じくシングルサインオンの設定画面にて、「SAML 証明書」内にあるリンクから「フェデレーション メタデータ XML」をダウンロードしておきます。

(4) 検証用の Entra ID ユーザーを作成
Microsoft Entra 管理センターより、左ペインの「ユーザー」からユーザー管理画面に進み、検証用の Entra ID ユーザーを作成しておきます。
今回は、以下の 3 ユーザーを作成しています。
- opensearch-admin
- testuser1
- testuser2

(5) 独自のアプリケーションのユーザーの割り当て
再び、今回作成した独自のアプリケーションの画面に戻り、「ユーザーとグループ」より「ユーザーまたはグループの追加」タブをクリック、上述の 3 ユーザーを独自アプリケーションに割り当てます。
以下は、割り当て後の画面。

(6) OpenSearch 管理者向けアプリロールの作成
Microsoft Entra 管理センターより、左ペインの「アプリの登録」から「すべてのアプリケーション」タブに進み、今回作成した独自のアプリケーションを選択します。

表示された画面にて、「アプリロール」から「アプリロールの作成」と進み、管理者向けのアプリロールを作成します。
| 設定 | 値 |
|---|---|
| 表示名 | opensearch-admin |
| 許可されたメンバーの種類 | ユーザーまたはグループ |
| 値 | opensearch-admin |

(7) 管理者向けアプリロールをユーザーに割り当て
再び、今回作成した独自のアプリケーションの画面に戻り、「ユーザーとグループ」より opensearch-admin ユーザーを選択し「割り当ての編集」タブをクリックします。

表示画面の「ロールの選択」より opensearch-admin ロールを割り当てます。

OpenSearch 側で SAML 連携向けの設定を実施
AWS コンソールの OpenSearch Domain 画面に戻り、残りの設定を続けます。
(1) メタデータ XML をインポート
OpenSearch Domain 画面より、「セキュリティ設定」タブの編集をクリックし、「OpenSearch ダッシュボード/Kibana 用の SAML 認証」の項目より、Entra ID 側でダウンロードしたメタデータ XML をインポートします。

(2) 「SAML マスターバックエンドロール」と「Roles キー」を設定
同一画面にて、以下の設定を実施し、変更を保存します。
| 設定 | 値 |
|---|---|
| IdP エンティティ ID | ※インポートしたメタデータより自動反映される |
| SAML マスターバックエンドロール | opensearch-admin |
| Roles キー | http://schemas.microsoft.com/ws/2008/06/identity/claims/role |

「SAML マスターバックエンドロール」に値を指定すると、AWS 側にて、OpenSearch 内部の admin 相当権限に、指定した値をバックエンドロールとして付与してくれます。
「Roles キー」は、SAML アサーションされるデータのどの属性を OpenSearch バックエンドロールとして利用するか、それを指定するための設定となります。今回はユーザーに割り当てられたアプリロールの値をバックエンドロールとして利用する方針のため、上記の値を設定しています。
実際の属性名は、SAML-tracer 等にて SAML のデータを覗くことで確認可能です。
<Attribute Name="http://schemas.microsoft.com/ws/2008/06/identity/claims/role">
<AttributeValue>opensearch-admin</AttributeValue>
</Attribute>
OpenSearch Dashboard に接続確認
変更が反映後、OpenSearch Dashboard に Entra ID の opensearch-admin ユーザーでログイン可能となっています。

対応方針案の環境を作成
基本的な環境の用意ができたので、「対応方針案」の環境を作成していきます。
OpenSearch Dashboard 側の作業
opensearch-admin ユーザーでログイン可能となった OpenSearch Dashboard 上で、設定を実施していきます。
(1) テナントの作成
「Security」ページから「Tenants」の画面を表示し、「Create Tenant」ボタンにてテナントを作成します。
今回の動作検証では、「tenant-aaa」と「tenant-bbb」というテナントを作成しています。

(2) OpenSearch ロールの作成
同じく「Security」ページから「Roles」の画面を表示し、「Create Role」ボタンにて、各テナント向けの OpenSearch ロールを作成します。

作成するロールは、以下の 2 つとなります。
| tenant-aaa 向け | tenant-bbb 向け | |
|---|---|---|
| Name | role-tenant-aaa | role-tenant-bbb |
| Cluster permissions | cluster_composite_ops_ro | cluster_composite_ops_ro |
| Index permissions | 未設定(※) | 未設定(※) |
| Tenant permissions | tenant-aaa | tenant-bbb |
(※)今回は検証作業のため、Index permissions を未設定のまま作業を進めています。実際の本番利用時には、各テナント毎にアクセス可能とする適当な Index を指定してください。
以下の画面は「role-tenant-aaa」作成時の画面となります。

(3) OpenSearch ロールに、バックエンドロールの設定を追加
同じく「Security」ページの「Roles」の画面より作成したロールを検索して選択、「Mapped users」タブより「Manage mapping」ボタンをクリックします。

表示画面の Backend roles の項目に、利用するバックエンドロール名を設定します。本検証では、ロール名と同じバックエンドロール名を設定します。
| role-tenant-aaa 向け | role-tenant-bbb 向け | |
|---|---|---|
| Backend roles | role-tenant-aaa | role-tenant-bbb |
以下の画面は「role-tenant-aaa」向けのバックエンドロール設定画面となります。

Entra ID 側での作業
Microsoft Entra 管理センターにて、上記設定したバックエンドロール向けの設定を実施していきます。
(1) 各テナント向けのアプリロールの作成
Microsoft Entra 管理センターより、左ペインの「アプリの登録」から「すべてのアプリケーション」タブに進み、今回作成した独自のアプリケーションを選択します。

表示された画面にて、「アプリロール」から「アプリロールの作成」と進み、各テナント向けのアプリロールを作成します。
| 設定 | role-tenant-aaa 向け | role-tenant-bbb 向け |
|---|---|---|
| 表示名 | role-tenant-aaa | role-tenant-bbb |
| 許可されたメンバーの種類 | ユーザーまたはグループ | ユーザーまたはグループ |
| 値 | role-tenant-aaa | role-tenant-bbb |
以下の画面は「role-tenant-aaa」向けのアプリロール作成画面となります。

(2) テナント向けアプリロールをユーザーに割り当て
Microsoft Entra 管理センターより、左ペインの「エンタープライズアプリ」から今回作成している独自のアプリケーションを選択します。
表示画面の「ユーザーとグループ」より、「ユーザーまたはグループの追加」をクリック、作成したアプリロールを Entra ID ユーザーに割り当てます。

表示画面の「ユーザー」と「ロール」部分に、必要となる組み合わせを設定します。今回は以下の組み合わせを設定しています。
| Entra ID ユーザー | アプリロール |
|---|---|
| testuser1 | role-tenant-aaa |
| testuser2 | role-tenant-aaa |
| testuser2 | role-tenant-bbb |
ユーザーを選択している画面です。

割り当てるロールを選択している画面です。

必要となる組み合わせを設定、最終的に、以下のような割り当ての画面となります。

動作確認
設定完了したので、それぞれユーザーで OpenSearch Dashboard にログインし、選択できるテナントを確認してみます。
testuser1 でログイン

「tenant-aaa」のみが選択可能です。

testuser2 でログイン

「tenant-aaa」と「tenant-bbb」が選択可能となっています。

想定通りの動作です。
これは SAML アサーション時に連携されるデータで、バックエンドロールとして利用される値(つまり、OpenSearch Domain の Roles キーで指定した属性値)が、複数の値で連携されているためです。
<Attribute Name="http://schemas.microsoft.com/ws/2008/06/identity/claims/role">
<AttributeValue>role-tenant-aaa</AttributeValue>
<AttributeValue>role-tenant-bbb</AttributeValue>
</Attribute>
OpenSearch 側ではこの複数の値をバックエンドロール向けの値として利用して、紐づく OpenSearch 内部ロールとマッピングしてくれます。





