

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 跨叢集搜尋
<a name="application-cross-cluster-search"></a>

在 Amazon OpenSearch Serverless 中使用[跨叢集搜尋](cross-cluster-search.md)，您可以跨多個連線網域執行查詢和彙總。

Amazon OpenSearch Serverless 中的跨叢集搜尋會使用*來源網域*和*目的地網域*的概念。跨叢集搜尋請求來自來源網域。要查詢來源網域的目的地網域可以位於不同的 AWS 帳戶 或 AWS 區域 （或兩者）。使用跨叢集搜尋，您可以設定來源網域，以與相同帳戶中的 OpenSearch UI 建立關聯，然後建立目的地網域的連線。因此，您可以使用 OpenSearch UI 搭配來自目的地網域的資料，即使它們位於不同的帳戶或區域。

對於傳入和傳出 Amazon OpenSearch Service 的資料，您需要支付[標準 AWS 資料傳輸費用](https://aws.amazon.com/opensearch-service/pricing/)。您無需為 OpenSearch Service 網域內節點之間的資料傳輸付費。如需「輸入」和「輸出」費用的詳細資訊，請參閱 *Amazon EC2 隨需定價*頁面上的[資料傳輸](https://aws.amazon.com/ec2/pricing/on-demand/#Data_Transfer)。

您可以使用跨叢集搜尋作為 OpenSearch UI 與不同帳戶或不同區域中叢集相關聯的機制。根據預設，網域之間的請求會在傳輸中加密，作為node-to-node加密的一部分。

**注意**  
開放原始碼 OpenSearch 工具也會記錄[跨叢集搜尋](https://opensearch.org/docs/latest/search-plugins/cross-cluster-search/)。請注意，開放原始碼工具的設定與 受管 Amazon OpenSearch Serverless 網域相比，開放原始碼叢集有很大的差異。  
最值得注意的是，在 Amazon OpenSearch Serverless 中，您使用 AWS 管理主控台 而不是使用 `cURL` 請求來設定跨叢集連線。除了精細存取控制之外， 受管服務還使用 AWS Identity and Access Management (IAM) 進行跨叢集身分驗證。  
因此，我們建議您使用本主題中的內容來設定網域的跨叢集搜尋，而不是開放原始碼 OpenSearch 文件。

**使用跨叢集搜尋時的功能差異**  
相較於一般網域，使用跨叢集搜尋建立的目的地網域具有下列功能差異和要求：
+ 您無法寫入或執行`PUT`命令至遠端叢集。您對遠端叢集的存取是*唯讀*的。
+ 來源和目的地網域都必須是 OpenSearch 網域。您無法為 OpenSearch UI 連接 Elasticsearch 網域或自我管理的 OpenSearch/Elasticsearch 叢集。 OpenSearch 
+ 網域最多可以有 20 個與其他網域的連線。這包括傳出和傳入連線。
+ 來源網域的 OpenSearch 版本必須與目的地網域相同或更高。如果您想要在兩個網域之間設定雙向連線，這兩個網域應該位於相同的版本中。我們建議您先將兩個網域升級至最新版本，再進行連線。如果您在設定雙向連線後需要更新網域，您必須先刪除連線，然後在之後重新建立。
+ 您無法搭配遠端叢集使用自訂字典或 SQL。
+ 您無法使用 CloudFormation 來連接網域。
+ 您無法在 M3 或高載 (T2 和 T3) 執行個體上使用跨叢集搜尋。
+ 跨叢集搜尋不適用於 Amazon OpenSearch Serverless 集合。

**OpenSearch UI 的跨叢集搜尋先決條件**  
使用兩個 OpenSearch 網域設定跨叢集搜尋之前，請確定您的網域符合下列要求：
+ 兩個網域都已啟用精細存取控制
+ 兩個網域都已啟用Node-to-node加密

**Topics**
+ [使用跨叢集搜尋設定跨區域和跨帳戶資料存取的存取許可](#cross-cluster-search-security)
+ [在網域之間建立連線](#cross-cluster-search-create-connection)
+ [使用跨叢集搜尋測試跨區域和跨帳戶資料存取的安全設定](#cross-cluster-search-security-testing)
+ [刪除連線](#cross-cluster-search-deleting-connection)

## 使用跨叢集搜尋設定跨區域和跨帳戶資料存取的存取許可
<a name="cross-cluster-search-security"></a>

當您將跨叢集搜尋請求傳送至來源網域時，網域會根據其網域存取政策評估該請求。跨叢集搜尋需要精細存取控制。以下是來源網域上具有開放存取政策的範例。

------
#### [ 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/*"
    }
  ]
}
```

------

來源網域上的[精細存取控制](fgac.md)會評估請求，以判斷該請求是否使用有效的 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/\$1*。

在此情況下，目的地網域會執行搜尋，並將結果傳回來源網域。來源網域會將其自身結果 (如果有的話) 與來自目的地網域的結果加以結合，然後將其傳回給您。

## 在網域之間建立連線
<a name="cross-cluster-search-create-connection"></a>

跨叢集搜尋連線從來源網域到目的地網域是單向的。這表示目的地網域 （在不同帳戶或區域中） 無法查詢來源網域，這是 OpenSearch UI 的本機網域。來源網域會建立與目的地網域的*傳出*連線。目的地網域會從來源網域接收*傳入*連線請求。

![\[此影像說明跨叢集搜尋連線從來源網域到目的地網域是單向的。\]](http://docs.aws.amazon.com/zh_tw/opensearch-service/latest/developerguide/images/ui-oubound-inbound-connections.png)


**在網域之間建立連線**

1. 登入 Amazon OpenSearch Service 主控台，網址為 https：//[https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home)。

1. 在左側導覽中，選擇**網域**。

1. 選擇要做為來源網域的網域名稱，然後選擇**連線**索引標籤。

1. 在**傳出連線**區域中，選擇**請求**。

1. 對於 **Connection alias** (連線別名)，輸入連線的名稱。在 OpenSearch UI 中使用連線別名來選取目的地網域。

1. 針對**連線模式**，選擇跨叢集搜尋或複寫的**直接**。

1. 若要指定連線應該在搜尋期間略過無法使用的叢集，請選取**略過無法使用的叢集**方塊。選擇此選項可確保您的跨叢集查詢傳回部分結果，無論一或多個遠端叢集是否失敗。

1. 對於**目的地叢集**，請在**連線至此 中的叢集 AWS 帳戶**和**連線至另一個叢集 AWS 帳戶**之間進行選擇。

1. 針對**遠端網域 ARN**，輸入叢集的 Amazon Resource Name (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。

1. 選擇**請求**。

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

如果成功驗證連線請求，則會將其傳送至必須核准的目的地網域。在此核准之前，連線會保持 `Pending acceptance` 狀態。在目的地網域接受連線請求後，狀態會變更為 `Active`，而目的地網域會變為可供查詢。

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

建立連線後，在連線網域節點之間流動的任何流量都會加密。當您將 VPC 網域連線至非 VPC 網域，且非 VPC 網域是可從網際網路接收流量的公有端點時，網域之間的跨叢集流量仍會加密且安全。

## 使用跨叢集搜尋測試跨區域和跨帳戶資料存取的安全設定
<a name="cross-cluster-search-security-testing"></a>

使用跨叢集搜尋設定跨區域和跨帳戶資料存取的存取許可後，建議您使用 測試設定[https://www.postman.com/](https://www.postman.com/)，這是協作 API 開發的第三方平台。

**使用 設定您的安全設定 Postman**

1. 在目的地網域上，為文件編製索引。以下是範例請求：

   ```
   POST https://dst-domain.us-east-1.es.amazonaws.com/books/_doc/1
   {
   "Dracula": "Bram Stoker"
   }
   ```

1. 若要從來源網域查詢此索引，請在查詢內包含目的地網域的連線別名。您可以在網域儀表板的 Connections (連線) 索引標籤上找到連線別名。以下是範例請求和截斷的回應：

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

1. （選用） 您可以在單一搜尋中建立包含多個網域的組態。例如，假設您設定了下列項目：

   `domain-a` 與 之間的連線`domain-b`，具有名為 的連線別名 `cluster_b`

   `domain-a` 與 之間的連線`domain-c`，具有名為 的連線別名 `cluster_c`

   在此情況下，您的搜尋會包含內容 `domain-a`、 `domain-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
       }
     }
   ]
     }
   }
   ```

如果您未選擇在連線設定中略過無法使用的叢集，則您搜尋的所有目的地叢集都必須可供搜尋請求成功執行。否則，整個請求會失敗，即使其中一個網域無法使用，也不會傳回任何搜尋結果。

## 刪除連線
<a name="cross-cluster-search-deleting-connection"></a>

刪除連線會停止目的地網域上的任何跨叢集搜尋操作。

您可以在來源或目的地網域上執行下列程序，以移除連線。移除連線後，狀態為 的連線會保持可見 `Deleted` 15 天。

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

**刪除連線**

1. 登入 Amazon OpenSearch Service 主控台，網址為 https：//[https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home)。

1. 在左側導覽中，選擇**網域**。

1. 選擇要刪除的網域名稱，然後選擇**連線**索引標籤。

1. 選取要刪除的連線名稱。

1. 選擇**刪除**，然後確認刪除。