クロスクラスター検索によるクロスリージョンおよびクロスアカウントデータアクセス - Amazon OpenSearch Service

クロスクラスター検索によるクロスリージョンおよびクロスアカウントデータアクセス

Amazon OpenSearch Serverless のクラスター間検索を使用すると、接続された複数のドメインにわたってクエリや集計を実行できます。

Amazon OpenSearch Serverless でのクラスター間検索では、ソースドメイン宛先ドメインの概念を使用します。クラスター間検索リクエストは、ソースドメインから送信されます。宛先ドメインは、クエリ元の送信元ドメインの異なる AWS アカウント または AWS リージョン (あるいはその両方) に存在することができます。クラスター間検索を使用すると、同じアカウントの OpenSearch UI に関連付けるようにソースドメインを設定し、ターゲットドメインへの接続を作成できます。その結果、別のアカウントまたはリージョンにある場合でも、ターゲットドメインのデータで OpenSearch UI を使用できます。

Amazon OpenSearch Service との間で転送されるデータには、標準の AWS データ転送料金がかかります。OpenSearch Service ドメイン内のノード間で転送されたデータには課金されません。データ「イン」および「アウト」の料金に関する詳細については、「Amazon EC2 オンデマンド料金」ページの「データ転送」をご参照ください。

OpenSearch UI を別のアカウントまたは別のリージョンのクラスターに関連付けるメカニズムとして、クラスター間検索を使用できます。ドメイン間のリクエストは、ノード間暗号化の一環として、デフォルトで転送中に暗号化されます。

注記

オープンソースの OpenSearch ツールも、クラスター間検索について文書化しています。オープンソースクラスターにおけるオープンソースツールの設定は、マネージド Amazon OpenSearch Serverless ドメインとは大きく異なることに注意してください。

特に、Amazon OpenSearch Serverless では、cURL リクエストを使用する代わりに AWS マネジメントコンソール を使用してクラスター間接続を設定します。マネージドサービスは、詳細なアクセス制御に加えて、クラスター間認証に AWS Identity and Access Management (IAM) を使用します。

したがって、ドメインのクロスクラスター検索を設定する際には、オープンソースの OpenSearch ドキュメントではなく、このトピックの内容を使用することをお勧めします。

クラスター間検索を使用する場合の機能の違い

通常のドメインと比較して、クラスター間検索を使用して作成されたターゲットドメインには、以下の機能上の違いと要件があります。

  • リモートクラスターに書き込んだり、PUT コマンドを実行したりすることはできません。リモートクラスターへのアクセスは読み取り専用です。

  • ソースドメインとターゲットドメインの両方が OpenSearch ドメインである必要があります。OpenSearch UI 用に Elasticsearch ドメインまたはセルフマネージド OpenSearch/Elasticsearch OpenSearch クラスターを接続することはできません。

  • ドメインは他のドメインに対して最大 20 の接続を持つことができます。これには、送信接続と受信接続の両方が含まれます。

  • ソースドメインは、ターゲットドメインと同じかそれ以上のバージョンの OpenSearch である必要があります。2 つのドメイン間で双方向接続を設定したい場合、両ドメインは同じバージョンである必要があります。接続する前に、両方のドメインを最新バージョンにアップグレードすることをお勧めします。双方向接続の設定後にドメインを更新する必要がある場合は、まず接続を削除してから再作成する必要があります。

  • リモートクラスターではカスタム辞書や SQL を使用できません。

  • CloudFormation を使用してドメインを接続することはできません。

  • M3 インスタンスとバースト可能 (T2 および T3) インスタンスではクラスター間検索は使用できません。

  • クラスター間検索は、Amazon OpenSearch Serverless コレクションでは機能しません。

OpenSearch UI におけるクラスター間検索の前提条件

2 つの OpenSearch ドメインでクラスター間検索をセットアップする前に、ドメインが次の要件を満たしていることを確認してください:

  • 両方のドメインで詳細なアクセス制御が有効になっています

  • 両ドメインでノード間暗号化が有効化されています

クラスター間検索を使用したクロスリージョンおよびクロスアカウントデータアクセスのアクセス許可の設定

