正在加载

访问自管理环境中的集群

ECE 自管理

本节介绍如何配置部署以远程连接到自管理集群。

在开始之前,请考虑您希望用于验证集群之间远程连接的安全模型,并按照相应的步骤操作。

API 密钥
对于基于 Elastic Stack 8.14 或更高版本的部署,您可以使用 API 密钥来验证和授权与远程集群的跨集群操作。此模型为本地和远程部署的管理员提供细粒度的访问控制。
TLS 证书(在 Elastic Stack 9.0.0 中已弃用)
此模型使用相互 TLS 身份验证进行跨集群操作。用户身份验证在本地集群上执行,用户的角色名称将传递到远程集群。本地部署上的超级用户可以完全读取远程部署,因此仅适用于位于同一安全域中的部署。

API 密钥身份验证使本地集群能够通过跨集群 API 密钥与远程集群进行身份验证。 API 密钥需要由远程集群的管理员创建。本地集群配置为在每次向远程集群发出请求时提供此 API 密钥。远程集群验证 API 密钥并根据 API 密钥的权限授予访问权限。

来自本地集群的所有跨集群请求都受到 API 密钥权限的约束,而与与请求关联的本地用户无关。例如,如果 API 密钥仅允许对远程集群上的 my-index 进行读取访问,即使本地集群的超级用户也会受到此约束的限制。此机制使远程集群的管理员能够完全控制谁可以通过跨集群搜索和/或跨集群复制访问哪些数据。远程集群的管理员可以确信,除了明确分配给 API 密钥的权限之外,不可能进行任何访问。

在本地集群端,并非每个本地用户都需要访问 API 密钥允许的每一部分数据。本地集群的管理员可以进一步配置对本地用户的其他权限约束,以便每个用户只能访问必要的远程数据。请注意,只能进一步减少 API 密钥允许的单个本地用户的权限。无法增加权限以超出 API 密钥允许的范围。

如果您遇到任何问题,请参阅问题排查

  • 本地和远程部署必须在 Elastic Stack 8.14 或更高版本上。
  • 在您将用作远程部署的部署上,使用Elasticsearch APIKibana来创建跨集群 API 密钥。将其配置为具有对您要用于跨集群搜索或跨集群复制的索引的访问权限。
  • 将编码密钥(响应中的 encoded)复制到安全位置。您将在下一步中需要它。

先前创建的 API 密钥将由本地部署使用,以便使用相应的权限集向远程部署进行身份验证。为此,您需要将 API 密钥添加到本地部署的密钥库中。

要遵循的步骤取决于远程环境的 Elasticsearch HTTPS 服务器、代理或负载平衡基础设施的证书颁发机构 (CA) 是公共的还是私有的。

