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

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

使用 VPC 启动您的 Amazon Elasticsearch Service 域

您可以启动Amazon资源(例如 Amazon Elasticsearch Service (Amazon ES) 域)转换到Virtual Private Cloud(VPC)。VPC 是专供您使用的虚拟网络 Amazon Web Services 账户 。它在逻辑上与 Amazon 云中的其他虚拟网络隔绝。

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

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

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

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

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

  • 如果您的 VPC 使用 Amazon 提供的 DNS 服务器通过将enableDnsSupport选项true(默认值),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 User Guide, 和控制对 Kibana 的访问

关于 VPC 域的访问策略

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

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、传输网关、托管网络或代理服务器。有关它可以采用的各种格式的详细信息,请参阅场景和示例中的Amazon VPC User Guide。有关专注于开发的示例,请参阅 测试 VPC 域

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

使用开放访问策略进行操作意味着 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. 对于安全组,指定两条入站规则:

    类型 协议 端口范围
    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 隧道,用于将请求转发到https://localhost:9200通过 EC2 实例到您的 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 控制台、AmazonCLI 或其中一个Amazon开发工具包。有关更多信息,请参阅 。使用 VPC中的Amazon VPC User Guide。如果您已有 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 地址数是数据节点数加上主节点数的三倍。

示例

  • 如果某个域有 10 个数据节点和三个主节点,则 IP 数为 (10 * 3) +3 = 33。

  • 如果某个域有五个数据节点和三个主节点,则 IP 数为 (5 * 3) +3 = 18。

当您创建域时,Amazon ES 会保留 IP 地址,将一些 IP 地址用于域,并将其余 IP 地址保留给蓝/绿部署。您可以看到网络接口及其关联的 IP 地址网络接口部 Amazon EC2。这些区域有:说明列显示了与网络接口关联的 Amazon ES 域。

提示

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

用于 VPC 访问的服务相关角色

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

当您使用 Amazon ES 控制台在 VPC 中创建域时,Amazon ES 会自动创建该角色。为使这种自动创建获得成功,您必须具有 es:CreateElasticsearchServiceRoleiam:CreateServiceLinkedRole 操作的权限。要了解更多信息,请参阅服务相关角色权限中的IAM 用户指南

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

注意

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

有关此角色的权限以及如何删除它的完整信息,请参阅使用服务相关角色为提供 Amazon Elasticsearch Services 对资源的访问权限

从公开访问迁移到 VPC 访问

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