クラスター間検索リクエストをソースドメインに送信すると、ドメインはそのリクエストをドメインアクセスポリシーに対して評価します。クラスター間検索には、詳細なアクセス制御が必要です。ソースドメインでのオープンアクセスポリシーの例を次に示します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:us-east-1:111222333444:domain/src-domain/*" } ] }
注記

パスにリモートインデックスを含める場合は、ドメイン ARN で URI を URL エンコードする必要があります。

例えば、次の ARN 形式を使用します:

:arn:aws:es:us-east-1:111222333444:domain/my-domain/local_index,dst%3Aremote_index

次の ARN 形式は使用しません:

arn:aws:es:us-east-1:111222333444:domain/my-domain/local_index,dst:remote_index.

詳細なアクセス制御に加えて制限付きアクセスポリシーを使用することを選択した場合、ポリシーは最低限 es:ESHttpGet へのアクセスを許可する必要があります。以下に例を示します。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111222333444:user/john-doe" ] }, "Action": "es:ESHttpGet", "Resource": "arn:aws:es:us-east-1:111122223333:domain/my-domain/*" } ] }

ソースドメインの詳細なアクセス制御は、リクエストを評価して、有効な IAM または HTTP の基本認証情報で署名されているかどうかを判断します。その場合、詳細なアクセス制御は次に、ユーザーが検索を実行してデータにアクセスするアクセス許可を持っているかどうかを評価します。

検索のアクセス許可要件は次のとおりです:

  • リクエストがターゲットドメイン (例: dest-alias:dest-index/_search)) のデータのみを検索する場合、アクセス許可はターゲットドメインでのみ必要です。

  • リクエストが両方のドメインのデータを検索する場合 (例: source-index,dest-alias:dest-index/_search))、両方のドメインでアクセス許可が必要です。

  • 詳細なアクセス制御を使用するには、関連するインデックスに対する標準的な読み取りまたは検索権限に加えて、アクセス許可 indices:admin/shards/search_shards が必要です。

ソースドメインは、ターゲットドメインにリクエストを渡します。ターゲットドメインでは、このリクエストをドメインアクセスポリシーに照らし合わせて評価します。ドキュメントのインデックス作成や標準検索の実行など、OpenSearch UI のすべての機能をサポートするには、完全なアクセス許可を設定する必要があります。次は、ターゲットドメインで推奨されるポリシーの例です:

JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:us-east-2:111222333444:domain/my-destination-domain/*" }, { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:us-east-2:111222333444:domain/" } ] }

基本的な検索のみを実行する場合、ポリシーの最小要件は、ワイルドカードサポートなしでターゲットドメインに適用される es:ESCrossClusterGet アクセス許可です。例えば、前述のポリシーでは、ドメイン名を /my-destination-domain として指定し、/my-destination-domain/* として指定しません。

この場合、ターゲットドメインが検索を実行し、結果をソースドメインに返します。ソースドメインにより、独自の結果 (存在する場合) とターゲットドメインの結果を組み合わせたものが返されます。

ドメイン間の接続の作成

クロスクラスター検索接続は、ソースドメインからターゲットドメインへの単方向です。つまり、ターゲットドメイン (別のアカウントまたはリージョン) は、OpenSearch UI にローカルなソースドメインをクエリできません。ソースドメインは、ターゲットドメインへのアウトバウンド接続を作成します。ターゲットドメインは、ソースドメインからインバウンド接続リクエストを受信します。

この図は、クロスクラスター検索接続は、ソースドメインからターゲットドメインへの単方向であることを示しています。
ドメイン間の接続を作成するには
  1. Amazon OpenSearch Service コンソール (https://console.aws.amazon.com/aos/home) にサインインします。

  2. 左側のナビゲーションペインで [ドメイン] を選択します。

  3. ソースドメインとして機能するドメインの名前を選択し、[接続] タブを選択します。

  4. [アウトバウンド接続] セクションで、[リクエスト] を選択します。

  5. [接続のエイリアス] に接続の名前を入力します。接続エイリアスは、ターゲットドメインを選択するために OpenSearch UI で使用されます。

  6. [接続モード] では、クラスター間検索またはレプリケーションに [直接接続] を選択します。

  7. 検索中に使用できないクラスターをスキップするように接続を指定するには、[使用できないクラスターをスキップ] ボックスを選択します。このオプションを選択すると、1 つ以上のリモートクラスタで障害が発生した場合でも、クラスタ間クエリで部分的な結果が返されるようになります。

  8. [ターゲットクラスター] で、[この AWS アカウント のクラスターに接続する] と、[別の AWS アカウント のクラスターに接続する] を選択します。

  9. [リモートドメイン ARN] には、クラスターの Amazon リソースネーム (ARN) を入力します。ドメイン ARN は、ドメインの詳細ページの [一般情報] エリアにあります。

    ドメインは次の要件を満たしている必要があります。

    • ARN は形式 arn:partition:es:regionaccount-id:type/domain-id である必要があります。例:

      arn:aws:es:us-east-2:111222333444:domain/my-domain

    • ドメインは、OpenSearch バージョン 1.0 (以降) または Elasticsearch バージョン 6.7 (以降) を使用するように設定する必要があります。

    • 詳細なアクセス制御は、ドメインで有効にする必要があります。

    • ドメインは OpenSearch を実行している必要があります。

  10. [リクエスト] を選択します。

クラスター間検索では、まず接続リクエストを検証することで、前提条件が満たされているか確認が行われます。ドメインが互換性がない場合、接続リクエストは Validation failed の状態になります。

接続リクエストが正常に検証されると、ターゲットドメインに送信され、承認される必要があります。この承認が行われるまで、接続は Pending acceptance の状態のままです。接続要求がターゲットドメインで承諾されると、状態が Active に変わり、ターゲットドメインをクエリに使用できるようになります。

ドメインページには、ターゲットドメインについて、ドメインの全体的な正常性とインスタンスの正常性に関する詳細が表示されます。ドメインとの間の接続を柔軟に作成、表示、削除、モニタリングできるのは、ドメイン所有者のみです。

接続が確立されると、接続されたドメインのノード間で流れるトラフィックはすべて暗号化されます。VPC ドメインを非 VPC ドメインに接続し、非 VPC ドメインがインターネットからのトラフィックを受信できるパブリックエンドポイントである場合も、ドメイン間のクラスター間トラフィックは暗号化され、安全に保たれます。

クラスター間検索による、リージョン間およびアカウント間のデータアクセスに対するセキュリティ設定のテスト

クロスクラスター検索によるクロスリージョンおよびクロスアカウントデータアクセスのアクセス許可を設定したら、共同 API 開発用のサードパーティープラットフォームである Postman を使用してセットアップをテストすることをお勧めします。

Postman を使用してセキュリティ設定を行うには
  1. ターゲットドメインで、ドキュメントのインデックスを作成します。リクエストの例を次に示します:

    POST https://dst-domain.us-east-1.es.amazonaws.com/books/_doc/1 { "Dracula": "Bram Stoker" }
  2. ソースドメインからこのインデックスを照会するには、クエリ内にターゲットドメインの接続エイリアスを含めます。接続エイリアスは、ドメインダッシュボードの [接続] タブで確認できます。以下は、リクエストと切り捨てられたレスポンスの例です。

    GET https://src-domain.us-east-1.es.amazonaws.com/connection_alias:books/_search { ... "hits": [ { "_index": "source-destination:books", "_type": "_doc", "_id": "1", "_score": 1, "_source": { "Dracula": "Bram Stoker" } } ] }
  3. (オプション) 1 回の検索で複数のドメインを含む設定を作成できます。例えば、次のように設定したとします。

    接続エイリアス名を cluster_b とする domain-a から domain-b への接続

    接続エイリアス名を cluster_c とする domain-a から domain-c への接続

    この場合、検索にはコンテンツ domain-adomain-b、および domain-c が含まれます。以下はリクエストとレスポンスのサンプルです:

    リクエスト

    GET https://src-domain.us-east-1.es.amazonaws.com/local_index,cluster_b:b_index,cluster_c:c_index/_search { "query": { "match": { "user": "domino" } } }

    レスポンス:

    { "took": 150, "timed_out": false, "_shards": { "total": 3, "successful": 3, "failed": 0, "skipped": 0 }, "_clusters": { "total": 3, "successful": 3, "skipped": 0 }, "hits": { "total": 3, "max_score": 1, "hits": [ { "_index": "local_index", "_type": "_doc", "_id": "0", "_score": 1, "_source": { "user": "domino", "message": "This is message 1", "likes": 0 } }, { "_index": "cluster_b:b_index", "_type": "_doc", "_id": "0", "_score": 2, "_source": { "user": "domino", "message": "This is message 2", "likes": 0 } }, { "_index": "cluster_c:c_index", "_type": "_doc", "_id": "0", "_score": 3, "_source": { "user": "domino", "message": "This is message 3", "likes": 0 } } ] } }

接続のセットアップで使用できないクラスターをスキップしなかった場合、検索リクエストを正常に実行するには、検索するすべての宛先クラスターが使用可能である必要があります。そうでない場合は、リクエスト全体が失敗します ドメインのうち、いずれか 1 つだけが使用できない場合でも、検索結果は返されません。

接続を削除する

接続を削除すると、ターゲットドメインのクラスター間検索オペレーションが停止します。

接続を削除するには、ソースドメインまたはターゲットドメインのいずれかで次の手順を実行できます。接続を削除した後も、15 日間は Deleted のステータスで表示されたままになります。

アクティブなクラスター間接続のあるドメインは削除できません。ドメインを削除するには、まずそのドメインからすべての受信接続と送信接続を削除します。この操作は、ドメインを削除する前にクラスター間ドメインのユーザーを考慮するために行います。

接続を削除するには
  1. Amazon OpenSearch Service コンソール (https://console.aws.amazon.com/aos/home) にサインインします。

  2. 左側のナビゲーションペインで [ドメイン] を選択します。

  3. 削除するドメインの名前を選択し、[接続] タブを選択します。

  4. 削除する接続の名前を選択します。

  5. [削除] を選択し、削除を確定します。