可以配置部署以信任任何环境中的所有或特定部署

  1. 安全性菜单中,选择远程连接 > 添加受信任环境,然后选择自管理,然后单击下一步

  2. 选择证书作为身份验证机制,然后单击下一步

  3. 上传自管理环境的证书颁发机构的公共证书(用于签署所有集群证书的证书)。证书需要采用 PEM 格式,并且不应包含私钥。如果您只有 p12 格式的密钥,则可以像这样创建必要的文件:openssl pkcs12 -in elastic-stack-ca.p12 -out newfile.crt.pem -clcerts -nokeys

  4. 选择要信任的集群。这里有两种选择,具体取决于自管理集群中节点提供的证书的主题名称

    • 遵循 Elastic Cloud 模式。在 Elastic Cloud 中,所有 Elasticsearch 节点的证书都遵循以下约定:CN = {{node_id}}.node.{{cluster_id}}.cluster.{{scope_id}}。如果您在自管理环境中遵循相同的约定,则选择此选项,您将能够选择要信任的所有或特定集群。

    • 如果您的集群不遵循上述节点证书主题名称的约定,您仍然可以指定应由该部署信任的每个节点的节点名称。(请记住,遵循此约定将简化此集群的管理,否则每次自管理集群的拓扑发生变化时,以及信任限制文件都需要更新此配置。因此,建议迁移您的集群证书以遵循先前的约定)。

      注意

      在没有指定 otherName 值的集群中,信任管理将无法正常工作,就像开箱即用的Elasticsearch 安装中的默认情况一样。要让 Elasticsearch certutil 生成具有 otherName 属性的新证书,请使用带有 cn 属性的文件输入,如下例所示。

  5. 为受信任的环境提供名称。该名称将显示在部署的安全性页面的信任摘要中。

  6. 选择创建信任以完成配置。

  7. 配置自管理集群以信任此部署,以便两个部署都配置为相互信任

    • 下载用于签署您的部署节点证书的证书颁发机构(可以在您的部署的安全性页面中找到)
    • 信任此 CA,可以使用 设置 xpack.security.transport.ssl.certificate_authoritieselasticsearch.yml 中进行配置,或者 将其添加到信任存储
  8. 使用 Elasticsearch certutil 生成带有 otherName 属性的证书。创建一个名为 instances.yaml 的文件,其中包含本地集群中所有节点的详细信息,如下所示。dnsip 设置是可选的,但 cn 对于下一步中使用 trust_restrictions 路径设置是必需的。接下来,运行 ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 -in instances.yaml 以一次性为所有节点创建新证书。然后,您可以将生成的文件复制到每个节点。

    instances:
      - name: "node1"
        dns: ["node1.mydomain.com"]
        ip: ["192.168.1.1"]
        cn: ["node1.node.1234567abcd.cluster.myscope.account"]
      - name: "node2"
        dns: ["node2.mydomain.com"]
        ip: ["192.168.1.2"]
        cn: ["node2.node.1234567abcd.cluster.myscope.account"]
    
  9. 限制受信任集群,仅允许您的自管理集群应信任的集群。

    • 您的 Elastic Cloud Enterprise 环境中的所有集群都由同一证书颁发机构签名。 因此,添加此 CA 将使自管理集群信任您的 ECE 环境中的所有集群。 应使用 elasticsearch.yml 中的 xpack.security.transport.ssl.trust_restrictions.path 设置对此进行限制,该设置指向一个文件,该文件根据其 otherName 属性限制要信任的证书。
    • 例如,以下文件将信任
    trust.subject_name:
    - *.node.aaaabbbbaaaabbbb.cluster.1053523734.account
    - *.node.xxxxyyyyxxxxyyyy.cluster.1053523734.account
    - *.node.*.cluster.83988631.account
    - node*.example.com
    
    1. 在 ECE 环境中,具有集群 ID aaaabbbbaaaabbbbxxxxyyyyxxxxyyyy 的两个特定集群,环境 ID 为 1053523734
    2. 来自环境 ID 为 83988631 的 ECE 环境的任何集群
    3. 来自其自身集群的节点(其证书遵循不同的约定:CN = node1.example.comCN = node2.example.comCN = node3.example.com
提示

使用 certutil 的文件输入模式为整个集群生成新的节点证书。

现在,您可以远程连接到受信任的集群。

在本地集群上,使用 Kibana 或 Elasticsearch API 添加远程集群。

  1. 打开 Kibana 主菜单,然后选择 Stack Management > Data > Remote Clusters > Add a remote cluster

  2. 启用 Manually enter proxy address and server name

  3. 填写以下字段

    • Name: 此集群别名是一个唯一的标识符,表示与远程集群的连接,用于区分本地索引和远程索引。

    • Proxy address: 此值可在您要用作远程的 Elastic Cloud Enterprise 部署的 Security 页面上找到。

      提示

      如果您使用 API 密钥作为安全模型,请将端口更改为 9443

    • Server name: 此值可在您要用作远程的 Elastic Cloud Enterprise 部署的 Security 页面上找到。

      Remote Cluster Parameters in Deployment
      注意

      如果您在建立连接时遇到问题,并且远程集群是具有专用证书的 Elastic Cloud Enterprise 环境的一部分,请确保代理地址和服务器名称与证书信息匹配。 有关更多信息,请参阅 在 Elastic Cloud Enterprise 中管理端点

  4. 单击 Next

  5. 单击 Add remote cluster(您已在上一步中建立了信任)。

注意

远程集群的此配置使用 代理模式,并且它要求分配器可以通过 http 与代理通信。

要将部署配置为远程集群,请使用 集群更新设置 API。 配置以下字段

  • mode: proxy

  • proxy_address: 此值可在您要用作远程的 Elastic Cloud Enterprise 部署的 Security 页面上找到。 此外,使用 API,可以使用分号连接字段 metadata.endpoint 和端口 9300,从 Elasticsearch 资源信息中获取此值。

    提示

    如果您使用 API 密钥作为安全模型,请将端口更改为 9443

  • server_name: 此值可在您要用作远程的 Elastic Cloud Enterprise 部署的 Security 页面上找到。 此外,使用 API,可以从 Elasticsearch 资源信息字段 metadata.endpoint 获取此值。

这是调用 _cluster/settings 的 API 示例

PUT /_cluster/settings
{
  "persistent": {
    "cluster": {
      "remote": {
        "alias-for-my-remote-cluster": {
          "mode":"proxy",
          "proxy_address": "a542184a7a7d45b88b83f95392f450ab.192.168.44.10.ip.es.io:9300",
          "server_name": "a542184a7a7d45b88b83f95392f450ab.192.168.44.10.ip.es.io"
        }
      }
    }
  }
}
注意

仅当您使用 TLS 证书作为跨集群安全模型并且两个集群都属于同一 ECE 环境时,本节才适用。对于其他情况,应使用 Elasticsearch API 代替。

curl -k -H 'Content-Type: application/json' -X PUT -H "Authorization: ApiKey $ECE_API_KEY" https://COORDINATOR_HOST:12443/api/v1/deployments/$DEPLOYMENT_ID/elasticsearch/$REF_ID/remote-clusters -d '
{
  "resources" : [
    {
      "deployment_id": "$DEPLOYMENT_ID_REMOTE",
      "elasticsearch_ref_id": "$REF_ID_REMOTE",
      "alias": "alias-your-remote",
      "skip_unavailable" : true
    }
  ]
}'
DEPLOYMENT_ID_REMOTE
您的远程部署的 ID,如 Cloud UI 中所示或通过 API 获取。
REF_ID_REMOTE
远程部署中 Elasticsearch 资源的唯一 ID(您可以通过 API 获取这些值)。

使用 Elastic Cloud Enterprise RESTful API 时,请注意以下事项

  1. 集群别名必须仅包含字母、数字、短划线 (-) 或下划线 (_)。
  2. 要了解有关跳过断开连接的集群的信息,请参阅 Elasticsearch 文档
  3. 当已为部署配置了远程集群时,PUT 请求会将现有配置替换为传递的新配置。 传递一个空资源数组将删除所有远程集群。

以下 API 请求检索远程集群配置

curl -k -X GET -H "Authorization: ApiKey $ECE_API_KEY" https://COORDINATOR_HOST:12443/api/v1/deployments/$DEPLOYMENT_ID/elasticsearch/$REF_ID/remote-clusters
注意

响应仅包括来自同一 ECE 环境的远程集群。 为了获得完整的远程集群列表,请直接使用 Kibana 或 Elasticsearch API

要将远程集群用于跨集群复制或跨集群搜索,您需要在本地集群上创建具有 远程索引权限的用户角色。 请参阅 配置角色和用户

© . All rights reserved.