

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

# 开始使用 AWS PrivateLink
<a name="getting-started"></a>

本教程演示如何使用 AWS PrivateLink 将请求从私有子网中的 EC2 实例发送到 Amazon CloudWatch。

下图提供了此场景的概述。要从您的计算机连接到私有子网中的实例，您需要首先连接到公有子网中的堡垒主机。堡垒主机和实例必须使用相同的密钥对。由于私钥的 `.pem` 文件位于您的计算机上，而不是在堡垒主机上，您将使用 SSH 密钥转发。然后，您可以从堡垒主机连接到该实例，而无需在 **ssh** 命令中指定 `.pem` 文件。在您为 CloudWatch 设置 VPC 端点后，来自发往 CloudWatch 的实例的流量将解析到端点网络接口，然后使用 VPC 端点发送到 CloudWatch。

![\[私有子网中的实例通过 VPC 端点访问 CloudWatch。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/privatelink/images/getting-started.png)


出于测试目的，您可以使用单个可用区。在生产中，建议您使用至少两个可用区，来实现低延迟和高可用性。

**Topics**
+ [步骤 1：创建具有子网的 VPC](#create-vpc-subnets)
+ [步骤 2：启动实例](#launch-instances)
+ [步骤 3：测试 CloudWatch 访问](#test-cloudwatch-access)
+ [步骤 4：创建 VPC 端点以访问 CloudWatch](#create-vpc-endpoint-cloudwatch)
+ [步骤 5：测试 VPC 端点](#test-vpc-endpoint)
+ [步骤 6：清除](#clean-up)

## 步骤 1：创建具有子网的 VPC
<a name="create-vpc-subnets"></a>

使用以下过程创建具有公有和私有子网的 VPC。

**创建 VPC**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 选择**创建 VPC**。

1. 对于 **Resources to create**（要创建的资源），选择 **VPC and more**（VPC 等）。

1. 对于 **Name tag auto-generation**（名称标签自动生成），为 VPC 输入名称。

1. 若要配置子网，请执行以下操作：

   1. 对于 **Number of Availability Zones**（可用区域数量），根据您的需求选择 **1** 或 **2**。

   1. 对于 **Number of public subnets**（公有子网数量），确保每个可用区有一个公有子网。

   1. 对于 **Number of private subnets**（私有子网数量），确保每个可用区有一个私有子网。

1. 选择**创建 VPC**。

## 步骤 2：启动实例
<a name="launch-instances"></a>

使用您在上一步中创建的 VPC，在公有子网中启动堡垒主机，并在私有子网中启动实例。

**先决条件**
+ 使用 **.pem** 格式创建密钥对。启动堡垒主机和实例时，必须选择此密钥对。
+ 为堡垒主机创建一个安全组，以允许来自计算机的 CIDR 块的入站 SSH 流量。
+ 为实例创建一个安全组，以允许来自堡垒主机安全组的入站 SSH 流量。
+ 创建 IAM 实例配置文件并附加 **CloudWatchReadOnlyAccess** 策略。

**启动堡垒主机**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 选择**启动实例**。

1. 对于 **Name**（名称），输入您的堡垒主机的名称。

1. 保留默认图像和实例类型。

1. 对于 **Key pair**（密钥对），选择您的密钥对。

1. 对于 **Network settings**（网络设置），执行以下操作：

   1. 对于 **VPC**，选择您的 VPC。

   1. 对于 **Subnet**（子网），选择公有子网。

   1. 对于 **Auto-assign public IP**（自动分配公有 IP），选择 **Enable**（启用）。

   1. 对于 **Firewall**（防火墙），选择 **Select existing security group**（选择现有安全组），然后为堡垒主机选择安全组。

1. 选择**启动实例**。

**启动实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 选择**启动实例**。

1. 对于 **Name**（名称），输入您的实例的名称。

1. 保留默认图像和实例类型。

1. 对于 **Key pair**（密钥对），选择您的密钥对。

1. 对于 **Network settings**（网络设置），执行以下操作：

   1. 对于 **VPC**，选择您的 VPC。

   1. 对于 **Subnet**（子网），选择私有子网。

   1. 对于 **Auto-assign public IP**（自动分配公有 IP），选择 **Disable**（禁用）。

   1. 对于 **Firewall**（防火墙），选择 **Select existing security group**（选择现有安全组），然后为实例选择安全组。

1. 展开 **Advanced details**（高级详细信息）。对于 **IAM instance profile**（IAM 实例配置文件），选择您的 IAM 实例配置文件。

1. 选择**启动实例**。

## 步骤 3：测试 CloudWatch 访问
<a name="test-cloudwatch-access"></a>

使用以下过程确认实例无法访问 CloudWatch。您将使用适用于 CloudWatch 的只读 AWS CLI 命令来执行此操作。

**测试 CloudWatch 访问**

1. 在您的计算机上，使用以下命令将密钥对添加到 SSH 代理，其中 *key.pem* 是 .pem 文件的名称。

   ```
   ssh-add ./key.pem
   ```

   如果您收到一条错误消息，提示您的密钥对的权限过于开放，请运行以下命令，然后重试上一个命令。

   ```
   chmod 400 ./key.pem
   ```

1. 从您的计算机连接到堡垒主机。您必须指定 `-A` 选项、实例用户名（例如 `ec2-user`）和堡垒主机的公有 IP 地址。

   ```
   ssh -A ec2-user@bastion-public-ip-address
   ```

1. 从堡垒主机连接到实例。您必须指定实例用户名（例如 `ec2-user`）和实例的私有 IP 地址。

   ```
   ssh ec2-user@instance-private-ip-address
   ```

1. 如下所示，在实例上运行 CloudWatch [list-metrics](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/list-metrics.html) 命令。对于 `--region` 选项，指定您在其中创建 VPC 的区域。

   ```
   aws cloudwatch list-metrics --namespace AWS/EC2 --region us-east-1
   ```

1. 几分钟后，命令会超时。这表明您无法从具有当前 VPC 配置的实例访问 CloudWatch。

   ```
   Connect timeout on endpoint URL: https://monitoring.us-east-1.amazonaws.com/
   ```

1. 保持与您的实例的连接。创建 VPC 端点后，您将再次尝试此 **list-metrics** 命令。

## 步骤 4：创建 VPC 端点以访问 CloudWatch
<a name="create-vpc-endpoint-cloudwatch"></a>

使用以下过程创建连接到 CloudWatch 的 VPC 端点。

**先决条件**  
为 VPC 端点创建安全组，以允许流量流向 CloudWatch。例如，添加允许来自 VPC CIDR 块的 HTTPS 流量的规则。

**为 CloudWatch 创建 VPC 端点**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Endpoints**（端点）。

1. 选择 **创建端点**。

1. 对于 **Name tag**（名称标签），输入端点的名称。

1. 对于 **Service category**（服务类别），选择 **AWS 服务**。

1. 对于 **Service**（服务），选择 **com.amazonaws.*region*.monitoring**。

1. 对于 **VPC**，选择您的 VPC。

1. 对于 **Subnets**（子网），选择可用区，然后选择私有子网。

1. 对于 **Security group**（安全组），选择 VPC 端点的安全组。

1. 对于 **Policy**（策略），选择 **Full access**（完全访问权限）以允许所有主体通过 VPC 端点对所有资源执行所有操作。

1. （可选）若要添加标签，请选择 **Add new tag**（添加新标签），然后输入该标签的键和值。

1. 选择**创建端点**。初始状态为 **Pending**（待处理）。在转到下一步之前，请等到状态变为 **Available**（可用）。这可能需要几分钟的时间。

## 步骤 5：测试 VPC 端点
<a name="test-vpc-endpoint"></a>

验证 VPC 端点是否正在将请求从您的实例发送到 CloudWatch。

**测试 VPC 端点**  
在您的实例上运行以下命令。对于 `--region` 选项，指定您在其中创建 VPC 端点的区域。

```
aws cloudwatch list-metrics --namespace AWS/EC2 --region us-east-1
```

如果您收到响应（即使是结果为空的响应），则说明您已使用 AWS PrivateLink 连接至 CloudWatch。

如果遇到 `UnauthorizedOperation` 错误，请确保该实例具有允许访问 CloudWatch 的 IAM 角色。

如果请求超时，请验证以下内容：
+ 端点的安全组允许流量流向 CloudWatch。
+ `--region` 选项指定了您在其中创建 VPC 端点的区域。

## 步骤 6：清除
<a name="clean-up"></a>

如果不再需要您为本教程创建的堡垒主机和实例，则可以将其删除。

**终止实例**

1. 通过以下网址打开 Amazon EC2 控制台：[https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/)。

1. 在导航窗格中，选择 **Instances (实例)**。

1. 选择两个测试实例，然后依次选择 **Instance state**（实例状态）、**Terminate instance**（终止实例）。

1. 当系统提示您确认时，选择**终止**。

如果您不再需要 VPC 端点，则可以将其删除。

**删除 VPC 端点**

1. 通过 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 打开 Amazon VPC 控制台。

1. 在导航窗格中，选择**端点**。

1. 选择 VPC 端点。

1. 选择 **Actions**（操作）、**Delete VPC Endpoint**（删除 VPC 端点）。

1. 提示进行确认时，输入 **delete**，然后选择 **Delete**（删除）。