

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：使用 Linux 堡壘主機設定私有網路存取
<a name="tutorials-private-network-bastion"></a>

本教學課程將逐步引導您建立 SSH 通道，從您的電腦到 Amazon Managed Workflows for Apache Airflow 環境的 Apache Airflow Web 伺服器。其假設您已建立 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)
+ [步驟一：建立堡壘執行個體](#private-network-lb-create-bastion)
+ [步驟二：建立 SSH 通道](#private-network-lb-create-test)
+ [步驟三：將堡壘安全群組設定為傳入規則](#private-network-lb-create-sgsource)
+ [步驟四：複製 Apache Airflow URL](#private-network-lb-view-env)
+ [步驟五：設定代理設定](#private-network-lb-browser-extension)
+ [步驟六：開啟 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.aws.amazon.com/zh_tw/mwaa/latest/userguide/images/mwaa-private-web-server.png)


私有網路存取模式會將對 Apache Airflow UI 的存取限制在 *Amazon VPC 中*已獲授予[環境 IAM 政策](access-policies.md)存取權的使用者。

當您建立具有私有 Web 伺服器存取權的環境時，您必須在 Python wheel 封存檔 (`.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_tw/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. 檢查使用者許可。請確定您在 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. 使用[CloudFormation 現有 VPC 的範本](https://fwd.aws/vWMxm)建立 Linux 堡壘主機執行個體。

1. 使用連接埠 上的輸入規則，將傳入流量授權至堡壘執行個體的安全群組`22`。

1. 授權從 Amazon MWAA 環境安全群組到堡壘執行個體安全群組的傳入流量。

1. 建立堡壘執行個體的 SSH 通道。

1. 安裝並設定 Firefox 瀏覽器的 FoxyProxy 附加元件，以存取 Apache Airflow UI。

## 步驟一：建立堡壘執行個體
<a name="private-network-lb-create-bastion"></a>

下一節說明使用 CloudFormation 主控台上[CloudFormation 現有 VPC 的範本](https://fwd.aws/vWMxm)建立 linux 堡壘執行個體的步驟。

**建立 Linux 堡壘主機**

1. 在 CloudFormation 主控台上開啟[部署 Quick Start](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)。

## 步驟二：建立 SSH 通道
<a name="private-network-lb-create-test"></a>

下列步驟說明如何為 linux 堡壘建立 ssh 通道。SSH 通道會將請求從本機 IP 地址接收到 linux 堡壘，這就是為什麼在先前的步驟`true`中將 linux 堡壘的 TCP 轉送設定為 的原因。

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

**使用命令列建立通道**

1. 在 Amazon EC2 主控台上開啟[執行個體](https://console.aws.amazon.com/ec2/v2/home#/Instances:)頁面。

1. 選擇執行個體。

1. 在**公有 IPv4 DNS** 中複製地址。例如 `ec2-4-82-142-1.compute-1.amazonaws.com`。

1. 在命令提示中，導覽至存放 SSH 金鑰的目錄。

1. 執行下列命令，使用 ssh 連線至堡壘執行個體。在 中使用 SSH 金鑰名稱取代範例值`mykeypair.pem`。

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

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

**使用 PuTTY 建立通道**

1. 在 Amazon EC2 主控台上開啟[執行個體](https://console.aws.amazon.com/ec2/v2/home#/Instances:)頁面。

1. 選擇執行個體。

1. 在**公有 IPv4 DNS** 中複製地址。例如 `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 設定。

## 步驟三：將堡壘安全群組設定為傳入規則
<a name="private-network-lb-create-sgsource"></a>

允許從伺服器存取伺服器和定期網際網路，並將特殊維護安全群組連接到這些伺服器。下列步驟說明如何將堡壘安全群組設定為環境 VPC 安全群組的傳入流量來源。

1. 在 Amazon MWAA 主控台上開啟[環境](https://console.aws.amazon.com/mwaa/home#/environments)頁面。

1. 選擇環境。

1. 在**聯網**窗格中，選擇 **VPC 安全群組**。

1. 選擇 **Edit inbound Rules** (編輯傳入規則)。

1. 選擇**新增規則**。

1. 在**來源**下拉式清單中選擇您的 VPC 安全群組 ID。

1. 將其餘選項保留空白，或設定為其預設值。

1. 選擇**儲存規則**。

## 步驟四：複製 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 以進行後續步驟。

## 步驟五：設定代理設定
<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* 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 --proxy-server="socks5://localhost:8157"
```

這會啟動瀏覽器工作階段，使用您在先前步驟中建立的 ssh 通道來代理其請求。您可以開啟私有 Amazon MWAA 環境 URL （使用 *https：//*)，如下所示：

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

### 選項三：使用 FoxyProxy for Mozilla Firefox 的代理
<a name="private-network-lb-browser-extension-foxyp"></a>

下面的範例演示了 Mozilla Firefox 的 FoxyProxy Standard (7.5.1 版) 組態。FoxyProxy 提供一組代理管理工具。它可讓您將代理伺服器用於符合對應於 Apache Airflow UI 所用網域之模式的 URLs。

1. 在 Firefox 中，開啟 [FoxyProxy 標準](https://addons.mozilla.org/en-US/firefox/addon/foxyproxy-standard/)擴充功能頁面。

1. 選擇**新增至 Firefox**。

1. 選擇**新增**。

1. 選擇瀏覽器工具列中的 FoxyProxy 圖示，然後選擇**選項**。

1. 複製下列程式碼，並在本機儲存為 `mwaa-proxy.json`。使用 **Apache Airflow URL** 取代 {{YOUR\_HOST\_NAME}} 中的範例值。

   ```
   {
     "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. 選擇**確定**。

## 步驟六：開啟 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. 選擇**開啟氣流使用者介面**。

## 後續步驟？
<a name="bastion-next-up"></a>
+ 了解如何在 中對堡壘主機的 SSH 通道上執行 Airflow CLI 命令[Apache Airflow CLI 命令參考](airflow-cli-command-reference.md)。
+ 了解如何將 DAG 程式碼上傳至 中的 Amazon S3 儲存貯體[新增或更新 DAGs](configuring-dag-folder.md)。