Amazon OpenSearch Service 的跨叢集搜尋 - Amazon OpenSearch Service

Amazon OpenSearch Service 的跨叢集搜尋

Amazon OpenSearch Service 中的跨叢集搜尋可讓您跨多個已連線網域執行查詢和彙總。通常使用多個較小的網域 (而不是單一大型網域) 會比較有意義,尤其是在執行不同類型工作負載的情況下。

透過工作負載特定網域可執行以下任務:

  • 選擇特定工作負載的執行個體類型以優化每個網域。

  • 建立多個工作負載間的故障隔離界限。也就是說,如果其中一個工作負載失敗,此故障會包含在該特定網域內,而且不會影響其他工作負載。

  • 更輕鬆地跨網域進行擴展。

跨叢集搜尋可支援 OpenSearch Dashboards,因此您可以跨所有網域建立視覺效果和儀表板。

限制

跨叢集搜尋有多項重要限制:

  • 您無法將 Elasticsearch 網域連線至 OpenSearch 網域。

  • 您無法連線至自我管理的 OpenSearch/Elasticsearch 叢集。

  • 跨叢集搜尋不支援跨區域。

  • 一個網域最多可以有 20 個外寄連線。同樣地,一個網域最多可以有 20 個傳入連線。換句話說,一個網域最多可連線到 20 個其他網域。

  • 網域必須共用同一個主要版本,或使用最終次要版本和後續主要版本 (例如 6.8 和 7.x 可相容)。

  • 您無法將自訂字典或 SQL 使用跨叢集搜尋搭配使用。

  • 您無法使用 AWS CloudFormation 來連接網域。

  • 您無法在 M3 或高載 (T2 和 T3) 執行個體上使用跨叢集搜尋。

跨叢集搜尋先決條件

設定跨叢集搜尋前,請確認網域符合下列需求:

  • 兩個 OpenSearch 網域,或 6.7 版或更新版本的 Elasticsearch 網域

  • 已啟用精細存取控制

  • 已啟用節點對節點加密

跨叢集搜尋定價

跨網域搜尋無須額外付費。

設定連線

「來源」網域是指跨叢集搜尋請求的來源位置。換句話說,來源網域是您傳送初始搜尋請求的目標位置。

「目的地」網域是來源網域查詢的網域。

跨叢集連線為單向 (從來源到目的地網域)。也就是說,目的地網域無法查詢來源網域。不過,您可以設定相反方向的其他連線。


        跨叢集搜尋授權流程

來源網域會建立「傳出」至目的地網域的連線。目的地網域會接收來自來源網域的「傳入」連線請求。

如何設定連線

  1. 在網域儀表板上,選擇網域並移至 Connections (連線) 索引標籤。

  2. Outbound connections (傳出連線) 區段中,選擇 Request (請求)。

  3. 對於 Connection alias (連線別名),輸入連線的名稱。

  4. 選擇連線 AWS 帳戶 或其他帳戶中的叢集。

    • 若要連線至 AWS 帳戶 中的叢集,從下拉選單中選擇網域,然後選擇 Request (請求)。

    • 若要連線至其他 AWS 帳戶 中的叢集,請指定遠端網域的 ARN,然後選擇 Request (請求)。

  5. 跨叢集搜尋會先驗證連線請求,確認是否符合先決條件。如果發現網域不相容,連線請求則會進入 Validation failed 狀態。

  6. 連線請求驗證成功後,則會傳送至目的地網域,需要在這裡進行核准。在此核准發生前,連線會保持在 Pending acceptance 狀態。在目的地網域接受連線請求後,狀態會變更為 Active,而目的地網域會變為可供查詢。

    • 網域頁面會顯示目的地網域的整體網域運作狀態和執行個體運作狀態詳細資訊。只有網域擁有者才能靈活建立、檢視、移除和監控與其網域的連線。

建立連線後,在已連線網域節點之間流動的任何流量都會經過加密。如果您將 VPC 網域連接至非 VPC 網域,且該非 VPC 網域是可從網際網路接收流量的公有端點,網域之間的跨叢集流量仍為加密且安全的狀態。

移除連線

移除連線會在其索引上停止任何跨叢集操作。

  1. 在網域儀表板上,前往 Connections (連線) 索引標籤。

  2. 選取您要移除的網域連線並選擇 Delete (刪除),然後確認刪除。

