Amazon Elasticsearch Service 域的 VPC 支持 - Amazon Elasticsearch Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Amazon Elasticsearch Service 域的 VPC 支持

virtual private cloud (VPC) 是专用于您的 AWS 账户的虚拟网络。它在逻辑上与 AWS 云中的其他虚拟网络隔绝。您可以在 VPC 中启动 AWS 资源(如 Amazon ES 域)。

通过在 VPC 中放置 Amazon ES 域,您可以在 Amazon ES 和 VPC 中的其他服务之间进行安全通信,而无需 Internet 网关、NAT 设备或 VPN 连接。AWS 云中的所有流量都会保持安全。由于进行了逻辑隔离,与使用公共终端节点的域相比,驻留在 VPC 中的域有一层额外的安全性。

为了支持 VPCs,Amazon ES 会将一个终端节点放入您的 VPC 的一个、两个或三个子网中。如果您为域启用多个可用区,则每个子网必须位于同一区域中的不同可用区中。如果您只使用一个可用区,则 Amazon ES 将终端节点只放在一个子网中。

下图显示了一个可用区的 VPC 架构。

下图显示了两个可用区的 VPC 架构。

Amazon ES 还会为每个数据节点在 VPC 中放置一个弹性网络接口 (ENI)。Amazon ES 会从子网的 IPv4 地址范围内为每个 ENI 分配一个私有 IP 地址。该服务还会分配这些 IP 地址的公有 DNS 主机名 (域终端节点)。您必须使用公共 DNS 服务将终端节点 (DNS 主机名) 解析为数据节点的相应 IP 地址:

  • 如果您的 VPC 通过将 enableDnsSupport 选项设置为 true(默认值)来使用 Amazon 提供的 DNS 服务器,则 Amazon ES 终端节点的解析将会成功。

  • 如果您的 VPC 使用私有 DNS 服务器,并且该服务器可以访问公共权威 DNS 服务器来解析 DNS 主机名,则 Amazon ES 终端节点的解析也会成功。

因为 IP 地址可能会发生更改,所以您应定期解析域终端节点,以便可以始终访问正确的数据节点。我们建议您将 DNS 解析时间间隔设置为一分钟。如果您在使用客户端,还应确保客户端中的 DNS 缓存已清除。

注意

Amazon ES 不支持带有 VPC 的 IPv6 地址。您可以使用已启用 IPv6 的 VPC,但域将使用 IPv4 地址。

Limitations

目前,在 VPC 中运行 Amazon ES 域存在以下限制:

  • 可以在 VPC 中启动域,也可以使用公共终端节点,但两者不能同时进行。在创建域时只能选择其一。

  • 如果在 VPC 中启动了新域,以后就不能将其切换为使用公共终端节点。反之亦然:如果您使用公有终端节点创建域,则以后无法将其放入 VPC 中。您必须创建一个新的域,然后迁移数据。

  • 您无法在使用专用租赁的 VPC 内启动您的域。您必须使用具有设置为 Default 的租赁的 VPC。

  • 将域放入一个 VPC 中后,不能再将其移到其他 VPC 中。不过,可以更改子网和安全组设置。

  • 与公共域相比,VPC 域在 Amazon ES 控制台中显示的信息较少。具体而言,集群运行状况选项卡中不包含分片信息;不存在索引选项卡。

  • 要访问驻留在某个 VPC 中的域的默认 Kibana 安装,用户必须具有访问该 VPC 的权限。此过程因网络配置而异,但可能涉及连接到 VPN 或托管网络或使用代理服务器或中转网关。要了解更多信息,请参阅关于 VPC 域的访问策略Amazon VPC 用户指南控制对 Kibana 的访问

关于 VPC 域的访问策略

在 VPC 中放置 Amazon ES 域将提供一个固有的强大安全层。使用公有访问权限创建域时,终端节点将采用以下形式:

https://search-domain-name-identifier.region.es.amazonaws.com

