

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

# 教程：使用 Linux 堡垒主机配置私有网络访问权限
<a name="tutorials-private-network-bastion"></a>

本教程将引导您完成为 Amazon MWAA 环境创建从计算机到 Apache Airflow Web 服务器的 SSH 隧道的步骤。本教程假设您已经创建了 Amazon MWAA 环境。设置完成后，Linux 堡垒主机将充当跳转服务器，允许计算机与 VPC 中的资源进行安全连接。然后，您将使用 SOCKS 代理管理附加组件来控制浏览器中的代理设置，以访问 Apache Airflow UI。

**Topics**
+ [私有网络](#private-network-lb-onconsole)
+ [使用案例](#private-network-lb-usecases)
+ [开始前的准备工作](#private-network-lb-prereqs)
+ [目标](#private-network-lb-objectives)
+ [步骤 1：创建堡垒机实例](#private-network-lb-create-bastion)
+ [步骤 2：创建 SSH 隧道](#private-network-lb-create-test)
+ [步骤 3：将堡垒机安全组配置为入站规则](#private-network-lb-create-sgsource)
+ [步骤 4：复制 Apache Airflow URL](#private-network-lb-view-env)
+ [步骤 5：配置代理设置](#private-network-lb-browser-extension)
+ [步骤 6：打开 Apache Airflow UI](#private-network-lb-open)
+ [接下来做什么？](#bastion-next-up)

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

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

![\[此图显示了带有私有 Web 服务器的 Amazon MWAA 环境的架构。\]](http://docs.amazonaws.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.amazonaws.cn/mwaa/latest/userguide/images/mwaa-console-private-network.png)


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

您可以在创建 Amazon MWAA 环境后使用本教程。您必须使用与环境相同的 Amazon VPC、VPC 安全组和公有子网。

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

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

1. 使用 Amazon MWAA VPC。本教程假定您将堡垒主机关联到 VPC。Amazon VPC 必须与 Amazon MWAA 环境位于同一区域，并且拥有两个私有子网，如 [创建 VPC 网络](vpc-create.md) 中所定义。

1. 创建 SSH 密钥。您需要在与 Amazon MWAA 环境相同的区域创建 Amazon EC2 SSH 密钥（**.pem**）才能连接到虚拟服务器。如果您没有 SSH 密钥，请参阅*《Amazon EC2 用户指南》*中的[创建或导入密钥对](https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/ec2-key-pairs.html#prepare-key-pair)。

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

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

1. 使用[现有 VPC 的Amazon CloudFormation模板](https://fwd.aws/vWMxm)创建 Linux 堡垒主机实例。

1. 使用端口 `22` 上的入口规则授权进入堡垒机实例安全组的入站流量。

1. 授权从 Amazon MWAA 环境的安全组流向堡垒机实例的安全组的入站流量。

1. 创建通往堡垒机实例的 SSH 隧道。

1. 安装并配置 Firefox 浏览器的 FoxyProxy 插件，以访问 Apache Airflow UI。

## 步骤 1：创建堡垒机实例
<a name="private-network-lb-create-bastion"></a>

下一节介绍在 Amazon CloudFormation 控制台上使用[现有 VPC 的 Amazon CloudFormation 模板](https://fwd.aws/vWMxm)创建 Linux 堡垒机实例的步骤。

**创建 Linux 堡垒主机**

1. 在 Amazon CloudFormation 控制台上打开[部署快速入门](https://fwd.aws/Jwzqv)页面。

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

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

1. 在**堆栈名称**文本字段中输入名称，例如 `mwaa-linux-bastion`。

1. 在**参数**、**网络配置**窗格上，选择以下选项：

   1. 选择 Amazon MWAA 环境的 **VPC ID**。

   1. 选择 Amazon MWAA 环境的**公有子网 1 ID**。

   1. 选择 Amazon MWAA 环境的**公有子网 2 ID**。

   1. 在**允许的堡垒机外部**访问 CIDR 中输入尽可能窄的地址范围（例如，内部 CIDR 范围）。
**注意**  
识别范围的最简单方法是使用与公有子网相同的 CIDR 范围。例如，在 [创建 VPC 网络](vpc-create.md) 页面上的 Amazon CloudFormation 模板中，公有子网为 `10.192.10.0/24` 和 `10.192.11.0/24`。

1. 在** Amazon EC2 配置**窗格上，选择以下选项：

   1. 在**密钥对名称**的下拉列表中选择 SSH 密钥。

   1. 在**堡垒主机名**中输入名称。

   1. 对于 **TCP 转发**，选择 **true**。
**警告**  
在此步骤中，必须将 TCP 转发设置为 **true**。否则，您将无法在下一步创建 SSH 隧道。

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

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

要了解有关 Linux 堡垒主机架构的更多信息，请参阅 [Amazon 云上的 Linux 堡垒主机：架构](https://docs.amazonaws.cn/quickstart/latest/linux-bastion/architecture.html)。

## 步骤 2：创建 SSH 隧道
<a name="private-network-lb-create-test"></a>

以下步骤介绍如何创建通往 Linux 堡垒机的 SSH 隧道。SSH 隧道接收从本地 IP 地址发送到 Linux 堡垒机的请求，这就是为何在前述步骤中将 Linux 堡垒机的 TCP 转发设置为 `true`。

------
#### [ macOS/Linux ]

**使用命令行创建隧道**

1. 打开 Amazon EC2 控制台的[实例](https://console.amazonaws.cn/ec2/v2/home#/Instances:)页面。

1. 选择一个实例。

1. 复制**公有 IPv4 DNS**下的 IP 地址。例如 `ec2-4-82-142-1.compute-1.amazonaws.com`。

1. 在命令提示符下，导航到存储 SSH 密钥的目录。

1. 运行以下命令以使用 SSH 连接堡垒机实例。将示例值替换为 `mykeypair.pem` 中的 SSH 密钥名称。

   ```
   ssh -i mykeypair.pem -N -D 8157 ec2-user@YOUR_PUBLIC_IPV4_DNS
   ```

------
#### [ Windows (PuTTY) ]

**使用 PuTTTY 创建隧道**

1. 打开 Amazon EC2 控制台的[实例](https://console.amazonaws.cn/ec2/v2/home#/Instances:)页面。

1. 选择一个实例。

1. 复制**公有 IPv4 DNS**下的 IP 地址。例如 `ec2-4-82-142-1.compute-1.amazonaws.com`。

1. 打开 [Putty](https://www.putty.org/)，选择**会话**。

1. 在**主机名称**中将主机名输入为 ec2-user@*YOUR\$1PUBLIC\$1IPV4\$1DNS*，将**端口**输入为 `22`。

1. 展开 **SSH** 选项卡，选择**身份验证**。在**用于身份验证的私钥文件**中，选择本地“ppk”文件。

1. 在 SSH 下，选择**隧道**选项卡，然后选择*动态*和*自动*选项。

1. 在**源端口**中，添加 `8157` 端口（或任何其他未使用的端口），然后将**目标**端口留空。选择**添加**。

1. 选择**会话**选项卡并输入会话名称。例如 `SSH Tunnel`。

1. 选择**保存**，**打开**。
**注意**  
您可能需要为公有密钥输入密码短语。

------

**注意**  
如果您收到 `Permission denied (publickey)` 错误，我们建议您使用 [awsSupport-TroubleshotsSH 工具，然后选择**运行此自动化（控制台）**来排查](https://docs.amazonaws.cn/systems-manager/latest/userguide/automation-awssupport-troubleshootssh.html) SSH 设置故障。

## 步骤 3：将堡垒机安全组配置为入站规则
<a name="private-network-lb-create-sgsource"></a>

通过与这些服务器关联的特殊维护安全组，允许从服务器访问服务器和定期访问互联网。以下步骤介绍如何将堡垒机安全组配置为某环境的 VPC 安全组的入站流量来源。

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.amazonaws.cn/mwaa/home#/environments)。

1. 选择环境。

1. 在**联网**窗格上，选择 **VPC 安全组**。

1. 选择**编辑入站规则**。

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

1. 在**源**下拉列表中选择 VPC 安全组 ID。

1. 将其余选项留空，或将其设置为默认值。

1. 选择**保存规则**。

## 步骤 4：复制 Apache Airflow URL
<a name="private-network-lb-view-env"></a>

以下步骤介绍如何打开 Amazon MWAA 控制台并将 URL 复制到 Apache Airflow UI。

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.amazonaws.cn/mwaa/home#/environments)。

1. 选择环境。

1. 在 **Airflow UI**中复制 URL 以执行后续步骤。

## 步骤 5：配置代理设置
<a name="private-network-lb-browser-extension"></a>

如果您使用带有动态端口转发的 SSH 隧道，则必须使用 SOCKS 代理管理附加组件来控制浏览器中的代理设置。例如，您可以使用 Chromium 的 `--proxy-server` 功能来启动浏览器会话，或者在 Mozilla FireFox 浏览器中使用 FoxyProxy 扩展程序。

### 选项一：使用本地端口转发设置 SSH 隧道
<a name="private-network-lb-browser-extension-portforwarding"></a>

如果您不想使用 SOCKS 代理，您可以使用本地端口转发设置 SSH 隧道。以下示例命令通过转发本地端口 8157 上的流量来访问 Amazon *EC2 资源管理器* Web 界面。

1. 打开新的命令提示符窗口。

1. 输入以下命令以打开 SSH 隧道。

   ```
   ssh -i mykeypair.pem -N -L 8157:YOUR_VPC_ENDPOINT_ID-vpce.us-east-1.airflow.amazonaws.com:443 ubuntu@YOUR_PUBLIC_IPV4_DNS.us-east-1.compute.amazonaws.com
   ```

   `-L` 代表使用本地端口转发，由此，您就能指定一个本地端口，用于将数据转发到节点的本地 Web 服务器上标识的远程端口。

1. 在浏览器中输入 `http://localhost:8157/`。
**注意**  
您可能需要使用 `https://localhost:8157/`。

### 选项二：使用命令行配置代理
<a name="private-network-lb-browser-extension-foxyp"></a>

您可以使用大多数 Web 浏览器，通过命令行或配置参数来配置代理。例如，使用 Chromium，您可以在 Chromium 中通过以下命令启动浏览器：

```
chromium --proxy-server="socks5://localhost:8157"
```

这将启动浏览器会话，该会话使用您在前述步骤中创建的 SSH 隧道来代理其请求。您可以按如下方式打开 Amazon MWAA 私有环境 URL（使用 *https://*）：

```
https://YOUR_VPC_ENDPOINT_ID-vpce.us-east-1.airflow.amazonaws.com/home.
```

### 选项三：在 Mozilla Firefox 上使用 FoxyProxy 的代理
<a name="private-network-lb-browser-extension-foxyp"></a>

以下示例演示了 Mozilla Firefox 的 FoxyProxy Standard（版本 7.5.1）配置。FoxyProxy 提供了一套代理管理工具。该工具使您可以使用与 Apache Airflow UI 所使用的域对应模式相匹配的 URL 代理服务器。

1. 在 FireFox 中，打开 [FoxyProxy Standard](https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/) 扩展页面。

1. 选择**添加到 Firefox**。

1. 选择**添加**。

1. 在浏览器工具栏中选择 FoxyProxy 图标，然后选择**选项**。

1. 复制以下代码并在本地另存为 `mwaa-proxy.json`。将 *YOUR\$1HOST\$1NAME* 中的示例值替换为 **Apache Airflow URL**。

   ```
   {
     "e0b7kh1606694837384": {
       "type": 3,
       "color": "#66cc66",
       "title": "airflow",
       "active": true,
       "address": "localhost",
       "port": 8157,
       "proxyDNS": false,
       "username": "",
       "password": "",
       "whitePatterns": [
         {
           "title": "airflow-ui",
           "pattern": "YOUR_HOST_NAME",
           "type": 1,
           "protocols": 1,
           "active": true
         }
       ],
       "blackPatterns": [],
       "pacURL": "",
       "index": -1
     },
     "k20d21508277536715": {
       "active": true,
       "title": "Default",
       "notes": "These are the settings that are used when no patterns match a URL.",
       "color": "#0055E5",
       "type": 5,
       "whitePatterns": [
         {
           "title": "all URLs",
           "active": true,
           "pattern": "*",
           "type": 1,
           "protocols": 1
         }
       ],
       "blackPatterns": [],
         "index": 9007199254740991
     },
     "logging": {
       "active": true,
       "maxSize": 500
     },
     "mode": "patterns",
     "browserVersion": "82.0.3",
     "foxyProxyVersion": "7.5.1",
     "foxyProxyEdition": "standard"
   }
   ```

1. 在**从 FoxyProxy 6.0\$1 导入设置**窗格上，选择**导入设置**，然后选择 `mwaa-proxy.json` 文件。

1. 选择**确定**。

## 步骤 6：打开 Apache Airflow UI
<a name="private-network-lb-open"></a>

以下步骤介绍如何打开 Apache Airflow UI。

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.amazonaws.cn/mwaa/home#/environments)。

1. 选择**打开 Airflow UI**。

## 接下来做什么？
<a name="bastion-next-up"></a>
+ 要了解如何在 baol 通往堡垒主机的 SSH 隧道上运行 Airflow CLI 命令，请参阅 [Apache Airflow CLI 命令参考](airflow-cli-command-reference.md)。
+ 要了解如何将 DAG 代码上传到 Amazon S3 存储桶，请参阅 [添加或更新 DAG](configuring-dag-folder.md)。