

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

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

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

**注意**  
本教程适用于**专用网络**访问模式。如果您选择 “**同时访问公用和私有网络**”，则无需堡垒主机即可访问 Apache Airflow 用户界面，因为它可以通过互联网进行访问。

**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 服务器选择了**私有网络**访问模式。

![此图像显示了具有私有网络访问权限的 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)的用户。

创建具有**私有网络**访问权限的环境时，必须将所有依赖项打包到 Python 轮档案 (`.whl`) 中，然后在`.whl`中引用`requirements.txt`。有关使用 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-2026.png)


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

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

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

1. 检查用户权限。请确保您在 AWS 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.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html#prepare-key-pair)。

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

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

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

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

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

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

1. 安装并配置 Firefox 浏览器的 FoxyProxy 插件以访问 Apache Airflow 用户界面。

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

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

**创建 Linux 堡垒主机**

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

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

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)页面 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 堡垒主机架构的更多信息，请参阅[AWS 云上的 Linux 堡垒主机：](https://docs.aws.amazon.com/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.aws.amazon.com/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.aws.amazon.com/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\_PUBLIC\_IPV4\_DNS}}，将端口输入为。** `22`

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

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

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

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

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

------

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

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

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

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/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.aws.amazon.com/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 *ResourceManager*网页界面。

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.
```

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

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

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

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

1. 选择**添加**。

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

1. 复制以下代码并在本地另存为 `mwaa-proxy.json`。用你的 **Apache Air {{YOUR\_HOST\_NAME}} flow 网址**替换中的示例值。

   ```
   {
     "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 及以上版本导入设置**” 窗格中，选择 “**导入设置”**，然后选择文件。`mwaa-proxy.json`

1. 选择**确定**。

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

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

1. 在 Amazon MWAA 控制台上打开[环境页面](https://console.aws.amazon.com/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)。