一、需求
#1.跳板機應該放置在哪個子網?
#2.如何安全訪問跳板機?
#3.跳板機如何安全訪問受管理服務器?
二、網絡規划
對於vpc的規划通常需要划分為若干個子網,分為公有子網和私有子網。公有子網中的實例可以直接從 Internet 接收入站數據流,私有子網中的實例則不可。公有子網中的實例可以直接向 Internet 發送出站數據流,私有子網中的實例則不可。但是,私有子網中的實例可以使用位於公有子網中的網絡地址轉換 (NAT) 網關訪問 Internet。
根據以上描述不同子網的特點,我們需要把跳板機放置在公有子網中,以便接受管理人員通過internet的訪問,受管理的服務器根據其在業務系統中充當的角色選擇放置在公有子網或私有子網。在實際生產環境中根據需要可為跳板機設置一個獨立的公有子網 。
如下圖所示的vpc規划中,為跳板機實例划分了一個專用的公有子網,管理員可以通過登錄到跳板機對放置在私有子網的服務器的管理:

三、跳板機部署
1.概述
該實例為 Amazon EBS 支持的實例 (即,根卷為 EBS 卷)。您可以指定在其中運行您的實例的可用區,也可以讓 Amazon EC2 為您選擇可用區。啟動您的實例時,您可以通過指定密鑰對和安全組保障其安全。連接到您的實例時,您必須指定您在啟動實例時指定的密鑰對的私有密鑰。

