

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

# 在 VPC 内启动您的亚马逊 OpenSearch 服务域
<a name="vpc"></a>

您可以将诸如亚马逊 OpenSearch 服务域之类的 Amazon 资源启动到*虚拟私有云* (VPC) 中。VPC 是专为您服务的虚拟网络 Amazon Web Services 账户。它在逻辑上与 Amazon 云中的其他虚拟网络隔离。在 VPC 中放置 OpenSearch 服务域可实现 OpenSearch 服务与 VPC 内的其他服务之间的安全通信，无需互联网网关、NAT 设备或 VPN 连接。所有流量都安全地保存在 Amazon 云中。

**注意**  
如果您将 OpenSearch 服务域置于 VPC 内，则您的计算机必须能够连接到 VPC。此连接通常采用以下格式：VPN、过渡网关、托管网络或代理服务器。您无法从 VPC 外部访问您的域。

## VPC 与公有域对比
<a name="vpc-comparison"></a>

以下是 VPC 域与公有域不同的一些方式。每个差异都有更加详细的介绍。
+ 由于进行了逻辑隔离，与使用公共端点的域相比，驻留在 VPC 中的域有一层额外的安全性。
+ 虽然可以从任何连接互联网的设备访问公有域，但 VPC 域需要某种形式的 VPN 或代理服务器。
+ 与公共域相比，VPC 域在 控制台中显示的信息较少。具体而言，**集群运行状况**选项卡中不包含分片信息；不存在**索引**选项卡。
+ 域端点采用不同的形式（`https://search-domain-name` 与 `https://vpc-domain-name`)。
+ 您无法将基于IP的访问策略应用于驻留在 VPC 中的域，因为安全组已强制实施基于 IP 的访问策略。

## 限制
<a name="vpc-limitations"></a>

