通过跨集群搜索实现跨区域跨账户和跨区域数据访问 - 亚马逊 OpenSearch 服务
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

通过跨集群搜索实现跨区域跨账户和跨区域数据访问

借助 Amazon OpenSearch Serverless 中的跨集群搜索,您可以跨多个相连的域执行查询和聚合。

Amazon OpenSearch Serverless 中的跨集群搜索使用源域和目标的概念。跨集群搜索请求来自源域。目标域可以位于不同的 Amazon Web Services 区域 ( Amazon Web Services 账户 或两者兼而有之)中,供源域进行查询。使用跨集群搜索,您可以将源域配置为在同一个账户中与您的 OpenSearch 用户界面关联,然后创建与目标域的连接。因此,即使目标网域位于不同的账户或区域,您也可以使用 OpenSearch 用户界面处理来自目标域的数据。

您需要为传入和传出亚马逊 OpenSearch 服务的数据支付标准 Amazon 数据传输费用。您无需为 OpenSearch 服务域内的节点之间传输的数据付费。有关数据 “输入” 和 “传出” 费用的更多信息,请参阅 Amazon EC2 按需定价页面上的数据传输

您可以使用跨集群搜索作为将 OpenSearch 用户界面与不同账户或不同区域中的集群关联的机制。默认情况下,作为加密的一部分,域之间的请求在传输过程中会进行 node-to-node加密。

注意

开源 OpenSearch 工具还记录了跨集群搜索。请注意,与托管式 Amazon OpenSearch 无服务器域相比,开源集群的开源工具设置差异很大。

特别是在 Amazon OpenSearch Serverless 中,您可以使用 Amazon Web Services Management Console 而不是请求来配置跨集群连接。cURL除精细访问控制外,托管式服务还使用 Amazon Identity and Access Management (IAM) 进行跨集群身份验证。

因此,我们建议在为您的域配置跨集群搜索时使用本主题中的内容,而不是开源 OpenSearch文档。

使用跨集群搜索时的功能差异

与普通域相比,使用跨集群搜索创建的目标域具有以下功能差异和要求:

  • 您无法向远程集群写入或运行PUT命令。您对远程集群的访问权限是只读的。

  • 源域和目标域必须均为 OpenSearch 域。不能连接 Elasticsearch 域或 UI 的自管理 OpenSearch /Elasticsearch 集群。 OpenSearch

  • 一个域最多可以包含 20 个与其他域的连接。这包括传出和传入连接。

  • 源域的版本必须与目标域相同或更高。 OpenSearch 如果要在两个域之间建立双向连接,则两个域的版本应相同。我们建议在建立连接之前将两个域名都升级到最新版本。如果在设置双向连接后需要更新域,则必须先删除该连接,然后再重新创建连接。

  • 您无法对远程集群使用自定义字典或 SQL。

  • 您不能使用 Amazon CloudFormation 来连接域名。

  • 不能在 M3 和可突增(T2 和 T3)实例上使用跨集群搜索。

  • 跨集群搜索不适用于 Amazon OpenSearch Serverless 馆藏。

UI 的跨集群搜索先决条件 OpenSearch

在设置包含两个 OpenSearch 域的跨集群搜索之前,请确保域满足以下要求:

  • 已启用对两个域的精细访问控制

  • Node-to-node 两个域都启用了加密

通过跨集群搜索设置跨区域和跨账户数据访问的访问权限

当您向源域发送跨集群搜索请求时,该域会根据其域访问策略评估该请求。跨集群搜索需要精细访问控制。以下是源域上开放访问策略的示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:region: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以下是示例:

{ "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:account:domain/my-domain/*" } ] }

源网域的@@ 精细访问控制会评估请求,以确定请求是使用有效的 IAM 还是 HTTP 基本证书签名的。如果是,则接下来会进行细粒度的访问控制,评估用户是否有权执行搜索和访问数据。

以下是搜索的权限要求:

  • 如果请求仅搜索目标域上的数据(例如dest-alias:dest-index/_search),则只需要目标域的权限。

  • 如果请求搜索两个域上的数据(例如source-index,dest-alias:dest-index/_search),两个域都需要权限。

  • 要使用精细的访问控制,除了相关索引的标准读取或搜索权限外,还需要该权限。indices:admin/shards/search_shards

源域将请求传递到目标域。目标域根据其域访问策略评估该请求。要支持 OpenSearch UI 中的所有功能,例如编制文档索引和执行标准搜索,必须设置完全权限。以下是我们针对目标域推荐的政策的示例:

{ "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 用户界面的本地源域名。源域创建与目标域的出站连接。目标域收到来自源域的入站连接请求。

此镜像说明了从源域到目标域的跨集群搜索连接是单向的。
在域之间创建连接
  1. https://console.aws.amazon.com/aos/家中登录亚马逊 OpenSearch 服务控制台。

  2. 在左侧导航中,选择 Domains()。

  3. 选择要用作源域的域名,然后选择 “连接” 选项卡。

  4. 在 “出站连接” 区域中,选择 “请求”。

  5. 对于 Connection alias(连接别名),输入您的连接的名称。 OpenSearch 用户界面中使用连接别名来选择目标域。

  6. 对于连接模式,请选择直接进行跨集群搜索或复制。

  7. 要指定在搜索期间连接应跳过不可用的群集,请选中 “跳过不可用的群集” 复选框。选择此选项可确保无论一个或多个远程集群发生故障,跨集群查询都将返回部分结果。

  8. 对于目标集群,请在 “连接到此集群” Amazon Web Services 账户和 “连接到另一个集群” 之间进行选择 Amazon Web Services 账户。

  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 域是可以接收来自 Internet 的流量的公共终端节点时,域之间的跨集群流量仍处于加密和安全状态。

使用跨集群搜索测试跨区域和跨账户数据访问的安全设置

通过跨集群搜索为跨区域和跨账户数据访问设置访问权限后,我们建议使用Postman用于协作 API 开发的第三方平台来测试设置。

要设置您的安全设置,请使用 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. (可选)您可以创建在一次搜索中包含多个域名的配置。例如,假设您设置了以下内容:

    与之间的连接 domain-adomain-b,其连接别名为 cluster_b

    与之间的连接 domain-adomain-c,其连接别名为 cluster_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 } } ] } }

如果您没有选择在连接设置中跳过不可用集群,搜索的所有目标集群必须可用才能成功运行搜索请求。否则,整个请求将失败——即使只有一个域不可用,也不会返回任何搜索结果。

删除连接

删除连接会停止对目标域执行任何跨集群搜索操作。

您可以在源域或目标域上执行以下步骤以删除连接。删除连接后,其状态为 15 天,其Deleted状态为。

不能删除具有活动跨集群连接的域。要删除域,请首先从该域中删除所有传入和传出连接。这是为了确保在删除域之前考虑到了跨集群域用户。

删除连接
  1. https://console.aws.amazon.com/aos/家中登录亚马逊 OpenSearch 服务控制台。

  2. 在左侧导航中,选择 Domains()。

  3. 选择要删除的域名,然后选择 “连接” 选项卡。

  4. 选择需要删除的连接名称。

  5. 选择删除角色,然后确认删除。