Amazon Elasticsearch Service에 대한 클러스터 간 검색 - Amazon Elasticsearch Service

문서의 영문과 번역 사이에 충돌이 있는 경우에는 영문 버전을 따릅니다. 번역 버전은 기계 번역을 사용하여 제공합니다.

Amazon Elasticsearch Service에 대한 클러스터 간 검색

Amazon Elasticsearch Service에 대한 클러스터 간 검색을 사용하면 연결된 여러 도메인에서 쿼리 및 집계를 수행할 수 있습니다.

일반적으로 단일한 큰 도메인 대신 여러 개의 작은 도메인을 사용하는 것이 더 좋습니다. 특히 다양한 유형의 워크로드를 실행할 때

워크로드별 도메인을 사용하면 다음 작업을 수행할 수 있습니다.

  • 특정 워크로드에 대한 인스턴스 유형을 선택하여 각 도메인을 최적화합니다.

  • 워크로드 전반에 걸쳐 결함 격리 경계를 설정합니다. 즉, 워크로드 중 하나가 실패하면 해당 특정 도메인 내에 결함이 포함되며 다른 워크로드에 영향을 주지 않습니다.

  • 여러 도메인에서 더욱 쉽게 조정

클러스터 간 검색은 Kibana를 지원하므로 모든 도메인에서 시각화 및 대시보드를 생성할 수 있습니다.

Limitations

클러스터 간 검색에는 몇 가지 중요한 제한 사항이 있습니다.

  • 2020년 6월 3일 이후에 생성된 도메인에 대해서만 클러스터 간 검색을 구현할 수 있습니다.

  • 자체 관리형 Elasticsearch 클러스터에는 연결할 수 없습니다.

  • 다른 AWS 리전의 도메인에는 연결할 수 없습니다.

  • 도메인에는 최대 20개의 발신 연결이 있을 수 있습니다. 마찬가지로 도메인에는 최대 20개의 수신 연결이 있을 수 있습니다.

  • 도메인은 동일한 메이저 버전을 공유하거나 최종 마이너 버전과 다음 메이저 버전에 있어야 합니다(예를 들어, 6.8과 7.x는 호환 가능).

  • 클러스터 간 검색에는 사용자 지정 사전이나 SQL을 사용할 수 없습니다.

  • AWS CloudFormation을 사용하여 도메인을 연결할 수 없습니다.

  • M3 및 T2 인스턴스에서는 클러스터 간 검색을 사용할 수 없습니다.

클러스터 간 검색 전제 조건

클러스터 간 검색을 설정하기 전에 도메인이 다음 요구 사항을 충족하는지 확인하십시오.

  • Elasticsearch 버전 6.7 이상

  • 세분화된 액세스 제어가 활성화됨

  • 노드 간 암호화가 활성화됨

클러스터 간 검색 요금

도메인 간 검색에는 추가 요금이 부과되지 않습니다.

연결 설정

"소스" 도메인은 클러스터 간 검색 요청이 시작되는 도메인을 나타냅니다. 최저. 즉, 소스 도메인은 초기 검색 요청을 보내는 도메인입니다.

“대상” 도메인은 소스 도메인이 쿼리하는 도메인입니다.

클러스터 간 연결은 소스 도메인에서 대상 도메인으로 단방향입니다. 즉, 대상 도메인이 소스 도메인을 쿼리할 수 없습니다. 그러나 반대 방향으로 다른 연결을 설정할 수 있습니다.


        클러스터 간 검색 권한 부여 흐름

소스 도메인은 대상 도메인에 대한 "아웃바운드" 연결을 생성합니다. 대상 도메인은 소스 도메인에서 “인바운드” 연결 요청을 받습니다.

