连接到不同 Elastic Cloud Enterprise 环境中的部署
本节解释如何配置部署以远程连接到属于不同 Elastic Cloud Enterprise 环境的集群。
在远程集群的情况下,发起连接和请求的 Elasticsearch 集群或部署通常被称为本地集群,而接收请求的 Elasticsearch 集群或部署则被称为远程集群。
在开始之前,请考虑您希望用于验证集群之间远程连接的安全模型,并按照相应的步骤操作。
- API 密钥
-
对于基于 Elastic Stack 8.14 或更高版本的部署,您可以使用 API 密钥对到远程集群的跨集群操作进行身份验证和授权。该模型使用专用的服务端点(默认端口为
9443),让管理员能够精细控制远程访问。API 密钥在远程集群上创建,并定义了任何用户在远程集群上可以行使的最大权限。具有远程权限的本地用户角色授予特定用户访问权限,且不能扩展 API 密钥的权限。默认情况下,除非用户是超级用户或被分配了此类角色,否则没有任何远程权限。从 Elastic Stack 9.3 开始,API 密钥安全模型还支持强身份验证,从而添加了一层额外的安全性。使用此功能,可以限制 API 密钥仅能用于提供允许的证书身份的请求,远程集群将在身份验证期间对其进行验证。
- TLS 证书(在 Elastic Stack 9.0.0 中已弃用)
- 该模型在 Elasticsearch 传输(transport)接口上使用双向 TLS 身份验证来进行跨集群操作。用户身份验证在本地集群上执行,用户的角色名称会被传递到远程集群以进行授权。由于本地集群上的超级用户会自动获得对远程集群的全盘读取访问权限,因此该模型仅适用于同一安全域内的集群。
请按照以下步骤为远程集群配置API 密钥安全模型。如果遇到任何问题,请参阅故障排除。
- 本地和远程部署必须基于 Elastic Stack 8.14 或更高版本。
- 与基于证书的安全模型不同,API 密钥模型不需要集群之间的双向信任;只需本地集群信任远程集群的证书即可。
- 在远程集群上,使用 Elasticsearch API 或 Kibana 创建跨集群 API 密钥。配置该密钥,使其包含对要用于跨集群搜索或跨集群复制的索引的访问权限。
- 将编码后的密钥(响应中的
encoded字段)复制到安全位置。配置本地集群时需要用到它。
本地部署需要先前创建的 API 密钥,以便使用相应的权限集向远程部署进行身份验证。要启用此功能,请将 API 密钥添加到本地部署的密钥库(keystore)中。
要遵循的步骤取决于远程 ECE 环境的代理或负载均衡基础设施的证书颁发机构 (CA) 是公有还是私有。
CA 是公有的
在 Deployments 页面上,选择您的部署。
按名称、ID 缩小列表范围,或从其他几个筛选器中进行选择。要进一步精简列表,请使用筛选器的组合。
从导航菜单中选择 安全性 (Security)。
找到 远程连接 (Remote Connections) > 信任管理 (Trust management) > 使用 API 密钥的连接 (Connections using API keys),然后选择 添加 API 密钥 (Add API key)。
填写这两个字段。
- 在 远程集群名称 (Remote cluster name) 中,输入您选择的别名。您稍后将使用此别名连接到远程集群。别名必须为小写,且仅能包含字母、数字、破折号和下划线。
- 在 跨集群 API 密钥 (Cross-cluster API key) 中,粘贴编码后的跨集群 API 密钥。
单击 添加 (Add) 以保存 API 密钥。
重启本地部署以重新加载新设置。为此,请转到部署的主页面,找到 操作 (Actions) 菜单,然后选择 重启 Elasticsearch (Restart Elasticsearch)。
注意如果本地部署运行在 8.14 或更高版本,您无需再执行此步骤,因为密钥库会自动重新加载新的 API 密钥。
如果您稍后需要使用不同的权限更新远程连接,请参阅更改用于远程连接的跨集群 API 密钥。
CA 是私有的
在配置本地部署之前,请检索远程 ECE 代理的 CA 证书。要查找此证书:
在远程 ECE 环境中,转到 Platform > Settings > TLS certificates。
选择 Proxy 下的 Show certificate chain。
点击 Copy root certificate 并将其粘贴到新文件中。根证书是证书链中显示的最后一个证书。
将文件保存为
.crt。
您现在可以继续配置本地部署。您保存的 CA 文件将在后续步骤中使用。
在 Deployments 页面上,选择您的部署。
按名称、ID 缩小列表范围,或从其他几个筛选器中进行选择。要进一步精简列表,请使用筛选器的组合。
从导航菜单中选择 安全性 (Security)。
选择 Remote Connections > Add trusted environment,然后选择 Elastic Cloud Enterprise。接着点击 Next。
选择 API 密钥 (API keys) 作为身份验证机制,然后单击 下一步 (Next)。
当被问及远程环境代理或负载均衡基础设施的证书颁发机构 (CA) 是否为公有时,选择 否,它是私有的 (No, it is private)。
添加 API 密钥
填写这两个字段。
- 在 远程集群名称 (Remote cluster name) 中,输入您选择的别名。您稍后将使用此别名连接到远程集群。别名必须为小写,且仅能包含字母、数字、破折号和下划线。
- 在 跨集群 API 密钥 (Cross-cluster API key) 中,粘贴编码后的跨集群 API 密钥。
单击 添加 (Add) 以保存 API 密钥。
对您想要添加的每个 API 密钥重复这些步骤。例如,如果您想将远程环境的多个集群用于 CCR 或 CCS。
添加远程环境的 CA 证书。
为受信任的环境提供一个名称。该名称将显示在部署的 安全性 (Security) 页面的信任摘要中。
选择 创建信任 (Create trust) 以完成配置。
重启本地部署以重新加载新设置。为此,请转到部署的主页面,找到 操作 (Actions) 菜单,然后选择 重启 Elasticsearch (Restart Elasticsearch)。
注意如果本地部署运行在 8.14 或更高版本,您无需再执行此步骤,因为密钥库会自动重新加载新的 API 密钥。
如果您稍后需要使用不同的权限更新远程连接,请参阅更改用于远程连接的跨集群 API 密钥。
为了在其他 ECE 环境中配置远程集群,您首先需要在两个 ECE 环境的平台之间建立双向信任关系
- 在第一个 ECE 环境的 Platform > Trust Management > Trust parameters 下下载证书并复制环境 ID。
- 使用上一步中的证书和环境 ID,在另一个 ECE 环境的 Platform > Trust Management > Trusted environments 下创建新的信任关系。
- 从第二个 ECE 环境下载证书并复制环境 ID,然后与第一个 ECE 环境中的资源建立新的信任关系。
现在,这些环境中的部署将能够配置与另一个环境中的部署的信任关系。信任关系必须始终是双向的(本地集群必须信任远程集群,反之亦然),且可以在每个部署的安全设置中进行配置。
访问要用于跨集群操作的部署的 Security 页面。
选择 Remote Connections > Add trusted environment,然后选择 Elastic Cloud Enterprise。接着点击 Next。
选择 证书 (Certificates) 作为身份验证机制,然后单击 下一步 (Next)。
从下拉菜单中,选择在配置平台级信任中配置的环境之一。
选择以下选项之一以配置与 ECE 环境的信任级别
- 所有部署 (All deployments) - 此部署信任 ECE 环境中的所有部署,包括新建的部署。
- 特定部署 (Specific deployments) - 指定您希望在 ECE 环境中信任的现有部署。必须为每个远程集群输入完整的 Elasticsearch 集群 ID。Elasticsearch
Cluster ID可以在部署概览页面的 Applications 下找到。
选择 创建信任 (Create trust) 以完成配置。
配置 ECE 环境中的对应部署以信任此部署。只有当两个部署相互信任时,您才能成功连接它们。
请注意,必须完整且正确地输入环境 ID 和集群 ID。出于安全原因,无法对 ID 进行验证。如果跨环境信任似乎不起作用,从仔细检查这些 ID 开始是一个很好的切入点。
使用 API
您可以使用 Elasticsearch payload 的适当信任设置来更新部署。
本页上的 curl 示例使用 HTTPS。如果远程端点使用的是非公信的证书(例如由私有 CA 或公司 CA 签发的证书),请使用 --cacert /path/to/ca.pem 提供相应的 CA 证书,以便 curl 可以验证它。有关更多细节,请参阅管理安全证书。
仅用于测试时,您可以使用 --insecure(或 -k)跳过证书验证。此标志会关闭 TLS 信任检查,不应在生产环境中使用。
可以使用信任关系 API 建立两个 Elastic Cloud Enterprise 环境之间的信任。例如,调用获取信任关系列表端点可以获取受信任环境的列表
curl -X GET -H "Authorization: ApiKey $ECE_API_KEY" https://$COORDINATOR_HOST:12443/api/v1/regions/ece-region/platform/configuration/trust-relationships?include_certificate=false
对于每个远程 ECE 环境,它将返回类似于以下内容:
{
"id":"83a7b03f2a4343fe99f09bd27ca3d9ec",
"name":"ECE2",
"trust_by_default":false,
"account_ids":[
"651598b101e54ccab1bfdcd8b6e3b8be"
],
"local":false,
"last_modified":"2022-01-9T14:33:20.465Z"
}
为了信任名称为 ECE2 的环境中的集群 ID 为 cf659f7fe6164d9691b284ae36811be1 的部署(注意:请使用 Elasticsearch 集群 ID,而不是部署 ID),您需要更新信任设置,添加如下所示的外部信任关系
{
"trust":{
"accounts":[
{
"account_id":"ec38dd0aa45f4a69909ca5c81c27138a",
"trust_all":true
}
],
"external":[
{
"trust_relationship_id":"83a7b03f2a4343fe99f09bd27ca3d9ec",
"trust_all":false,
"trust_allowlist":[
"cf659f7fe6164d9691b284ae36811be1"
]
}
]
}
}
您现在可以远程连接到受信任的集群。
在本地集群上,使用 Kibana 或 Elasticsearch API 添加远程集群。
此远程集群配置使用的是代理模式 (Proxy mode),并要求 ECE 分配器 (allocator) 能够连接到远程地址端点。
要在 Kibana 中添加远程集群
转到导航菜单中的 远程集群 (Remote Clusters) 管理页面,或使用全局搜索字段。
选择 添加远程集群 (Add a remote cluster)。
在 Select connection type 中,选择您之前准备的身份验证机制(API keys 或 Certificates),然后点击 Next。
在 添加连接信息 (Add connection information) 中,填写以下字段
远程集群名称 (Remote cluster name):此集群别名 (cluster alias) 是代表与远程集群连接的唯一标识符,用于区分本地和远程索引。
使用 API 密钥身份验证时,此别名必须与您在 Cloud UI 中添加 API 密钥时配置的 Remote cluster name 保持一致。
Remote address:此值可以在要用作远程集群的 Elastic Cloud Enterprise 部署的 Security 页面上找到。从 Remote cluster parameters 区域复制 Proxy address。
注意如果您将 API 密钥用作安全模型,请将端口更改为
9443。配置高级选项 (Configure advanced options)(可选):如果您需要自定义其他设置,请展开此部分。
TLS 服务器名称 (TLS server name):如果远程集群出示的证书是为与远程地址不同的名称签署的,请指定一个值。
此值可以在要用作远程集群的 Elastic Cloud Enterprise 部署的 Security 页面上找到。从 Remote cluster parameters 区域复制 Server name。
套接字连接数 (Socket connections):定义与远程集群打开的连接数。
有关可用客户端连接设置的完整列表,请参阅远程集群设置参考。
点击 Next。
在 确认设置 (Confirm setup) 中,单击 添加远程集群 (Add remote cluster)(您已在上一步中建立了信任)。
如果您在建立连接时遇到问题,且远程集群是带有私有证书的 Elastic Cloud Enterprise 环境的一部分,请确保代理地址和服务器名称与证书信息相匹配。有关更多信息,请参阅在 Elastic Cloud Enterprise 中管理端点。
要添加远程集群,请使用 更新集群设置 API。配置以下字段
Remote cluster alias:使用 API 密钥身份验证时,集群别名必须与您在 Cloud UI 中添加 API 密钥时配置的 Remote cluster name 相匹配。
mode:
proxyproxy_address:此值可以在要用作远程集群的 Elastic Cloud Enterprise 部署的 Security 页面上找到。从 Remote cluster parameters 区域复制 Proxy address。
使用 API 时,可以通过用分号拼接字段
metadata.endpoint和端口9400,从 Elasticsearch 资源信息中获取此值。注意如果您将 API 密钥用作安全模型,请将端口更改为
9443。server_name:此值可以在要用作远程集群的 Elastic Cloud Enterprise 部署的 Security 页面上找到。从 Remote cluster parameters 区域复制 Server name。
使用 API 时,可以从 Elasticsearch 资源信息字段
metadata.endpoint中获取此值。
此示例展示了添加或更新远程集群的 API 调用。别名 alias-for-my-remote-cluster 必须与向部署添加 API 密钥时使用的远程集群名称相匹配
PUT /_cluster/settings
{
"persistent": {
"cluster": {
"remote": {
"alias-for-my-remote-cluster": {
"mode":"proxy",
"proxy_address": "<REMOTE_CLUSTER_ADDRESS>:9443",
"server_name": "<REMOTE_CLUSTER_SERVER_NAME>"
}
}
}
}
}
- 远程集群别名
有关代理模式下可用的客户端连接设置的完整列表,请参阅远程集群设置参考。
如果您将基于 API 密钥的安全模型用于跨集群复制或跨集群搜索,用于连接到远程集群的跨集群 API 密钥将定义任何用户在该远程集群上可以行使的最大权限。请在本地集群上定义具有远程索引权限或远程集群权限的用户角色,以向特定用户授予远程访问权限。默认情况下,除非用户是超级用户或被分配了包含远程权限的角色,否则没有任何远程权限。
如果您使用的是基于 TLS 证书的身份验证,请在本地集群和远程集群上创建同名的角色。每个集群各自定义其角色权限,但名称必须匹配,以便在连接的两端均能强制执行授权。
有关更多详细信息,请参阅为跨集群复制配置权限和为跨集群搜索配置权限。