2.設置 Amazon EC2
1)注冊AWS
當您注冊 Amazon Web Services (AWS) 時,您的 AWS 賬戶會自動注冊 AWS 中的所有服務,包括 Amazon EC2。您只需為使用的服務付費。使用 Amazon EC2,您可以按實際用量付費。如果您是 AWS 新客戶,還可以免費試用 Amazon EC2。
如果您已有一個 AWS 賬戶,請跳到下一個任務。如果您還沒有 AWS 賬戶,請使用以下步驟創建。
#1.如何創建 AWS 賬戶
打開 https://portal.aws.amazon.com/billing/signup。
按照屏幕上的說明進行操作。
在注冊時,您將接到一通電話,要求您使用電話鍵盤輸入一個驗證碼。
2)創建密鑰對
AWS 使用公共密鑰密碼術來保護您的實例的登錄信息。Linux 實例沒有密碼;您可以使用密鑰對安全地登錄您的實例。 使用 SSH 登錄時,您在啟動實例時指定密鑰對的名稱,然后提供私有密鑰。
如果您尚未創建密鑰對,則可以通過 Amazon EC2 控制台自行創建。請注意,如果您計划在多個區域中啟動實例,則需要在每個區域中創建密鑰對。有關區域的更多信息,請參閱區域和可用區。
1.創建密鑰對。
#1.打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/。
#2.在導航窗格中,選擇 Key Pairs (密鑰對)。
#3.選擇 Create key pair (創建密鑰對)。
#4.對於 Name (名稱),輸入密鑰對的描述性名稱。Amazon EC2 將公有密鑰與您指定作為密鑰名稱的名稱相關聯。密鑰名稱最多可包含 255 個 ASCII 字符。它不能包含前導空格或尾隨空格。
#5.對於 File format (文件格式),選擇要保存私有密鑰的格式。要以可與 OpenSSH 一起使用的格式保存私有密鑰,請選擇 pem。要以可與 PuTTY 一起使用的格式保存私有密鑰,請選擇 ppk。
#6.選擇 Create key pair (創建密鑰對)。
#7.您的瀏覽器會自動下載私有密鑰文件。基本文件名是指定為密鑰對名稱的名稱,文件擴展名由您選擇的文件格式確定。將私有密鑰文件保存在安全位置。
ps:這是您保存私有密鑰文件的唯一機會。
#8.如果您將在 macOS 或 Linux 計算機上使用 SSH 客戶端連接到您的 Linux 實例,請使用以下命令設置您私有密鑰文件的權限,以確保只有您可以讀取它。
chmod 400 my-key-pair.pem
如果不設置這些權限,則無法使用此密鑰對連接到實例。
3)創建安全組
安全組用作相關實例的防火牆,可在實例級別控制入站和出站的數據流。您必須在安全組中添加規則,以便能夠使用 SSH 從您的 IP 地址連接到實例。您還可以添加允許來自任意位置的入站和出站 HTTP 和 HTTPS 訪問的規則。
ps:如果計划在多個區域中啟動實例,則需要在每個區域中創建安全組。
您需要使用本地計算機的公有 IPv4 地址。Amazon EC2 控制台中的安全組編輯器可以為您自動檢測公有 IPv4 地址。此外,您可以在 Internet 瀏覽器中使用搜索短語“什么是我的 IP 地址”,或使用以下服務:檢查 IP。如果您正通過 Internet 服務提供商 (ISP) 連接或者在不使用靜態 IP 的情況下從防火牆后面連接,則您需要找出客戶端計算機使用的 IP 地址范圍。
您可以使用以下方法之一創建自定義安全組。
創建具有最小特權的安全組
#1.打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/。
#2.從導航欄中選擇安全組的區域。安全組特定於某一區域,因此您應選擇已創建密鑰對的區域。
#3.在導航窗格中,選擇 Security Groups。
#4.選擇創建安全組。
#5.在 Basic details (基本詳細信息) 部分中,執行以下操作:
1.輸入新安全組的名稱和描述。使用一個容易記住的名稱,例如,您的用戶名稱,后跟 _SG_,加區域名稱。例如,me_SG_uswest2。
2.在 VPC 列表中,為區域選擇您的默認 VPC。
#6.在入站規則選項卡上,創建以下規則(為每個新規則選擇添加規則):
1.從 Type 列表中選擇 HTTP,確保 Source 設置為 Anywhere (0.0.0.0/0)。
2.從 Type 列表中選擇 HTTPS,確保 Source 設置為 Anywhere (0.0.0.0/0)。
3.從 Type 列表中選擇 SSH。在源框中,選擇 My IP 以便使用本地計算機的公有 IPv4 地址自動填充該字段。或者,選擇自定義並用 CIDR 表示法指定計算機的公有 IPv4 地址或網絡。要采用 CIDR 表示法指定單個 IP 地址,請添加路由前綴 /32,例如 203.0.113.25/32。如果您的公司要分配同一范圍內的地址,請指定整個范圍,例如 203.0.113.0/24。
ps:出於安全原因,不要允許從所有 IPv4 地址 (0.0.0.0/0) 對您的實例進行 SSH 訪問(以測試為目的的短暫訪問除外)。
#7.選擇創建安全組。
3.啟動實例
#1.打開 Amazon EC2 控制台 https://console.aws.amazon.com/ec2/。
#2.從控制台控制面板中,選擇啟動實例。
#3.Choose an Amazon Machine Image (AMI) 頁面顯示一組稱為 Amazon 系統映像 (AMI) 的基本配置,作為您的實例的模板。選擇 Amazon Linux 2 的 HVM 版本。 請注意,這些 AMI 標記為“Free tier eligible”(符合條件的免費套餐)。
#4.在 Choose an Instance Type (選擇實例類型) 頁面上,您可以選擇實例的硬件配置。選擇 t2.micro 實例類型 (默認情況下的選擇)。t2.micro 實例類型適用免費套餐。在 t2.micro 不可用的區域中,您可以使用免費套餐下的 t3.micro 實例。有關更多信息,請參閱 AWS 免費套餐。
#5.在選擇實例類型頁面上,選擇查看並啟動讓向導為您完成其他配置設置。
#6.在 Review Instance Launch (查看實例啟動) 頁面上的 Security Groups (安全組) 下,您將看到向導為您創建並選擇了安全組。使用以下步驟,您可以使用此安全組,或者也可以選擇在設置時創建的安全組:
1.選擇 Edit security groups。
2.在 Configure Security Group 頁面上,確保 Select an existing security group 處於選中狀態。
3.從現有安全組列表中選擇您的安全組,然后選擇 Review and Launch。
#7.在 Review Instance Launch 頁面上,選擇 Launch。
#8.當系統提示提供密鑰時,選擇 Choose an existing key pair,然后選擇您在進行設置時創建的密鑰對。
ps:請不要選擇在沒有密鑰對的情況下繼續。如果您啟動的實例沒有密鑰對,就不能連接到該實例。
准備好后,選中確認復選框,然后選擇 Launch Instances。
#9.確認頁面會讓您知道自己的實例已啟動。選擇 View Instances 以關閉確認頁面並返回控制台。
#10.在實例屏幕上,您可以查看啟動狀態。啟動實例只需很短的時間。啟動實例時,其初始狀態為 pending。實例啟動后,其狀態變為 running,並且會收到一個公有 DNS 名稱。(如果公共 IPv4 DNS 列已隱藏,請選擇右上角的設置圖標 ( ) ,打開公共 IPv4 DNS,然后選擇確認。
#11.需要幾分鍾准備好實例,以便您能連接到實例。檢查您的實例是否通過了狀態檢查;您可以在狀態檢查列中查看此信息。
4.使用ssh連接到linux實例
1)先決條件
在連接到 Linux 實例之前,請先完成以下先決條件:
#1.檢查實例狀態
啟動實例后,需要幾分鍾准備好實例,以便您能連接到實例。檢查您的實例是否通過了狀態檢查。您可以在實例頁面的狀態檢查列中查看此信息。
#2.獲取公有 DNS 名稱和用戶名以連接到您的實例
要查找實例的公有 DNS 名稱或 IP 地址以及用於連接到實例的用戶名,請參閱 連接到實例的先決條件。
#3.根據需要在您的本地計算機上安裝 SSH 客戶端
您的本地計算機可能已默認安裝了 SSH 客戶端。您可以通過在命令行中鍵入 ssh 來驗證這一點。如果您的計算機無法識別該命令,可安裝 SSH 客戶端。
最新版本的 Windows Server 2019 和 Windows 10 – OpenSSH 作為可安裝組件包括在內。有關信息,請參閱 Windows 中的 OpenSSH。
較早版本的 Windows – 下載並安裝 OpenSSH。有關更多信息,請參閱 Win32-OpenSSH。
Linux 和 macOS X – 下載並安裝 OpenSSH。有關更多信息,請參閱 https://www.openssh.com。
2) 連接實例
如果您的本地計算機操作系統是 Linux 或 macOS X
#1.SSH 客戶端
#2.EC2 Instance Connect
#3.AWS Systems Manager 會話管理器
如果您的本地計算機操作系統是 Windows
#1.PuTTY
#2.SSH 客戶端
#3.AWS Systems Manager 會話管理器
#4.適用於 Linux 的 Windows 子系統
3)清除實例(不需要時刪除)
終止實例
#1.在導航窗格中,選擇 Instances。在實例列表中選擇實例。
#2.依次選擇實例狀態、終止實例。
#3.當系統提示您確認時,選擇終止。
#4.Amazon EC2 關閉並終止您的實例。您的實例在終止之后,短時間內仍將在控制台上可見,然后該條目將自動刪除。您不能自己從控制台顯示中刪除已終止的實例。
ps:終止實例可有效地刪除實例;無法在終止實例后重新連接到實例。
如果啟動的實例不在 AWS 免費套餐范圍內,則該實例一旦變為 shutting down 或 terminated 狀態,就會停止產生費用。為了在不產生費用的情況下保留實例以供將來使用,可以立即停止該實例,然后在稍后再次啟動它。
5.配置安全組
在實際部署中考慮到跳板機所需的工作負載,可以部署配置較低的實例類型。此外,出於成本和安全考慮,您也可以在不進行運維操作的時候將跳板機狀態設置為”停止”,在每次運維需要的時候再“開啟”跳板機。
為跳板機實例配置安全組。在創建EC2的過程中,在安全組規則中添加SSH服務的安全規則,根據實際情況限定連接的源 IP地址。如下圖所示,只接受特定的 管理終端連接:

