

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 클러스터 간 검색
<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를 다른 계정 또는 다른 리전의 클러스터와 연결하는 메커니즘으로 교차 클러스터 검색을 사용할 수 있습니다. 도메인 간의 요청은 기본적으로 노드 간 암호화의 일부로 전송 중에 암호화됩니다.

**참고**  
오픈 소스 OpenSearch 도구에는 [교차 클러스터 검색](https://opensearch.org/docs/latest/search-plugins/cross-cluster-search/)에 대한 설명서도 있습니다. 오픈 소스 클러스터의 오픈 소스 도구에 대한 설정은 관리형 Amazon OpenSearch Service 도메인과 비교했을 때 크게 다릅니다.  
특히 Amazon OpenSearch Serverless에서는 `cURL` 요청을 사용하는 대신 AWS Management Console 을 사용하여 클러스터 간 연결을 구성합니다. 관리형 서비스는 세분화된 액세스 제어 외에도 교차 클러스터 인증에 AWS Identity and Access Management (IAM)를 사용합니다.  
따라서 오픈 소스 OpenSearch 설명서 대신 이 주제를 사용하여 도메인에 대한 교차 클러스터 검색을 구성하는 것이 좋습니다.

**교차 클러스터 검색 사용 시 기능 차이**  
교차 클러스터 검색을 사용하여 생성된 대상 도메인은 일반 도메인과 비교하여 다음과 같은 기능상의 차이점과 요구 사항이 있습니다.
+ 원격 클러스터에는 데이터를 쓰거나 `PUT` 명령을 실행할 수 없습니다. 원격 클러스터에 대한 액세스는 *읽기 전용*입니다.
+ 소스 도메인과 대상 도메인 모두 OpenSearch 도메인이어야 합니다. OpenSearch UI의 Elasticsearch 도메인 또는 자체 관리형 OpenSearch/Elasticsearch 클러스터는 연결할 수 없습니다.
+ 도메인에는 다른 도메인에 대한 최대 20개의 연결이 있을 수 있습니다. 여기에는 발신 연결과 수신 연결이 모두 포함됩니다.
+ 소스 도메인의 OpenSearch 버전은 대상 도메인과 같거나 상위 버전에 있어야 합니다. 두 도메인 간에 양방향 연결을 설정하려면 두 도메인이 동일한 버전이어야 합니다. 연결하기 전에 두 도메인을 모두 최신 버전으로 업그레이드하는 것이 좋습니다. 양방향 연결을 설정한 후 도메인을 업데이트해야 하는 경우, 먼저 연결을 삭제한 후에 다시 생성해야 합니다.
+ 원격 클러스터에는 사용자 지정 사전이나 SQL을 사용할 수 없습니다.
+  CloudFormation 를 사용하여 도메인을 연결할 수 없습니다.
+ M3 또는 버스트 가능(T2 및 T3) 인스턴스에서는 클러스터 간 검색을 사용할 수 없습니다.
+ 교차 클러스터 검색은 Amazon OpenSearch Serverless 컬렉션에 대해 작동하지 않습니다.

**OpenSearch UI의 교차 클러스터 검색 전제 조건**  
두 OpenSearch 도메인 간의 교차 클러스터 검색을 설정하기 전에 도메인이 다음 요구 사항을 충족하는지 확인하세요.
+ 두 도메인 모두에 대해 세분화된 액세스 제어가 활성화됨
+ 두 도메인 모두에 노드 간 암호화가 활성화됨

**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/\$1*이 아니라 */my-destination-domain*으로 지정합니다.

이 경우 대상 도메인은 검색을 수행하고 결과를 소스 도메인에 반환합니다. 소스 도메인은 자체 결과(있는 경우)를 대상 도메인의 결과와 결합하여 반환합니다.

## 도메인 간 연결 생성
<a name="cross-cluster-search-create-connection"></a>

교차 클러스터 검색 연결은 소스 도메인에서 대상 도메인으로 단방향입니다. 즉, 대상 도메인(다른 계정 또는 리전)은 OpenSearch UI에 로컬인 소스 도메인을 쿼리할 수 없습니다. 소스 도메인은 대상 도메인에 대한 *아웃바운드* 연결을 생성합니다. 대상 도메인은 소스 도메인에서 *인바운드* 연결 요청을 받습니다.

![\[이 그림은 교차 클러스터 검색 연결은 소스 도메인에서 대상 도메인으로 단방향임을 보여줍니다.\]](http://docs.aws.amazon.com/ko_kr/opensearch-service/latest/developerguide/images/ui-oubound-inbound-connections.png)


**도메인 간 연결을 생성하려면**

1. [https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home) Amazon OpenSearch Service 콘솔에 로그인합니다.

1. 왼쪽 탐색 메뉴에서 **도메인**을 선택합니다.

1. 소스 도메인으로 사용할 도메인의 이름을 선택한 다음 **연결** 탭을 선택합니다.

1. **아웃바운드 연결** 영역에서 **요청**을 선택합니다.

1. [**연결 별칭(Connection alias)**]에 연결 이름을 입력합니다. 연결 별칭은 OpenSearch UI에서 대상 도메인을 선택하는 데 사용됩니다.

1. **연결 모드**에서 교차 클러스터 검색 또는 복제에 대해 **직접**을 선택합니다.

1. 검색 중에 사용할 수 없는 클러스터를 건너뛰도록 지정하려면 **사용할 수 없는 클러스터 건너뛰기** 상자를 선택합니다. 이 옵션을 선택하면 하나 이상의 원격 클러스터에서 오류가 발생하더라도 교차 클러스터 쿼리가 일부 결과를 반환할 수 있습니다.

1. **대상 클러스터**에서 **이 AWS 계정의 클러스터에 연결**과 **다른 AWS 계정의 클러스터에 연결** 중에서 선택합니다.

1. **원격 도메인 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를 실행 중이어야 합니다.

1. **요청**을 선택합니다.

클러스터 간 검색은 먼저 연결 요청을 검증하여 전제 조건이 충족되는지 확인합니다. 도메인이 호환되지 않을 경우 연결 요청이 `Validation failed` 상태로 전환됩니다.

연결 요청이 성공적으로 검증되면 대상 도메인으로 전송되어 승인을 받아야 합니다. 이 승인이 될 때까지 연결은 `Pending acceptance` 상태로 유지됩니다. 대상 도메인에서 연결 요청이 수락되면 상태가 `Active`으로 변경되고 대상 도메인을 쿼리에 사용할 수 있게 됩니다.

도메인 페이지에는 대상 도메인의 전체 도메인 상태 및 인스턴스 상태 세부 정보가 표시됩니다. 도메인 소유자만 도메인과의 연결을 유연하게 생성하고 보고 제거하고 모니터링할 수 있습니다.

연결이 설정되면 연결된 도메인의 노드 간에 흐르는 모든 트래픽이 암호화됩니다. VPC 도메인을 VPC가 아닌 도메인에 연결하고 VPC가 아닌 도메인이 인터넷에서 트래픽을 수신할 수 있는 퍼블릭 엔드포인트인 경우, 도메인 간의 클러스터 간 트래픽은 여전히 암호화되고 안전합니다.

## 교차 클러스터 검색을 사용한 교차 리전 및 교차 계정 데이터 액세스의 보안 설정 테스트
<a name="cross-cluster-search-security-testing"></a>

교차 클러스터 검색을 사용하여 교차 리전 및 교차 계정 데이터 액세스를 위한 액세스 권한을 설정한 후에는 협업 API 개발을 위한 서드 파티 플랫폼인 [https://www.postman.com/](https://www.postman.com/)을 사용하여 설정을 테스트하는 것이 좋습니다.

**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. (선택 사항) 단일 검색으로 여러 도메인을 포함하는 구성을 생성할 수 있습니다. 예를 들어 다음과 같은 설정을 가정해 보겠습니다.

   연결 별칭 이름이 `cluster_b`인 `domain-a`에서 `domain-b`로의 연결

   연결 별칭 이름이 `cluster_c`인 `domain-a`에서 `domain-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>

연결을 삭제하면 대상 도메인에서 교차 클러스터 검색 작업이 중지됩니다.

소스 도메인이나 대상 도메인에서 다음 절차를 수행하여 연결을 제거할 수 있습니다. 연결을 제거한 후에도 15일 동안 `Deleted` 상태로 계속 표시됩니다.

활성 클러스터 간 연결이 있는 도메인은 삭제할 수 없습니다. 도메인을 삭제하려면 먼저 해당 도메인과의 수신 연결과 발신 연결을 모두 제거합니다. 그러면 도메인을 삭제하기 전에 클러스터 간 도메인 사용자를 고려할 수 있습니다.

**연결 삭제**

1. [https://console.aws.amazon.com/aos/home](https://console.aws.amazon.com/aos/home) Amazon OpenSearch Service 콘솔에 로그인합니다.

1. 왼쪽 탐색 메뉴에서 **도메인**을 선택합니다.

1. 삭제할 도메인의 이름을 선택한 후 **연결** 탭을 선택합니다.

1. 삭제할 연결의 이름을 선택합니다.

1. **삭제**를 선택하고 삭제를 확인합니다.