Amazon OpenSearch Service と Microsoft Entra ID を SAML 連携し、複数アプリロールでテナント切り替えを実現してみた

Amazon OpenSearch Service と Microsoft Entra ID を SAML 連携し、複数アプリロールでテナント切り替えを実現してみた

Microsoft Entra ID と SAML 連携することで、Amazon OpenSearch Service のロール設計を簡素化する方法を紹介します。複数テナント環境での管理を効率化したいとお考えの方は、ぜひご覧ください。
2026.08.19

こんにちは、川田です。

今回は Microsoft Entra ID と SAML 連携することで、Amazon OpenSearch Service の Role 設計を簡素化する方法を紹介します。

環境

  • Amazon OpenSearch Service: 3.7

課題

OpenSearch Dashboard への認証処理に Amazon Cognito を利用する場合、以下のような課題が存在します。

opensearch-cognito.drawio

「テナント AAA」と「テナント BBB」の利用者向けに、「テナント AAA & BBB」向けの Cognito 設定一式を用意する必要があります。今後テナント数が増え、利用テナントの組み合わせが増えてきた場合、管理の煩雑さが懸念に残ります。

対応方針案

Microsoft Entra ID と SAML 連携することで、以下のような構成を実現可能です。

opensearch-entraid.drawio

アクセス可能なテナントを、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 認証」の項目より取得できます。

01

Entra ID 側で SAML 連携向けの設定を実施

続いて、Microsoft Entra ID 側で設定を実施します。

(1) 独自のアプリケーションを作成

Microsoft Entra 管理センターより、左ペインの「エンタープライズアプリ」に進み、表示画面のタブより「新しいアプリケーション」を選択。

表示された画面のタブより「独自のアプリケーションの作成」をクリックし、SAML 連携用のアプリケーションを作成します。

02

(2) SAML 向け設定を実施

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

03

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

04

識別子応答 URL に値を設定します。

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

05

(3) メタデータ XML をダウンロード

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

06

(4) 検証用の Entra ID ユーザーを作成

Microsoft Entra 管理センターより、左ペインの「ユーザー」からユーザー管理画面に進み、検証用の Entra ID ユーザーを作成しておきます。

今回は、以下の 3 ユーザーを作成しています。

  • opensearch-admin
  • testuser1
  • testuser2

07

(5) 独自のアプリケーションのユーザーの割り当て

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

以下は、割り当て後の画面。

08

(6) OpenSearch 管理者向けアプリロールの作成

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

09

表示された画面にて、「アプリロール」から「アプリロールの作成」と進み、管理者向けのアプリロールを作成します。

設定
表示名 opensearch-admin
許可されたメンバーの種類 ユーザーまたはグループ
opensearch-admin

10

(7) 管理者向けアプリロールをユーザーに割り当て

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

11

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

12

OpenSearch 側で SAML 連携向けの設定を実施

AWS コンソールの OpenSearch Domain 画面に戻り、残りの設定を続けます。

(1) メタデータ XML をインポート

OpenSearch Domain 画面より、「セキュリティ設定」タブの編集をクリックし、「OpenSearch ダッシュボード/Kibana 用の SAML 認証」の項目より、Entra ID 側でダウンロードしたメタデータ XML をインポートします。

13

(2) 「SAML マスターバックエンドロール」と「Roles キー」を設定

同一画面にて、以下の設定を実施し、変更を保存します。

設定
IdP エンティティ ID ※インポートしたメタデータより自動反映される
SAML マスターバックエンドロール opensearch-admin
Roles キー http://schemas.microsoft.com/ws/2008/06/identity/claims/role

14

「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 ユーザーでログイン可能となっています。

15

対応方針案の環境を作成

基本的な環境の用意ができたので、「対応方針案」の環境を作成していきます。

OpenSearch Dashboard 側の作業

opensearch-admin ユーザーでログイン可能となった OpenSearch Dashboard 上で、設定を実施していきます。

(1) テナントの作成

「Security」ページから「Tenants」の画面を表示し、「Create Tenant」ボタンにてテナントを作成します。

今回の動作検証では、「tenant-aaa」と「tenant-bbb」というテナントを作成しています。

16

(2) OpenSearch ロールの作成

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

17

作成するロールは、以下の 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」作成時の画面となります。

18

(3) OpenSearch ロールに、バックエンドロールの設定を追加

同じく「Security」ページの「Roles」の画面より作成したロールを検索して選択、「Mapped users」タブより「Manage mapping」ボタンをクリックします。

19

表示画面の Backend roles の項目に、利用するバックエンドロール名を設定します。本検証では、ロール名と同じバックエンドロール名を設定します。

role-tenant-aaa 向け role-tenant-bbb 向け
Backend roles role-tenant-aaa role-tenant-bbb

以下の画面は「role-tenant-aaa」向けのバックエンドロール設定画面となります。

20

Entra ID 側での作業

Microsoft Entra 管理センターにて、上記設定したバックエンドロール向けの設定を実施していきます。

(1) 各テナント向けのアプリロールの作成

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

21

表示された画面にて、「アプリロール」から「アプリロールの作成」と進み、各テナント向けのアプリロールを作成します。

設定 role-tenant-aaa 向け role-tenant-bbb 向け
表示名 role-tenant-aaa role-tenant-bbb
許可されたメンバーの種類 ユーザーまたはグループ ユーザーまたはグループ
role-tenant-aaa role-tenant-bbb

以下の画面は「role-tenant-aaa」向けのアプリロール作成画面となります。

22

(2) テナント向けアプリロールをユーザーに割り当て

Microsoft Entra 管理センターより、左ペインの「エンタープライズアプリ」から今回作成している独自のアプリケーションを選択します。

表示画面の「ユーザーとグループ」より、「ユーザーまたはグループの追加」をクリック、作成したアプリロールを Entra ID ユーザーに割り当てます。

23

表示画面の「ユーザー」と「ロール」部分に、必要となる組み合わせを設定します。今回は以下の組み合わせを設定しています。

Entra ID ユーザー アプリロール
testuser1 role-tenant-aaa
testuser2 role-tenant-aaa
testuser2 role-tenant-bbb

ユーザーを選択している画面です。

24_re

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

25

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

26

動作確認

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

testuser1 でログイン

27

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

28

testuser2 でログイン

29

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

30

想定通りの動作です。

これは 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 内部ロールとマッピングしてくれます。

この記事をシェアする

関連記事