配置受管理服務器的安全組。配置安全組規則僅接受來自跳板機所對應安全組的訪問請求:

6.配置管理終端
配置管理終端。在管理終端依次導入跳板機和受管理服務器的證書私鑰,登錄跳板機后私鑰信息將轉發到受管理服務器完成身份驗證。以下是針對linux環境和windows環境的管理終端為例:
#1.在linux管理終端下通過ssh從跳板機登錄到受管理服務器:
步驟一:在linux管理終端上運行ssh-agent啟動ssh-agent進程
步驟二:將跳板機和受管理服務器對應證書的私鑰依次添加到管理終端,執行方式如下(例如,私鑰文件名稱為xxx.pem):
ssh-add xxx.pem
步驟三:使用ssh -A 參數登錄跳板機,-A 表示通過跳板機轉發本地管理端保存的私鑰信息,實現跳板機與受管理服務器之間的身份驗證:
ssh –A ec2-user@跳板機公網 ip地址 ——(以下假定linux ssh用戶名為ec2-user)
步驟四:從跳板機直接通過受管理服務器的內網IP SSH登錄服務器:
ssh ec2-user@受管理服務器的內網ip地址
#2.在windows環境下通過Putty從跳板機登陸到受管理的服務器:
下載putty客戶端,並且通過puttygen將私有證書生成ppk格式。
下載Putty環境下的SSH agent—-pageant
步驟一:將受管理服務器及跳板機所對應證書的私鑰添加進pageant
啟動pageant並右擊圖標,您可以先查看key list,如果受訪問服務器所需私鑰沒有添加進key list里,則執行”Add Key”的操作。並將保存在本地的私鑰添加進去。