如“公有”标签所示,此终端节点可从任何连接 Internet 的设备访问,但您可以 (且应该) 控制对它的访问。如果您访问 Web 浏览器中的终端节点,您可能会收到一条 Not Authorized 消息,但请求将达到域。

当您使用 VPC 访问权限创建域时,终端节点看起来 类似于公有终端节点:

https://vpc-domain-name-identifier.region.es.amazonaws.com

但是,如果您尝试访问 Web 浏览器中的终端节点,您可能会发现请求超时。要执行更基本的 GET 请求,您的计算机必须能够连接到 VPC。此连接通常采用以下格式:VPN、中转网关、托管网络或代理服务器。有关此连接可以采用的各种格式的详细信息,请参阅 https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_Scenarios.html 中的Amazon VPC 用户指南场景和示例。有关专注于开发的示例,请参阅 测试 VPC 域

除了此连接要求之外,VPCs 还允许您通过安全组管理对域的访问。对于许多使用案例,这种安全功能的组合方式已足够,并且您可能愿意将开放访问策略应用于域。

使用开放访问策略运行并 意味着 Internet 上的任何人都可以访问 Amazon ES 域。相反,它意味着,如果请求到达 Amazon ES 域且关联的安全组允许它,则该域将接受请求而无需进一步安全检查。

要提供额外的安全层,我们建议您使用精细访问控制或指定 IAM 用户或角色的访问策略。在这些情况下,要让域接受某个请求,安全组必须允许该请求并且必须使用有效凭证签署该请求。

注意

因为安全组已强制执行基于 IP 的访问策略,所以您无法将基于 IP 的访问策略应用到驻留在 VPC 中的 Amazon ES 域。如果使用公有访问权限,则基于 IP 的策略仍可用。

测试 VPC 域

VPC 增强的安全性可能会使连接到您的域并运行基本测试成为一个真正的挑战。如果您已有一个 Amazon ES VPC 域但不愿意创建 VPN 服务器,请尝试以下过程:

  1. 对于您的域的访问策略, 请选择 Allow open access to the domain (允许对域进行公开访问)。完成测试之后,您可以随时更新此设置。

  2. 在与您的 Amazon ES 域相同的 VPC、子网和安全组中创建一个 Amazon Linux Amazon EC2 实例。

    由于此实例用于测试目的,需要做的工作非常少,因此请选择一种便宜的实例类型,如 t2.micro。 为实例分配一个公有 IP 地址,并创建新的密钥对或选择现有密钥对。如果您创建新的密钥,请将其下载到您的 ~/.ssh 目录。

    要了解有关创建实例的更多信息,请参阅 Amazon EC2 Linux 实例入门

  3. Internet 网关添加到 VPC。

  4. 在 VPC 的路由表中,添加新的路由。对于 Destination (目的地),指定一个 CIDR 块,其中包含您的计算机的公有 IP 地址。对于 Target (目标),请指定您刚刚创建的 Internet 网关。

    例如,您可能只为您的计算机指定 123.123.123.123/32,或者为一系列计算机指定 123.123.123.0/24

  5. 对于安全组,指定两条入站规则:

    Type 协议 端口范围
    SSH (22) TCP (6) 22 your-cidr-block
    HTTPS (443) TCP (6) 443 your-security-group-id

    第一条规则可让您的 SSH 连接到您的 EC2 实例。第二条规则允许 EC2 实例通过 HTTPS 与 Amazon ES 域进行通信。

  6. 从终端运行以下命令:

    ssh -i ~/.ssh/your-key.pem ec2-user@your-ec2-instance-public-ip -N -L 9200:vpc-your-amazon-es-domain.region.es.amazonaws.com:443

    此命令将创建一个 SSH 隧道,用于通过 EC2 实例将针对 https://localhost:9200 的请求转发到您的 Amazon ES 域。默认情况下,Elasticsearch 侦听端口 9200 上的流量。指定此端口将模拟本地 Elasticsearch 安装,但使用您想使用的任意端口。

    该命令不提供反馈并无限期运行。要停止此命令,请按 Ctrl + C

  7. 在 Web 浏览器中导航到 https://localhost:9200/_plugin/kibana/。您可能需要确认安全异常。

    或者,您可以使用 https://localhost:9200curlPostman 或您常用的编程语言将请求发送到

    提示

    如果您由于证书不匹配而遇到 curl 错误,请尝试使用 --insecure 标记。

