Amazon Elasticsearch Service
开发人员指南 (API 版本 2015-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon 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 中的域有一层额外的安全性。

为了支持 VPC,Amazon ES 将一个终端节点放入您的 VPC 的一个或两个子网中。子网 是您的 VPC 内的 IP 地址范围。如果您为域启用了区域感知,则 Amazon ES 会将终端节点放到两个子网中。两个子网必须位于同一区域的不同可用区中。如果您没有启用区域感知,则 Amazon ES 只将终端节点放在一个子网中。

下图显示了未启用区域感知时的 VPC 架构。

下图显示了启用区域感知时的 VPC 架构。

Amazon ES 还会在每个数据节点的 VPC 中放置一个弹性网络接口 (ENI)。Amazon ES 将为每个 ENI 分配一个来自您的子网的 IPv4 地址范围的私有 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 地址。

限制

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

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

  • 如果在 VPC 中启动了新域,以后就不能将其切换为使用公共终端节点。反过来也是如此:如果使用公共终端节点创建了域,则以后就不能将该域放入 VPC 中,而是必须创建一个新的域,然后迁移数据。

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

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

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

  • 目前,对于驻留在 VPC 中的域,Amazon ES 不支持与 Amazon Kinesis Data Firehose 的集成。要将此服务与 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、托管网络或代理服务器。有关此连接可以采用的各种格式的详细信息,请参阅 Amazon VPC 用户指南 中的场景和示例。有关专注于开发的示例,请参阅 测试 VPC 域

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

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

如果还需增加一层安全性,我们建议使用指定 IAM 用户或角色的访问策略。应用这些策略意味着要让域接受某个请求,安全组必须允许该请求并且必须使用有效凭证的签署该请求。

注意

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

测试 VPC 域

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

  1. 对于域的访问策略,请选择 Do not require signing request with IAM credential (请勿要求使用 IAM 凭证对请求签名)。完成测试之后,您可以随时更新此设置。

  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 隧道,用于通过 EC2 实例将针对 https://localhost:9200 的请求转发到您的 Amazon ES 域。默认情况下,Elasticsearch 侦听端口 9200 上的流量。指定此端口将模拟本地 Elasticsearch 安装,但使用您想使用的任意端口。

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

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

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

    提示

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

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

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

  • 创建 VPC

    要创建 VPC,可以使用 Amazon VPC 控制台、AWS CLI 或 AWS 开发工具包之一。您必须在 VPC 中创建一个子网(如果启用了区域感知,则必须创建两个子网)。有关更多信息,请参阅创建 VPC。如果您已有 VPC,请跳过此步骤。

  • 预留 IP 地址

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

正在创建 VPC

要创建 VPC,可以使用 Amazon VPC 控制台、AWS CLI 或 AWS 开发工具包之一。VPC 必须具有一个子网(如果您启用了区域感知,则必须具有两个子网)。两个子网必须位于同一区域的不同可用区中。

下面的过程演示了如何使用 Amazon VPC 控制台创建具有一个公有子网的 VPC、为子网保留 IP 地址以及创建安全组来控制对您的 Amazon ES 域的访问。有关其他 VPC 配置,请参阅 Amazon VPC 用户指南 中的场景和示例

创建 VPC (控制台)

  1. 登录 AWS 管理控制台,并通过以下网址打开 Amazon VPC 控制台:https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 VPC Dashboard

  3. 选择 Start VPC Wizard

  4. Select a VPC Configuration 页面上,选择 VPC with a Single Public Subnet

  5. VPC with a Single Public Subnet 页面上,保留默认选项,然后选择 Create VPC

  6. 在出现的确认信息中,选择 Close

  7. 如果您打算为 Amazon ES 域启用区域感知,则必须在同一区域的不同可用区创建第二个子网。如果不打算启用区域感知,请跳到步骤 8。

    1. 在导航窗格中,选择 Subnets

    2. 选择 Create Subnet

    3. Create Subnet 对话框中,可以选择创建名称标签,以便以后帮助您识别子网。

    4. 对于 VPC,选择您刚才创建的 VPC。

    5. 对于 Availability Zone,选择与第一个子网不同的可用区。两个子网的可用区必须位于同一区域中。

    6. 对于 IPv4 CIDR 块,配置一个足够大的 CIDR 块,以便提供足够多的 IP 地址供 Amazon ES 在维护活动期间使用。有关更多信息,请参阅在 VPC 子网中预留 IP 地址

      注意

      使用 VPC 访问的 Amazon ES 域不支持 IPv6 地址。您可以使用启用了 IPv6 的 VPC,但 ENI 将使用 IPv4 地址。

    7. 选择 Yes, Create

  8. 在导航窗格中,选择 Subnets

  9. 在子网列表中,查找您的一个子网(或多个子网(如果您在步骤 7 中创建了另一个子网))。在可用 IPv4 列中,确认您拥有足够数量的 IPv4 地址。

  10. 记下子网 ID 和可用区。稍后,您在启动 Amazon ES 域并向 VPC 添加 Amazon EC2 实例时需要此信息。

  11. 创建一个 Amazon VPC 安全组。您将使用此安全组来控制对您的 Amazon ES 域的访问。

    1. 在导航窗格中,选择 Security Groups

    2. 选择 Create Security Group

    3. Create Security Group 对话框中,键入名称标签、组名称和说明。对于 VPC,选择您的 VPC 的 ID。

    4. 选择 Yes, Create

  12. 为您的安全组定义一个网络入口规则。此规则允许您连接到您的 Amazon ES 域。

    1. 在导航窗格中,选择安全组,然后选择刚创建的安全组。

    2. 在页面底部,选择 Inbound Rules 选项卡。

    3. 选择编辑,然后选择 HTTPS (443)

    4. 选择 Save

现在您已准备就绪,可以在 Amazon VPC 中启动 Amazon ES 域了。

在 VPC 子网中预留 IP 地址

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

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

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

  • 是否启用了区域感知。如果启用了区域感知,则需要的每个子网的 IP 地址数只是未启用区域感知时的一半。

以下是基本公式:每个子网中预留的 IP 地址数是节点数的三倍,如果启用了区域感知,则除以 2。

示例

  • 如果某个域有 10 个数据节点并启用了区域感知,则 IP 数为 10/2* 3 = 15。

  • 如果某个域有 10 个数据节点并禁用了区域感知,则 IP 数为 10 * 3 = 30。

在创建域时,Amazon ES 会预留 IP 地址。您可以在 https://console.amazonaws.cn/ec2/ 上的 Amazon EC2 控制台的网络接口部分看到网络接口及其相关的 IP 地址。描述列显示了与网络接口关联的 Amazon ES 域。

提示

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

VPC 访问的服务相关角色

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

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

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

注意

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

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

从公有访问迁移到 VPC 访问

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

Amazon VPC 文档

Amazon VPC 有自己的一套文档,用于介绍如何创建和使用您的 Amazon VPC。下表提供指向 Amazon VPC 指南的链接。

说明 文档
如何开始使用 Amazon VPC Amazon VPC 入门指南
如何通过 AWS 管理控制台使用 Amazon VPC Amazon VPC 用户指南
所有 Amazon VPC 命令的完整说明 Amazon EC2 命令行参考 (Amazon VPC 命令是 Amazon EC2 参考的一部分。)
Amazon VPC API 操作、数据类型和错误的完整说明 Amazon EC2 API Reference (Amazon VPC API 操作是 Amazon EC2 参考的一部分。)
关于在您终止可选的 IPsec VPN 连接时对网关进行配置的网络管理员之信息 Amazon VPC 网络管理员指南

有关 Amazon Virtual Private Cloud 的更多详细信息,请参阅Amazon Virtual Private Cloud