步驟二:通過putty登陸跳板機
在這一步中,如圖填寫跳板機公有IP地址,並在左側SSH-Auth目錄下勾選“Allow agent forwarding” 來允許跳板機上的ssh客戶端與管理終端本地的ssh-agent通信並使用管理終端本地的密鑰完成與受管理服務器的ssh認證流程。下面以AWS 上的一台EC2為例登陸跳板機:

這里需要添加的私鑰為跳板機所對應證書的私鑰。

步驟三:從跳板機直接登錄受管理的服務器
通過命令”ssh ec2-user@受管理服務器內網ip地址”來實現對受管理服務器的訪問,需要注意的是,在這里輸入受管理服務器的私有IP地址實現對其的訪問,提高了受管理服務器的安全性。
這樣,您便實現了從跳板機上登陸受管理服務器的操作。

四、安全加固
在上面部署跳板機的過程中,跳板機所附件的安全組規則中開放了TCP 22端口,根據實際情況建議嚴格限制來源ip地址,只允許指定的IP地址訪問。在這基礎上,還可以對安全進行優化:
1.管理員登錄優化
#1.當管理員需要登錄跳板機通過AWS CLI在安全組添加規則打開tcp 22 端口;
完成管理任務后,退出ssh會話,AWS CLI將從安全組中關閉tcp 22端口;實現以上效果,可以執行以下腳本 ,根據實際環境替換安全組id。
#!/bin/bash
aws ec2 authorize-security-group-ingress –group-id 安全組id –protocol tcp –port 22 –cidr 0.0.0.0/0 &
sleep 5
ssh -A ec2-user@跳板機公網IP
aws ec2 revoke-security-group-ingress –group-id 安全組id –protocol tcp –port 22 –cidr 0.0.0.0/0
2.配置AWS CLI運行環境
要成功運行以上腳本,需要配置 AWS CLI運行環境,具體請參考:
http://docs.aws.amazon.com/cli/latest/userguide/installing.html
執行腳本登錄前,將跳板機安全組中的ssh服務規則刪除,即無法訪問tcp 22端口:

執行腳本登錄時,將執行腳本中的第一條語句,通過AWS CLI添加了ssh服務相關規則,然后ssh成功登錄到跳板機:

在跳板機上完成管理任務后exit結束ssh會話,AWS CLI刪除安全組ssh服務規則,即無法訪問tcp22端口:

下圖顯示,安全組規則相應被刪除:

五、跨vpc管理服務器
跳板機是否可以管理不同vpc中的服務器呢?答案當然是可以的。如下圖所示,需要在vpc之間建立peering連通兩個vpc,跳板機即可實現跨vpc安全管理應用服務器。

建立vpc peering的過程如下:
步驟一:新建Peering Connection
進入console里面VPC下的”Peering Connections”頁面,新建”VPC Peering Connection”。 在這里您需要提供跳板機以及受管理服務器所在VPC的ID,點擊”Create VPC Peering Connection”。

步驟二: 配置路由表
創建成功之后,您可以看到peering 的相關信息,比如”status” ,”Local Vpc”以及”Peered Vpc”信息。同時您可以看到peering的狀態為”pending-accept”,您需要點擊上方的”Action”,並選擇接受請求。


當您接受請求之后,您會收到創建新的路由表的通知,您需要點進頁面進行路由表的配置。當為本地VPC 配置路由表信息時,您需要提供受訪服務器所在VPC的CIDR作為跳板機路由表的Destination,新創建的peering作為Target。
同理,在配置受訪服務器所在VPC的路由表信息時,您只需將本地 VPC 的CIDR作為Destination。

在配置完路由表信息后,您可以看到peering的狀態變成了”active”,並且可以看到路由表的相關信息。

步驟三: 通過本地跳板機登陸受訪服務器
這一步類似於前面提到的在同一VPC下從公有子網的跳板機訪問私有子網的受管理服務器。您需要配置好您的安全組信息,在訪問的時候,您需要在管理終端保存受管理服務器公鑰所對應的私鑰。然后在跳板機上執行ssh ec2-user@受管理服務器內網ip地址
如下圖:位於192.168.0.0/24網段的跳板機 直接ssh訪問位於172.16.0.0/24網段的應用服務器

六、關於windows 環境下的跳板機配置
Windows Server的管理基於windows RDP協議實現,可以通過配置RDP 網關服務器管理位於私有子網的windows服務器,具體的規划及配置請參考以下白皮書:
https://aws.amazon.com/windows/resources/whitepapers/rdgateway