在 VPC 内运营 OpenSearch 服务域有以下限制：
+ 如果在 VPC 中启动了新域，以后就不能将其切换为使用公共终端节点。反过来也是如此：如果使用公共终端节点创建了域，则以后就不能将该域放入 VPC 中，您必须创建一个新的域，然后迁移数据。
+ 可以在 VPC 中启动域，也可以使用公共终端节点，但两者不能同时进行。在创建域时只能选择其一。
+ 您无法在使用专用租赁的 VPC 内启动您的域。您必须使用具有设置为 **Default** 的租赁的 VPC。
+ 将域放入 VPC 中之后，不能再将其移到其他 VPC 中，但可以更改子网和安全组设置。
+ 要访问位于 VPC 内的域的默认 OpenSearch 仪表板安装，用户必须有权访问该 VPC。此过程因网络配置而异，但可能涉及连接到 VPN 或托管网络或使用代理服务器或过渡网关。要了解更多信息，请参阅 [关于 VPC 域的访问策略](#vpc-security)，[Amazon VPC 用户指南](https://docs.amazonaws.cn/vpc/latest/userguide/)和 [控制对控制面板的访问](dashboards.md#dashboards-access)。

## 架构
<a name="vpc-architecture"></a>

为了提供支持 VPCs， OpenSearch 服务将终端节点放置在您的 VPC 的一个、两个或三个子网中。如果您为域启用[多个可用区](managedomains-multiaz.md)，则每个子网必须位于同一区域中的不同可用区中。如果您只使用一个可用区，S OpenSearch ervice 会将一个终端节点放入一个子网中。

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

![\[VPC architecture showing subnet with security group connecting to OpenSearch Service data nodes.\]](http://docs.amazonaws.cn/opensearch-service/latest/developerguide/images/VPCNoZoneAwareness.png)


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

![\[VPC architecture with two 可用区, showing security groups, data nodes, and master nodes.\]](http://docs.amazonaws.cn/opensearch-service/latest/developerguide/images/VPCZoneAwareness.png)


OpenSearch 服务还会在 VPC 中为您的每个数据节点放置一个*弹性网络接口* (ENI)。 OpenSearch 服务会根据您的子网地址范围为每个 ENI 分配一个私有 IP IPv4 地址。该服务还会分配这些 IP 地址的公有 DNS 主机名 (域终端节点)。您必须使用公共 DNS 服务将终端节点 (DNS 主机名) 解析为数据节点的相应 IP 地址：
+ 如果您的 VPC 通过将`enableDnsSupport`选项设置为`true`（默认值）来使用亚马逊提供的 DNS 服务器，则 OpenSearch 服务终端节点的解析将成功。
+ 如果您的 VPC 使用私有 DNS 服务器，并且该服务器可以访问公共权威 DNS 服务器来解析 DNS 主机名，则 OpenSearch 服务终端节点的解析也将成功。

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

### 从公有访问迁移到 VPC 访问
<a name="migrating-public-to-vpc"></a>

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

### 关于 VPC 域的访问策略
<a name="vpc-security"></a>

将您的 OpenSearch 服务域置于 VPC 内可提供固有的强大安全层。使用公有访问权限创建域时，终端节点将采用以下形式：

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

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

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

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

但是，如果您尝试访问 Web 浏览器中的终端节点，您可能会发现请求超时。要执行更基本的 `GET` 请求，您的计算机必须能够连接到 VPC。此连接通常采用以下格式：VPN、过渡网关、托管网络或代理服务器。有关此连接可以采用的各种格式的详细信息，请参阅 *Amazon VPC 用户手册*中的 [VPC](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_Scenarios.html) 示例。有关专注于开发的示例，请参阅 [测试 VPC 域](#vpc-test)。

除了此连接要求外，还 VPCs 允许您通过[安全组](https://docs.amazonaws.cn/vpc/latest/userguide/VPC_SecurityGroups.html)管理对域的访问。对于许多使用案例，这种安全功能的组合方式已足够，并且您可能愿意将开放访问策略应用于域。

使用开放访问政策*并不*意味着互联网上的任何人都可以访问 OpenSearch 服务域。相反，这意味着如果请求到达 OpenSearch 服务域并且相关的安全组允许，则该域将接受该请求。唯一例外的情况是如果您使用细粒度访问控制或指定 IAM 角色的访问策略。在这些情况下，意味着要让域接受某个请求，安全组必须允许该请求*并且*必须使用有效凭证的签署该请求。

**注意**  
由于安全组已经强制执行基于 IP 的访问策略，因此您无法将基于 IP 的访问策略应用于 VPC 内的 OpenSearch 服务域。如果使用公有访问权限，则基于 IP 的策略仍可用。

### 开始之前：VPC 访问的先决条件
<a name="prerequisites-vpc-endpoints"></a>

在启用 VPC 与新 OpenSearch 服务域之间的连接之前，必须执行以下操作：
+ **创建 VPC**

  要创建您的 VPC，您可以使用 Amazon VPC 控制台、 Amazon CLI 或其中一个 Amazon SDKs。有关更多信息，请参阅 *Amazon VPC 用户指南 VPCs*中的[使用](https://docs.amazonaws.cn/vpc/latest/userguide/working-with-vpcs.html)。如果您已有 VPC，请跳过此步骤。
+ **预留 IP 地址**

  OpenSearch 服务通过将网络接口放置在 VPC 的子网中来实现 VPC 与域的连接。每个网络接口都与一个 IP 地址关联。必须在子网中为网络接口预留足够数量的 IP 地址。有关更多信息，请参阅[在 VPC 子网中预留 IP 地址](#reserving-ip-vpc-endpoints)。

### 测试 VPC 域
<a name="vpc-test"></a>

VPC 增强的安全性可能会使连接到您的域并运行基本测试成为挑战。如果您已经拥有 OpenSearch 服务 VPC 域并且不想创建 VPN 服务器，请尝试以下过程：

1. 对于域的访问策略，请选择 **Only use fine-grained access control（仅使用精细访问控制）**。完成测试之后，您可以随时更新此设置。

1. 在与您的 OpenSearch 服务域相同的 VPC、子网和安全组中创建 Amazon Linux Amazon EC2 实例。

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

   要了解有关创建实例的更多信息，请参阅 [Amazon EC2 Linux 实例入门](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/EC2_GetStarted.html)。

1. 将 [Internet 网关](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html)添加到 VPC。

1. 在 VPC 的[路由表](https://docs.amazonaws.cn/AmazonVPC/latest/UserGuide/VPC_Route_Tables.html)中，添加新的路由。对于 **Destination (目的地)**，指定一个 [CIDR 块](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#IPv4_CIDR_blocks)，其中包含您的计算机的公有 IP 地址。对于 **Target (目标)**，请指定您刚刚创建的 Internet 网关。

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

1. 对于安全组，指定两条入站规则：    
[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/opensearch-service/latest/developerguide/vpc.html)

   第一条规则可让您的 SSH 连接到您的 EC2 实例。第二个允许 EC2 实例通过 HTTPS 与 OpenSearch 服务域通信。

1. 从终端运行以下命令：

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

   此命令创建一个 SSH 隧道，该隧道通过 EC2 实例将发送到 [https://localhost:9200](https://localhost:9200) 的请求转发到您的 OpenSearch 服务域。在命令中指定端口 9200 会模拟本地 OpenSearch 安装，但要使用任何你想要的端口。 OpenSearch 服务仅接受通过端口 80 (HTTP) 或 443 (HTTPS) 进行的连接。

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

1. 在你的网络浏览器中导航到 [https://localhost:9200/\$1dashboards/](https://localhost:9200/_plugin/kibana/)。您可能需要确认安全异常。

   或者，您可以使用 [https://localhost:9200](https://localhost:9200)curl[、](https://curl.haxx.se/)Postman[ 或您常用的编程语言将请求发送到 ](https://www.getpostman.com/)。
**提示**  
如果您由于证书不匹配而遇到 curl 错误，请尝试使用 `--insecure` 标记。

### 在 VPC 子网中预留 IP 地址
<a name="reserving-ip-vpc-endpoints"></a>

OpenSearch 服务通过将网络接口放置在 VPC（如果您启用多个[可用区](managedomains-multiaz.md)，则为 VPC 的多个子网）中放置网络接口，从而将域连接到 VPC。每个网络接口都与一个 IP 地址关联。在创建 OpenSearch 服务域之前，每个子网中必须有足够数量的 IP 地址来容纳网络接口。

以下是基本公式：S OpenSearch ervice 在每个子网中预留的 IP 地址数量等于数据节点数量的三倍除以可用区数量。

**示例**
+ 如果某个域在 3 个可用区中有 9 个数据节点，则每个子网的 IP 数为 9 \$1 3 / 3 = 9。
+ 如果某个域在 2 个可用区中有 8 个数据节点，则每个子网的 IP 数为 8 \$1 3 / 2 = 12。
+ 如果某个域在一个可用区中有 6 个数据节点，则每个子网的 IP 数为 6 \$1 3 / 1 = 18。

创建域时，S OpenSearch ervice 会保留 IP 地址，将一些 IP 地址用于域，其余的保留用于[蓝/绿](managedomains-configuration-changes.md)部署。您可以在 Amazon EC2 控制台的 **Network Interfaces** 部分看到网络接口及其相关的 IP 地址。**描述**列显示网络接口与哪个 OpenSearch 服务域相关联。

**提示**  
我们建议您为 OpenSearch 服务预留 IP 地址创建专用子网。通过使用专用子网，可以避免与其他应用程序和服务重叠，并确保在将来需要扩展集群时可以预留额外 IP 地址。要了解更多信息，请参阅[在 VPC 中创建子网](https://docs.amazonaws.cn/vpc/latest/userguide/working-with-vpcs.html#AddaSubnet)。

您也可以考虑配置专用的协调器节点，以减少您的 VPC 域所需的私有 IP 地址预留数量。 OpenSearch将弹性网络接口 (ENI) 附加到您的专用协调器节点，而不是您的数据节点。专用协调器节点数通常为总数据节点数的 10% 左右。这样就可以减少为 VPC 域保留的私有 IP 地址数量。

### VPC 访问的服务相关角色
<a name="enabling-slr"></a>

[服务相关角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-linked-role)是一种独特的 IAM 角色类型，它将权限委派给服务，使之能够代表您创建和管理资源。 OpenSearch 服务需要服务相关角色才能访问您的 VPC、创建域终端节点以及将网络接口放置在您的 VPC 的子网中。

OpenSearch 当您使用服务控制台在 VPC 内创建域时， OpenSearch 服务会自动创建角色。为使这种自动创建成功，您必须具有 `iam:CreateServiceLinkedRole` 操作的权限。有关更多信息，请参阅 *IAM 用户指南*中的[服务相关角色权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions)。

 OpenSearch 服务创建角色后，您可以使用 IAM 控制台查看该角色 (`AWSServiceRoleForAmazonOpenSearchService`)。

有关此角色的权限以及如何删除它的完整信息，请参阅[在 Amazon OpenSearch 服务中使用服务相关角色](slr.md)。