教程:使用 Linux 堡垒主机配置私有网络访问权限 - Amazon Managed Workflows for Apache Airflow
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

教程:使用 Linux 堡垒主机配置私有网络访问权限

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

私有网络

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

此图显示了带有私有 Web 服务器的 Amazon MWAA 环境的架构。

私有网络访问模式将访问 Apache Airflow UI 的权限限制为 Amazon VPC 中已获准访问环境 IAM policy 的用户。

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

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

此图显示了在 Amazon MWAA 控制台上哪里可以找到私有网络选项。

使用案例

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

开始前的准备工作

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

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

  3. 创建 SSH 密钥。您需要在与 Amazon MWAA 环境相同的区域创建 Amazon EC2 SSH 密钥(.pem)才能连接到虚拟服务器。如果您没有 SSH 密钥,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》了解如何创建或导入密钥对

目标

在本教程中,您将执行以下操作:

  1. 使用现有 VPC 的Amazon CloudFormation模板创建 Linux 堡垒主机实例。

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

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

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

  5. 安装并配置 Firefox 浏览器的 FoxyProxy 插件,以查看 Apache Airflow UI。

步骤 1:创建堡垒机实例

下一节介绍在 Amazon CloudFormation 控制台上使用现有 VPC 的 Amazon CloudFormation 模板创建 Linux 堡垒机实例的步骤。

创建 Linux 堡垒主机
  1. 在 Amazon CloudFormation 控制台上打开部署快速入门页面。

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

  3. 选择下一步

  4. 堆栈名称文本字段中键入名称,例如 mwaa-linux-bastion

  5. 参数网络配置窗格上,选择以下选项:

    1. 选择 Amazon MWAA 环境的 VPC ID

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

    3. 选择 Amazon MWAA 环境的公有子网 2 ID

    4. 允许的堡垒机外部访问 CIDR 中输入尽可能窄的地址范围(例如,内部 CIDR 范围)。

      注意

      识别范围的最简单方法是使用与公有子网相同的 CIDR 范围。例如,在创建 VPC 网络页面上的 Amazon CloudFormation 模板中,公有子网为 10.192.10.0/2410.192.11.0/24

  6. Amazon EC2 配置窗格上,选择以下选项:

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

    2. 堡垒主机名中输入名称。

    3. 对于 TCP 转发,选择 true

      警告

      在此步骤中,必须将 TCP 转发设置为 true。否则,您将无法在下一步创建 SSH 隧道。

  7. 选择下一步下一步

  8. 选择堆栈,然后选择创建堆栈

要了解有关 Linux 堡垒主机架构的更多信息,请参阅Amazon云上的 Linux 堡垒主机:架构

步骤 2:创建 SSH 隧道

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

macOS/Linux
通过命令行创建隧道
  1. 打开 Amazon EC2 控制台的实例页面。

  2. 选择一个实例。

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

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

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

    ssh -i mykeypair.pem -N -D 8157 ec2-user@YOUR_PUBLIC_IPV4_DNS
Windows (PuTTY)
使用 PuTTTY 创建隧道
  1. 打开 Amazon EC2 控制台的实例页面。

  2. 选择一个实例。

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

  4. 打开 Putty,选择会话

  5. 主机名称中将主机名输入为 ec2-user@YOUR_PUBLIC_IPV4_DNS,将端口输入为 22

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

  7. 在 SSH 下,选择隧道选项卡,然后选择动态自动选项。

  8. 源端口中,添加 8157 端口(或任何其他未使用的端口),然后将目标端口留空。选择添加

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

  10. 选择保存打开

    注意

    您可能需要为公钥输入密码短语。

注意

如果您收到 Permission denied (publickey) 错误,我们建议您使用 awsSupport-TroubleshotsSH 工具,然后选择运行此自动化(控制台)来排查 SSH 设置故障。

步骤 3:将堡垒机安全组配置为入站规则

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

  1. 在 Amazon MWAA 控制台上打开环境页面

  2. 选择环境。

  3. 联网窗格上,选择 VPC 安全组

  4. 选择编辑入站规则

  5. 选择添加规则

  6. 下拉列表中选择 VPC 安全组 ID。

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

  8. 选择保存规则

步骤 4:复制 Apache Airflow URL

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

  1. 在 Amazon MWAA 控制台上打开环境页面

  2. 选择环境。

  3. Airflow UI中复制 URL 以执行后续步骤。

步骤 5:配置代理设置

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

选项一:使用本地端口转发设置 SSH 隧道

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

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

  2. 键入以下命令以打开 SSH 隧道。

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

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

  3. 在浏览器中键入 http://localhost:8157/

    注意

    您可能需要使用 https://localhost:8157/

选项二:通过命令行进行代理

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

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

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

https://YOUR_VPC_ENDPOINT_ID-vpce.YOUR_REGION.airflow.amazonaws.com/home.

选项三:在 Mozilla Firefox 上使用 FoxyProxy 的代理

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

  1. 在 FireFox 中,打开 FoxyProxy 标准扩展页面。

  2. 选择添加到 Firefox

  3. 选择添加

  4. 在浏览器工具栏中选择 FoxyProxy 图标,然后选择选项

  5. 复制以下代码并在本地另存为 mwaa-proxy.json。将 YOUR_HOST_NAME 中的示例值替换为 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" }
  6. 从 FoxyProxy 6.0+ 导入设置窗格上,选择导入设置,然后选择 mwaa-proxy.json 文件。

  7. 选择确定

步骤 6:打开 Apache Airflow UI

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

  1. 在 Amazon MWAA 控制台上打开环境页面

  2. 选择打开 Airflow UI

接下来做什么?