您可以在來源或目的地網域上執行這些步驟,以移除連線。移除連線後,在 15 天內仍可見,狀態為 Deleted

您無法刪除具有作用中跨叢集連線的網域。若要刪除網域,請先從該網域中移除所有傳入和傳出連線。這可確保您在刪除網域前,將跨叢集網域使用者納入考量。

設定安全性和範例演練

  1. 您會將跨叢集搜尋請求傳送至來源網域。

  2. 來源網域會根據其網域存取政策評估請求。由於跨叢集搜尋需要精細存取控制,建議您在來源網域上使用開放式存取政策。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/src-domain/*" } ] }
    注意

    網域資源政策會評估 URI,因此如果您在路徑中包含遠端索引,請使用 arn:aws:es:us-east-1:123456789012:domain/my-domain/local_index,dst%3Aremote_index,而不是 arn:aws:es:us-east-1:123456789012:domain/my-domain/local_index,dst:remote_index

    除了精細存取控制以外,如果您還選擇使用限制性存取政策,政策則必須至少允許對 es:ESHttpGet 的存取權。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/test-user" ] }, "Action": "es:ESHttpGet", "Resource": "arn:aws:es:region:account:domain/src-domain/*" } ] }
  3. 來源網域上的精細存取控制會評估請求:

    • 請求是否以有效的 IAM 或 HTTP 基本登入資料簽署?

    • 如果是這樣,使用者是否具備執行搜尋和存取資料的許可?

    如果請求只搜尋目的地網域上的資料 (例如 dest-alias:dest-index/_search),您只需要目的地網域上的許可。

    如果請求同時搜尋兩個網域上的資料 (例如 source-index,dest-alias:dest-index/_search),您需要兩個網域上的許可。

    在精細存取控制中,除了相關索引的標準 readsearch 許可,使用者還必須具備 indices:admin/shards/search_shards 許可。

  4. 來源網域會將請求傳遞至目的地網域。目的地網域會根據其網域存取政策評估此請求。您必須在目的地網域上包含 es:ESCrossClusterGet 許可:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/dst-domain" } ] }

    確認已針對 /dst-domain (而不是 /dst-domain/*) 套用 es:ESCrossClusterGet 許可。

    不過,此最低政策只允許跨叢集搜尋。若執行其他操作 (例如為文件編製索引和執行標準搜尋),則需要額外的許可。建議在目的地網域上使用下列政策:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region:account:domain/dst-domain/*" }, { "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": "es:ESCrossClusterGet", "Resource": "arn:aws:es:region:account:domain/dst-domain" } ] }
    注意

    根據預設,網域之間的所有跨叢集搜尋請求在傳輸中都會經過加密,做為節點對節點加密的一部分。

  5. 目的地網域會執行搜尋並將結果傳回至來源網域。

  6. 來源網域會將其自身結果 (如果有的話) 與來自目的地網域的結果加以結合,然後將其傳回給您。

  7. 建議針對測試請求使用 Postman

    • 在目的地網域上,為文件編製索引:

      POST https://dst-domain.us-east-1.es.amazonaws.com/books/_doc/1 { "Dracula": "Bram Stoker" }
    • 若要從來源網域查詢此索引,請在查詢內包含目的地網域的連線別名。

      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" } } ] }

      您可以在網域儀表板的 Connections (連線) 索引標籤上找到連線別名。

    • 如果在具有連線別名 cluster_bdomain-a -> domain-b 與具有連線別名 cluster_cdomain-a -> domain-c 之間設定連線,請搜尋 domain-adomain-bdomain-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": "Lets unite the new mutants", "likes": 0 } }, { "_index": "cluster_b:b_index", "_type": "_doc", "_id": "0", "_score": 2, "_source": { "user": "domino", "message": "I'm different", "likes": 0 } }, { "_index": "cluster_c:c_index", "_type": "_doc", "_id": "0", "_score": 3, "_source": { "user": "domino", "message": "So am I", "likes": 0 } } ] } }

      您搜尋的所有目的地叢集都必須可供搜尋請求使用,以成功執行。否則,整個請求會失敗,即使其中一個網域無法使用,也不會傳回任何搜尋結果。

OpenSearch Dashboards

您可以透過與從單一網域相同的方式,從多個連線網域視覺化資料,但您必須使用 connection-alias:index 存取遠端索引時除外。因此,索引模式必須符合 connection-alias:index