在您开始之前:VPC 访问的先决条件

在启用 VPC 和新的 Amazon ES 域之间的连接之前,您必须执行以下操作:

  • 创建 VPC

    要创建 VPC,您可以使用 Amazon VPC 控制台、AWS CLI 或 AWS SDKs 之一。 有关更多信息,请参阅 VPCs 中的使用 。Amazon VPC 用户指南如果您已有 VPC,请跳过此步骤。

  • 预留 IP 地址

    Amazon ES 通过将网络接口放置在 VPC 的子网中来启用 VPC 到域的连接。每个网络接口都与一个 IP 地址关联。必须在子网中为网络接口预留足够数量的 IP 地址。有关更多信息,请参阅在 VPC 子网中预留 IP 地址

在 VPC 子网中预留 IP 地址

Amazon ES 通过将网络接口放在 VPC 的一个子网(如果您启用多个可用区,则是 VPC 的多个子网)中来将域连接到该 VPC。每个网络接口都与一个 IP 地址关联。在创建 Amazon ES 域之前,VPC 子网中必须有足够数量的 IP 地址来容纳网络接口。

Amazon ES 需要的 IP 地址数量取决于以下因素:

  • 域中的数据节点数。(主节点不包括在该数量内。)

  • 可用区数量。如果您启用两个或三个可用区,则只需要一个可用区所需的每子网的 IP 地址数量的一半或三分之一。

以下是基本公式:每个子网中预留的 IP 地址数是节点数的三倍,除以可用区数量。

示例

  • 如果某个域有 10 个数据节点和两个可用区,则 IP 数为 10/2* 3 = 15。

  • 如果某个域有 10 个数据节点和一个可用区,则 IP 数为 10 * 3 = 30。

创建域时,Amazon ES 保留 IP 地址,将一些 IP 地址用于域,并保留其余 IP 地址用于蓝/绿部署。您可以在 控制台的 Network Interfaces (网络接口)Amazon EC2 部分查看网络接口及其关联的 IP 地址。描述列显示了与网络接口关联的 Amazon ES 域。

提示

我们建议您为 Amazon ES 预留 IP 地址创建专用子网。通过使用专用子网,可以避免与其他应用程序和服务重叠,并确保在将来需要扩展集群时可以预留额外 IP 地址。要了解更多信息,请参阅在 VPC 中创建子网

VPC 访问的服务相关角色

服务相关角色是一种独特的 IAM 角色类型,它将权限委派给服务,使之能够代表您创建和管理资源。Amazon ES 需要服务相关角色来访问您的 VPC、创建域终端节点和将网络接口放到您的 VPC 的子网中。

当您使用 Amazon ES 控制台在 VPC 中创建域时,Amazon ES 会自动创建该角色。为使这种自动创建获得成功,您必须具有 es:CreateElasticsearchServiceRoleiam:CreateServiceLinkedRole 操作的权限。有关更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions 中的IAM 用户指南服务相关角色权限

在 Amazon ES 创建该角色后,您可以使用 IAM 控制台查看它 (AWSServiceRoleForAmazonElasticsearchService)。

注意

如果创建使用公共终端节点的域,则 Amazon ES 既不需要服务相关角色,也不会创建它。

有关此角色的权限以及如何删除它的完整信息,请参阅对 Amazon ES 使用服务相关角色

从公有访问迁移到 VPC 访问

在创建域时,您会指定它是应该具有公共终端节点还是驻留在 VPC 中。一旦创建,就无法再切换,而只能创建一个新域,手动重建索引或迁移您的数据。快照提供了一种迁移数据的便捷方法。有关拍摄和还原快照的信息,请参阅使用 Amazon Elasticsearch Service 索引快照