연결을 설정하려면

  1. 도메인 대시보드에서 도메인을 선택하고 Cross-cluster search connections(클러스터 간 검색 연결) 탭을 선택합니다.

  2. 아웃바운드 클러스터 연결 섹션에서 연결을 선택합니다.

  3. 클러스터 연결 페이지의 연결 별칭에 연결 이름을 입력합니다.

  4. AWS 계정 또는 다른 계정의 도메인 연결 중에서 선택합니다.

    • AWS 계정의 도메인에 연결하려면 드롭다운 목록에서 연결할 도메인을 선택하고 전송을 선택합니다.

    • 다른 AWS 계정의 도메인에 연결하려면 원격 도메인의 ARN을 지정하고 전송을 선택합니다.

  5. 교차 클러스터 검색은 먼저 연결 요청을 검증하여 호환성을 보장하기 위해 사전 요구 사항이 충족되는지 확인합니다. 도메인이 호환되지 않는 것으로 확인되면 연결 요청이 “검증 실패” 상태로 들어갑니다.

  6. 연결 요청이 성공적으로 검증되면 대상 도메인으로 전송되어 승인을 받아야 합니다. 이 승인이 이루어질 때까지 연결은 “수락 대기 중” 상태로 유지됩니다. 대상 도메인에서 연결 요청이 수락되면 상태가 "활성"으로 변경되고 대상 도메인을 쿼리에 사용할 수 있게 됩니다.

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

연결이 설정되면 연결된 도메인의 노드 간에 흐르는 모든 트래픽이 암호화됩니다. VPC 도메인을 비VPC 도메인에 연결하는 경우 및 비-VPC 도메인은 인터넷에서 트래픽을 수신할 수 있는 공용 끝점이며, 도메인 간의 클러스터 간 트래픽은 여전히 암호화되고 안전합니다.

연결 제거

연결을 제거하면 인덱스에 대한 클러스터 간 작업이 중지됩니다.

  1. 도메인 대시보드에서 Cross-cluster search connections(클러스터 간 검색 연결) 탭을 선택합니다.

  2. 제거할 도메인 연결을 선택하고 제거를 선택합니다.

  3. 삭제를 확인하려면 팝업 상자에서 제거를 선택합니다.

소스 도메인이나 대상 도메인에서 이러한 단계를 수행하여 연결을 제거할 수 있습니다. 연결이 제거된 후에도 15일 동안 “삭제됨” 상태로 계속 표시됩니다.

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

보안 설정 및 샘플 연습

  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:remote_index 대신 arn:aws:es:us-east-1:123456789012:domain/my-domain/local_index,dst%3Aremote_index를 사용하십시오.

    세분화된 액세스 제어 외에 제한적인 액세스 정책을 사용하도록 선택하는 경우 정책에서 최소한 es:ESHttpGet에 대한 액세스를 허용해야 합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::123456789012:user/test-es-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)에서 데이터를 검색하는 경우 두 도메인에 대한 사용 권한이 필요합니다.

    세분화된 액세스 제어에서 사용자는 관련 인덱스에 대한 표준 read 또는 search 권한 외에 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" } ] }

    es:ESCrossClusterGet 권한이 /dst-domain/*이 아닌 /dst-domain에 적용되었는지 확인합니다.

    그러나 이 최소 정책은 클러스터 간 검색만 허용합니다. 문서 인덱싱 및 표준 검색 수행과 같은 다른 작업을 수행하려면 추가 권한이 필요합니다. 대상 도메인에서 다음 정책을 사용하는 것이 좋습니다.

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

      도메인 대시보드의 Cross-cluster search connections(클러스터 간 검색 연결) 탭에서 연결 별칭을 찾을 수 있습니다.

    • 연결 별칭이 cluster_bdomain-a -> domain-b과 연결 별칭이 cluster_cdomain-a -> domain-c 간에 연결을 설정하는 경우, 다음과 같이 domain-a, domain-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 } } ] } }

      검색 요청이 성공적으로 실행되려면 검색하는 모든 대상 클러스터를 사용할 수 있어야 합니다. 그렇지 않으면 전체 요청이 실패—도메인 중 하나를 사용할 수 없는 경우에도 검색 결과가 반환되지 않습니다.

Kibana

단일 도메인과 동일한 방식으로 여러 연결된 도메인의 데이터를 시각화할 수 있습니다. 단, connection-alias:index. 따라서 인덱스 패턴이 connection-alias:index.