本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
通过跨集群搜索实现跨区域跨账户和跨区域数据访问
借助 Amazon OpenSearch Serverless 中的跨集群搜索,您可以跨多个相连的域执行查询和聚合。
Amazon OpenSearch Serverless 中的跨集群搜索使用源域和目标域的概念。跨集群搜索请求来自源域。目标域可以位于不同的 Amazon Web Services 区域 ( Amazon Web Services 账户 或两者兼而有之)中,供源域进行查询。使用跨集群搜索,您可以将源域配置为在同一个账户中与您的 OpenSearch 用户界面关联,然后创建与目标域的连接。因此,即使目标网域位于不同的账户或区域,您也可以使用 OpenSearch 用户界面处理来自目标域的数据。
您需要为传入和传出亚马逊 OpenSearch 服务的数据支付标准 Amazon 数据传输费用
您可以使用跨集群搜索作为将 OpenSearch 用户界面与不同账户或不同区域中的集群关联的机制。默认情况下,作为加密的一部分,域之间的请求在传输过程中会进行 node-to-node加密。
注意
开源 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 用户界面的本地源域名。源域创建与目标域的出站连接。目标域收到来自源域的入站连接请求。

在域之间创建连接
-
在https://console.aws.amazon.com/aos/家
中登录亚马逊 OpenSearch 服务控制台。 -
在左侧导航中,选择 Domains(域)。
-
选择要用作源域的域名,然后选择 “连接” 选项卡。
-
在 “出站连接” 区域中,选择 “请求”。
-
对于 Connection alias(连接别名),输入您的连接的名称。 OpenSearch 用户界面中使用连接别名来选择目标域。
-
对于连接模式,请选择直接进行跨集群搜索或复制。
-
要指定在搜索期间连接应跳过不可用的群集,请选中 “跳过不可用的群集” 复选框。选择此选项可确保无论一个或多个远程集群发生故障,跨集群查询都将返回部分结果。
-
对于目标集群,请在 “连接到此集群” Amazon Web Services 账户和 “连接到另一个集群” 之间进行选择 Amazon Web Services 账户。
-
对于 ARN,输入集群的 Amazon 资源名称 (ARN)。域名 ARN 可以位于域名详情页面的 “一般信息” 区域。
域必须满足以下要求:
-
ARN 必须采用以下格式。
arn:
例如:partition
:es:region
account-id
:type
/domain-id
arn:aws:es:us-east-2:111222333444:domain/my-domain
-
必须将该域配置为使用 OpenSearch 版本 1.0(或更高版本)或 Elasticsearch 版本 6.7(或更高版本)。
-
必须对域启用精细访问控制。
-
域名必须正在运行 OpenSearch。
-
-
选择请求。
跨集群搜索首先验证连接请求,以确保满足先决条件。如果域不兼容,则连接请求将进入Validation failed
状态。
如果连接请求成功验证,则会将其发送到目标域,并且必须经过批准。在此审批进行之前,连接将保持Pending acceptance
状态。当连接请求被目标域接受后,状态将更改为 Active
,且目标域变为可供查询。
域页面显示了目标域的整体域运行状况和实例运行状况的详细信息。只有域拥有者具备创建、查看、删除和监控域之间的连接的灵活性。
连接建立之后,在所连接域的节点之间流动的任何流量都将进行加密。当您将 VPC 域连接到非 VPC 域并且非 VPC 域是可以接收来自 Internet 的流量的公共终端节点时,域之间的跨集群流量仍处于加密和安全状态。
使用跨集群搜索测试跨区域和跨账户数据访问的安全设置
通过跨集群搜索为跨区域和跨账户数据访问设置访问权限后,我们建议使用Postman
要设置您的安全设置,请使用 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" } } ] } -
(可选)您可以创建在一次搜索中包含多个域名的配置。例如,假设您设置了以下内容:
与之间的连接
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 } } ] } }
如果您没有选择在连接设置中跳过不可用集群,搜索的所有目标集群必须可用才能成功运行搜索请求。否则,整个请求将失败——即使只有一个域不可用,也不会返回任何搜索结果。
删除连接
删除连接会停止对目标域执行任何跨集群搜索操作。
您可以在源域或目标域上执行以下步骤以删除连接。删除连接后,其状态为 15 天,其Deleted
状态为。
不能删除具有活动跨集群连接的域。要删除域,请首先从该域中删除所有传入和传出连接。这是为了确保在删除域之前考虑到了跨集群域用户。
删除连接
-
在https://console.aws.amazon.com/aos/家
中登录亚马逊 OpenSearch 服务控制台。 -
在左侧导航中,选择 Domains(域)。
-
选择要删除的域名,然后选择 “连接” 选项卡。
-
选择需要删除的连接名称。
-
选择删除角色,然后确认删除。