

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

# 教程：使用 AWS Client VPN 配置私有网络访问权限
<a name="tutorials-private-network-vpn-client"></a>

本教程将引导您完成为 Amazon MWAA 环境创建从计算机到 Apache Airflow Web 服务器的 VPN 隧道的步骤。要通过 VPN 隧道连接到互联网，您首先需要创建一个 AWS Client VPN 端点。设置完成后，客户端 VPN 端点将充当 VPN 服务器，允许计算机与 VPC 中的资源进行安全连接。然后，您将使用[桌面版 AWS Client VPN](https://aws.amazon.com/vpn/client-vpn-download/) 从电脑连接到客户端 VPN。

**Topics**
+ [私有网络](#private-network-vpn-onconsole)
+ [使用案例](#private-network-vpn-usecases)
+ [开始前的准备工作](#private-network-vpn-prereqs)
+ [目标](#private-network-vpn-objectives)
+ [（可选）步骤 1：确定 VPC、CIDR 规则和 VPC 安全](#private-network-vpn-optional)
+ [步骤 2：创建服务器证书和客户端证书](#private-network-vpn-certs)
+ [步骤 3：将 CloudFormation 模板保存到本地](#private-network-vpn-template)
+ [步骤 4：创建客户端 VPN CloudFormation 堆栈](#private-network-vpn-create)
+ [步骤 5：将子网关联到客户端 VPN](#private-network-vpn-associate)
+ [步骤 6：为客户端 VPN 添加授权入口规则](#private-network-vpn-autho)
+ [步骤 7：下载客户端 VPN 端点配置文件](#private-network-vpn-download)
+ [步骤 8：连接到 AWS Client VPN](#private-network-vpn-connect)
+ [接下来做什么？](#create-vpc-vpn-next-up)

## 私有网络
<a name="private-network-vpn-onconsole"></a>

本教程假设您已为 Apache Airflow Web 服务器选择了**私有网络**访问模式。

![此图显示了带有私有 Web 服务器的 Amazon MWAA 环境的架构。](http://docs.aws.amazon.com/zh_cn/mwaa/latest/userguide/images/mwaa-private-web-server.png)


私有网络访问模式将访问 Apache Airflow UI 的权限限制为* Amazon VPC 中*已获准访问[环境 IAM 策略](access-policies.md)的用户。

创建具有私有 Web 服务器访问权限的环境时，必须将所有依赖项打包到 Python Wheel 档案 (`.whl`) 中，然后在 `requirements.txt` 中引用 `.whl`。有关使用 Wheel 打包和安装依赖项的说明，请参阅[使用 Python Wheel 管理依赖项](best-practices-dependencies.md#best-practices-dependencies-python-wheels)。

下图描述了在 Amazon MWAA 控制台上哪里可以找到**私有网络**选项。

![此图描述了在 Amazon MWAA 控制台上哪里可以找到私有网络选项。](http://docs.aws.amazon.com/zh_cn/mwaa/latest/userguide/images/mwaa-console-private-network.png)


## 使用案例
<a name="private-network-vpn-usecases"></a>

您可以在创建 Amazon MWAA 环境之前或之后使用本教程。您必须使用与您的环境相同的 Amazon VPC、VPC 安全组和私有子网。如果您在创建 Amazon MWAA 环境后使用本教程，则在完成这些步骤后，您可以返回 Amazon MWAA 控制台并将 Apache Airflow Web 服务器访问模式更改为**私有网络**。

## 开始前的准备工作
<a name="private-network-vpn-prereqs"></a>

1. 检查用户权限。请确保您在 AWS Identity and Access Management (IAM) 中的账户拥有足够的权限来创建和管理 VPC 资源。

1. 使用 Amazon MWAA VPC。本教程假设您正在将客户端 VPN 关联到现有 VPC。Amazon VPC 必须与 Amazon MWAA 环境位于同一 AWS 区域，并且有两个私有子网。如果您尚未创建 Amazon VPC，请使用 CloudFormation 模板，如 [选项三：创建*不可*访问互联网的 Amazon VPC 网络](vpc-create.md#vpc-create-template-private-only) 所示。

## 目标
<a name="private-network-vpn-objectives"></a>

在本教程中，您将执行以下操作：

1. 使用现有 Amazon VPC 的 CloudFormation 模板创建 AWS Client VPN 端点。

1. 生成服务器和客户端证书和密钥，然后将服务器证书和密钥上传到与 Amazon MWAA 环境同一 AWS 区域 的 AWS Certificate Manager。

1. 为客户端 VPN 下载并修改客户端 VPN 端点配置文件，然后使用该文件创建 VPN 配置文件，以便使用桌面版客户端 VPN 进行连接。

## （可选）步骤 1：确定 VPC、CIDR 规则和 VPC 安全
<a name="private-network-vpn-optional"></a>

下一节介绍如何为 Amazon VPC、VPC 安全组查找 ID，以及在后续步骤中识别创建客户端 VPN 所需的 CIDR 规则的方法。

### 确定 CIDR 规则
<a name="private-network-vpn-cidr"></a>

下一节介绍如何识别 CIDR 规则，您需要使用这些规则来创建客户端 VPN。

**识别客户端 VPN 的 CIDR**

1. 在 Amazon VPC 控制台，打开[ Amazon VPC 页面](https://console.aws.amazon.com/vpc/home#/vpcs:)。

1. 使用导航栏中的区域选择器选择与 Amazon MWAA 环境相同的 AWS 区域。

1. 选择 Amazon VPC。

1. 假设私有子网的 CIDR 是：
   + 私有子网 1：10.192.10.0`/24`
   + 私有子网 2：10.192.11.0`/24`

   如果 Amazon VPC 的 CIDR 是 10.192.0.0`/16`，那么您为客户端 VPN 指定的**客户端 IPv4 CIDR** 将是 10.192.0.0`/22`。

1. 保存此 CIDR 值以及 VPC ID 的值以供后续步骤使用。

### 识别 VPC 和安全组
<a name="private-network-vpn-sec"></a>

下一节介绍如何查找创建客户端 VPC 所需的 Amazon VPC 和安全组的 ID。

**注意**  
您可能正在使用多个安全组。在后续步骤中，您需要指定所有 VPC 的安全组。

**识别安全组**

1. 在 Amazon VPC 控制台打开[安全组页面](https://console.aws.amazon.com/vpc/home#/securityGroups:)。

1. 在导航栏中，使用区域选择器来选择 AWS 区域。

1. 在 **VPC ID** 中搜索 Amazon VPC，然后识别与 VPC 关联的安全组。

1. 保存安全组和 VPC 的 ID，以供后续步骤使用。

## 步骤 2：创建服务器证书和客户端证书
<a name="private-network-vpn-certs"></a>

客户端 VPN 端点仅支持 1024 位和 2048 位 RSA 密钥大小。下一节介绍如何使用 OpenVPN easy-rsa 生成服务器和客户端证书和密钥，然后使用 AWS Command Line Interface (AWS CLI) 将证书上传到 ACM。

**创建客户端证书**

1. 按照以下快速步骤，通过在[客户端身份验证和授权：相互身份验证](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/client-authentication.html#mutual)中的 AWS CLI 创建证书并将其上传到 ACM。

1. 在这些步骤中，在上传服务器和客户端证书时，您**必须**在 AWS CLI 命令中指定与 Amazon MWAA 环境相同的 AWS 区域。以下是有关如何在这些命令中指定区域的一些示例：

   1.   
**Example 服务器证书的区域**  

      ```
      aws acm import-certificate --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt {{--region us-west-2}}
      ```

   1.   
**Example 客户端证书的区域**  

      ```
      aws acm import-certificate --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt {{--region us-west-2}}
      ```

   1. 完成这些步骤后，保存在服务器证书和客户端证书 ARN 的 AWS CLI 响应中返回的值。您将在 CloudFormation 模板中指定这些 ARN 来创建客户端 VPN。

1. 在这些步骤中，客户端证书和私钥将保存到计算机中。以下是有关在哪里可以找到这些凭证的示例：

   1.   
**Example 在 macOS 上**  

      在 macOS 上，内容保存在 `/Users/{{your-user}}/custom_folder`。如果您列出此目录的所有 (`ls -a`) 内容，则会看到类似以下的内容：

      ```
      .
      ..
      ca.crt
      client1.domain.tld.crt
      client1.domain.tld.key
      server.crt
      server.key
      ```

   1. 完成这些步骤后，保存内容或在 `client1.domain.tld.crt` 中记下客户端证书的位置，以及在 `client1.domain.tld.key` 中记下私钥的位置。您将把这些值添加到客户端 VPN 的配置文件中。

## 步骤 3：将 CloudFormation 模板保存到本地
<a name="private-network-vpn-template"></a>

下一节包含创建客户端 VPN 的 CloudFormation 模板。您必须指定与 Amazon MWAA 环境相同的 Amazon VPC、VPC 安全组和私有子网。
+ 复制以下模板的内容并将其作为 `mwaa_vpn_client.yaml` 保存在本地中。您也可以使用[下载模板](./samples/mwaa_vpn_client.zip)。

  替换以下值：
  + **YOUR\_CLIENT\_ROOT\_CERTIFICATE\_ARN**— 在 `ClientRootCertificateChainArn` 中的 **client1.domain.tld** 证书的 ARN。
  + **YOUR\_SERVER\_CERTIFICATE\_ARN**— 在 `ServerCertificateArn` 中的**服务器**证书的 ARN。
  + 在 `ClientCidrBlock` 中的客户端 IPv4 CIDR 规则。提供 `10.192.0.0/22` 的 CIDR 规则。
  + Amazon VPC ID，如 `VpcId` 所示。提供 `vpc-010101010101` 的 VPC。
  + VPC 安全组 ID，如 `SecurityGroupIds` 所示。提供了 `sg-0101010101` 的安全组。

  ```
  AWSTemplateFormatVersion: 2010-09-09
  Description: This template deploys a VPN Client Endpoint.
  Resources:
    ClientVpnEndpoint:
      Type: 'AWS::EC2::ClientVpnEndpoint'
      Properties:
        AuthenticationOptions:
          - Type: "certificate-authentication"
            MutualAuthentication:
              ClientRootCertificateChainArn: "YOUR_CLIENT_ROOT_CERTIFICATE_ARN"
        ClientCidrBlock: 10.192.0.0/22
        ClientConnectOptions:
          Enabled: false
        ConnectionLogOptions:
          Enabled: false
        Description: "MWAA Client VPN"
        DnsServers: []
        SecurityGroupIds:
          - sg-0101010101
        SelfServicePortal: ''
        ServerCertificateArn: "YOUR_SERVER_CERTIFICATE_ARN"
        SplitTunnel: true
        TagSpecifications:
          - ResourceType: "client-vpn-endpoint"
            Tags:
            - Key: Name
              Value: MWAA-Client-VPN
        TransportProtocol: udp
        VpcId: vpc-010101010101
        VpnPort: 443
  ```

**注意**  
如果您在环境中使用多个安全组，则可以按以下格式指定多个安全组：  

```
SecurityGroupIds:
 - sg-0112233445566778b
 - sg-0223344556677889f
```

## 步骤 4：创建客户端 VPN CloudFormation 堆栈
<a name="private-network-vpn-create"></a>

**创建 AWS Client VPN**

1. 打开 [AWS CloudFormation 管理控制台](https://console.aws.amazon.com/cloudformation/home#)。

1. 选择**模板已准备就绪**，然后选择**上传模板文件**。

1. 选择**选择文件**，然后选择 `mwaa_vpn_client.yaml` 文件。

1. 选择**下一步**、**下一步**。

1. 选择堆栈，然后选择**创建堆栈**。

## 步骤 5：将子网关联到客户端 VPN
<a name="private-network-vpn-associate"></a>

**要将私有子网关联到 AWS Client VPN，请执行以下操作**

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

1. 选择**客户端 VPN 端点**页面。

1. 选择客户端 VPN，然后选择**关联**选项卡、**关联**。

1. 在下拉列表中选择以下内容：
   + Amazon VPC，如 **VPC** 所示。
   + 在**选择要关联的子网**中的一个私有子网。

1. 选择**关联**。

**注意**  
VPC 和子网关联到客户端 VPN 需要几分钟时间。

## 步骤 6：为客户端 VPN 添加授权入口规则
<a name="private-network-vpn-autho"></a>

您需要使用 VPC 的 CIDR 规则向客户端 VPN 添加授权入口规则。如果您想授权来自 Active Directory 组或基于 SAML 的身份提供者 (IdP) 中的特定用户或组，请参阅*《客户端 VPN 指南》*中的[授权规则](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-working-rules.html)。

**要将 CIDR 添加到 AWS Client VPN，请执行以下操作**

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

1. 选择**客户端 VPN 端点**页面。

1. 选择客户端 VPN，然后选择**授权**选项卡、**授权入口**。

1. 指定以下内容：
   + 要在**目标网络中启用** Amazon VPC 的 CIDR 规则。例如：

     ```
     10.192.0.0/16
     ```
   + 在**授予访问权限**中，选择**允许所有用户访问**。
   + 在**描述**中，输入一个描述性名称。

1. 选择**添加授权规则**。

**注意**  
根据 Amazon VPC 的联网组件，您可能还需要将此授权入口规则添加到网络访问控制列表 (NACL) 中。

## 步骤 7：下载客户端 VPN 端点配置文件
<a name="private-network-vpn-download"></a>

**下载配置文件**

1. 按照以下快速步骤在[下载客户端 VPN 端点配置文件](https://docs.aws.amazon.com/vpn/latest/clientvpn-admin/cvpn-getting-started.html#cvpn-getting-started-config)中下载客户端 VPN 配置文件。

1. 在这些步骤中，系统会要求您在客户端 VPN 端点 DNS 名称前面加一个字符串。示例如下：

   1.   
**Example 端点 DNS 名称**  

     如果客户端 VPN 端点 DNS 名称为：

     ```
     remote cvpn-endpoint-0909091212aaee1.prod.clientvpn.us-west-1.amazonaws.com 443
     ```

     您可以添加一个字符串来识别客户端 VPN 端点，如下所示：

     ```
     remote {{mwaavpn}}.cvpn-endpoint-0909091212aaee1.prod.clientvpn.us-west-1.amazonaws.com 443
     ```

1. 在这些步骤中，系统会要求您在一组新 `<cert></cert>` 标签之间添加客户端证书的内容，而在一组新 `<key></key>` 标签之间添加私有密钥的内容。示例如下：

   1. 打开命令提示符并将目录更改为客户端证书和私钥的位置。

   1.   
**Example macOS client1.domain.tld.crt**  

      要在 macOS 上显示 `client1.domain.tld.crt` 文件内容，您可以使用 `cat client1.domain.tld.crt`。

      从终端复制值并粘贴在 `downloaded-client-config.ovpn` 中，如下所示：

      ```
      ZZZ1111dddaBBB
      -----END CERTIFICATE-----
      </ca>
      <cert>
      -----BEGIN CERTIFICATE-----
      {{YOUR client1.domain.tld.crt}}
      -----END CERTIFICATE-----                
      </cert>
      ```

   1.   
**Example macOS client1.domain.tld.key**  

      要显示 `client1.domain.tld.key` 文件内容，您可以使用 `cat client1.domain.tld.key`。

      从终端复制值并粘贴在 `downloaded-client-config.ovpn` 中，如下所示：

      ```
      ZZZ1111dddaBBB
      -----END CERTIFICATE-----
      </ca>
      <cert>
      -----BEGIN CERTIFICATE-----
      {{YOUR client1.domain.tld.crt}}
      -----END CERTIFICATE-----                
      </cert>
      <key>
      -----BEGIN CERTIFICATE-----
      {{YOUR client1.domain.tld.key}}
      -----END CERTIFICATE-----                
      </key>
      ```

## 步骤 8：连接到 AWS Client VPN
<a name="private-network-vpn-connect"></a>

AWS Client VPN 的客户端是免费提供的。您可以将计算机直接连接到 AWS Client VPN，以获得端到端的 VPN 体验。

**连接到客户端 VPN**

1. 下载并安装[桌面版 AWS Client VPN](https://aws.amazon.com/vpn/client-vpn-download/)。

1. 打开 AWS Client VPN。

1. 在 VPN 客户端菜单中选择**文件**、**托管配置文件**。

1. 选择**添加配置文件**，然后选择 `downloaded-client-config.ovpn`。

1. 在**显示名称**中输入描述性名称。

1. 选择**添加配置文件**，**完成**。

1. 选择**连接**。

连接到客户端 VPN 后，您需要断开与其他 VPN 的连接才能访问 Amazon VPC 中的任何资源。

**注意**  
您可能需要退出客户端，然后重新开始，然后才能建立连接。

## 接下来做什么？
<a name="create-vpc-vpn-next-up"></a>
+ 要了解如何创建 Amazon MWAA 环境，请参阅 [开始使用 Amazon MWAA](get-started.md)。您必须在客户端 VPN 所在的 AWS 区域 中创建环境，并使用与客户端 VPN 相同的 VPC、私有子网和安全组。