AWS 堡壘主機(Jump Server)完整教學:從零開始理解安全遠端連線

Published November 11, 2025 by 徐培鈞
架構

當你開始學習 AWS 雲端架構時,會發現一個重要的安全原則:

將應用程式和資料庫放在私有子網路(Private Subnet)中,不讓它們直接暴露在網際網路上

這個做法大大提升了系統的安全性,但同時也帶來一個實務上的問題:既然這些機器沒有公開 IP 位址,那我們要如何遠端登入進行維護、除錯或管理呢?

這就是「堡壘主機(Bastion Host)」存在的理由。

本文將用最白話、最具體的方式,幫助初學者完全理解堡壘主機的概念、為什麼需要它,以及如何在 AWS 架構中正確配置。

問題的根源:Private Subnet 的安全困境

標準 AWS 架構的安全設計

在學習 AWS 時,你會學到以下標準做法:

  • 應用程式伺服器(EC2):放在 Private Subnet
  • 資料庫(RDS、Redis):放在 Private Subnet
  • Private Subnet 的機器:沒有 Public IP 位址
  • 透過 NAT Gateway:Private Subnet 的機器可以對外連線(例如下載更新、呼叫外部 API)

架構圖示

圖解說明

🔴 Private Subnet(紅色)

  • EC2、RDS、Redis 都沒有 Public IP
  • 路由表設定:0.0.0.0/0 → NAT Gateway(所有對外流量走 NAT)
  • 外部無法直接存取這些資源

🔵 Public Subnet(藍色)

  • NAT Gateway 有 Public IP
  • 路由表設定:0.0.0.0/0 → Internet Gateway(直接對外)

🟢 Internet Gateway(綠色)

  • VPC 唯一的對外出入口
  • 所有進出 VPC 的流量都必須經過 IGW

流量路徑詳解

EC2 對外連線(Outbound)

EC2  NAT Gateway  IGW  網際網路
  • Private EC2 沒有 Public IP,無法直接連網際網路
  • 必須透過 NAT Gateway 做來源 IP 轉換
  • NAT Gateway 再透過 IGW 連到網際網路

重點

  • ✅ EC2 可以透過 NAT Gateway 主動對外連線(下載更新、呼叫 API)
  • ❌ 外部使用者無法主動連入 EC2(沒有 Public IP)
  • ❌ IGW 不會直接連到 Private Subnet
  • ❌ NAT 不會直接連到網際網路(必須透過 IGW)

這個設計非常安全,因為外部的網路流量無法直接進入這些機器,大幅降低了被攻擊的風險。

遇到的實際問題

但是,當你實際運作系統時,一定會遇到以下情境:

  • 需要登入 EC2 查看系統日誌(log files)
  • 需要除錯應用程式的執行狀態
  • 需要手動執行某些維護指令
  • 需要檢查資料庫連線狀況
  • 需要安裝或更新套件

問題來了:Private Subnet 的機器沒有 Public IP,你從家裡或公司的電腦,根本無法直接 SSH 連線進去!

這時候,你需要一個「中繼站」來幫你進入內部網路,這個中繼站就是 堡壘主機(Bastion Host)

堡壘主機是什麼?

核心概念

堡壘主機(Bastion Host)是一台特殊的 EC2 執行個體,它的唯一任務就是:作為進入 Private Subnet 的跳板(Jump Server)

白話比喻:保全室的概念

想像你要進入一棟高度安全的大樓:

🏠 你的電腦(在家裡或公司)
   
     SSH 連線
   
🚪 大樓門口的保全室(Bastion Host,在 Public Subnet)
   
     SSH 連線(內部網路)
   
🏢 大樓內部的機房(Private EC2,在 Private Subnet)

步驟解釋

  1. 你先透過 SSH 連到「保全室」(Bastion Host)
  2. 進入保全室後,再從保全室 SSH 連到「內部機房」(Private EC2)

這樣的設計好處是:

  • 內部機器不需要 Public IP,保持高度安全
  • 只有一個入口需要嚴格監控(保全室)
  • 可以集中管理誰能進入內部網路
  • 可以詳細記錄所有連線記錄(audit log)

技術定義

堡壘主機具有以下特性:

  • 位於 Public Subnet(所以有 Public IP)
  • 開啟 SSH port 22(允許遠端連線)
  • 配置嚴格的 Security Group(只允許特定 IP 連入)
  • 沒有其他服務在上面運行(專門用途)
  • 可以 SSH 到 Private Subnet 的其他 EC2

堡壘主機與 AWS 架構的關係

完整架構圖解

graph TB
    User["🏠 你的電腦"]

    subgraph VPC["AWS VPC"]
        direction LR

        subgraph PublicSubnet["Public Subnet"]
            direction TB
            Bastion["Bastion Host<br/>跳板主機<br/>✅ 有 Public IP"]
            NAT["NAT Gateway"]
        end

        subgraph PrivateSubnet["Private Subnet"]
            direction TB
            EC2["EC2 應用程式<br/>❌ 無 Public IP"]
            RDS[("RDS 資料庫<br/>❌ 無 Public IP")]
        end

        Bastion -->|SSH 連線| EC2
        EC2 -->|出網流量| NAT
    end

    User -->|① SSH 連線| Bastion

    style Bastion fill:#99ccff,stroke:#0066cc,stroke-width:3px
    style EC2 fill:#ff9999,stroke:#cc0000,stroke-width:3px
    style RDS fill:#ff9999,stroke:#cc0000,stroke-width:2px
    style NAT fill:#99ccff,stroke:#0066cc,stroke-width:2px
    style PublicSubnet fill:#e6f3ff,stroke:#0066cc,stroke-width:2px
    style PrivateSubnet fill:#ffe6e6,stroke:#cc0000,stroke-width:2px
    style VPC fill:#fffacd,stroke:#333,stroke-width:2px

連線步驟

  1. 你從自己的電腦 SSH 連到 Bastion Host(Public Subnet)
  2. 進入 Bastion Host 後,再 SSH 連到 Private EC2
  3. Private EC2 透過 NAT Gateway 可以對外連線(下載更新等)

元件功能對照表

所在位置Public Subnet
主要功能跳板主機
是否有 Public IP✅ 有
用途說明讓你能 SSH 進入 Private EC2
所在位置Private Subnet
主要功能運行服務
是否有 Public IP❌ 沒有
用途說明實際執行你的網站或 API
所在位置Public Subnet
主要功能出網閘道
是否有 Public IP✅ 有
用途說明讓 Private EC2 可以連到外部網路
所在位置Private Subnet
主要功能資料儲存
是否有 Public IP❌ 沒有
用途說明儲存應用程式的資料

為什麼不直接給 Private EC2 一個 Public IP?

你可能會想:「為什麼不乾脆給 Private EC2 一個 Public IP,就可以直接 SSH 了?」

原因如下:

  1. 安全性大幅降低:每一台有 Public IP 的機器都是潛在的攻擊目標
  2. 管理複雜:如果有 10 台 EC2,就要管理 10 個對外入口
  3. 無法集中監控:無法統一記錄誰在什麼時候登入了哪台機器
  4. 違反最小權限原則:應用程式伺服器不需要被外部直接存取

使用堡壘主機的好處:

  • ✅ 只需要保護一個入口(Bastion Host)
  • ✅ 集中管理存取權限
  • ✅ 容易記錄和稽核(audit)
  • ✅ 符合企業安全標準

Security Group 安全設定

Bastion Host 的 Security Group

規則重點:只允許你信任的 IP 位址連入

協定SSH
Port22
來源你的公司IP/32 或 你家IP/32
說明只允許特定 IP 連入
協定SSH
Port22
來源Private Subnet CIDR
說明允許連到內部 EC2
協定All
PortAll
來源0.0.0.0/0
說明允許出網(系統更新等)

最佳實踐

  • 不要開放 0.0.0.0/0(全世界都可以連)
  • 使用 /32 指定單一 IP
  • 如果 IP 會變動,考慮使用 VPN 或 AWS Systems Manager Session Manager

Private EC2 的 Security Group

規則重點:只允許 Bastion Host 連入

協定SSH
Port22
來源Bastion Host 的 Security Group ID
說明只允許 Bastion Host 連入
協定HTTP/HTTPS
Port80/443
來源Load Balancer 的 Security Group
說明允許流量進入
協定All
PortAll
來源0.0.0.0/0
說明允許出網

關鍵概念:使用 Security Group ID 作為來源,比使用 IP 更安全、更靈活。

實際操作:如何使用堡壘主機

基本連線流程

步驟一:先連到 Bastion Host

# 從你的電腦連到 Bastion Host
ssh -i bastion-key.pem ec2-user@<Bastion-Public-IP>

步驟二:從 Bastion Host 連到 Private EC2

# 在 Bastion Host 上執行
ssh -i private-key.pem ec2-user@<Private-EC2-Private-IP>

進階技巧:SSH ProxyJump(一步到位)

如果你不想分兩步連線,可以使用 SSH 的 ProxyJump 功能:

# 一個指令直接連到 Private EC2
ssh -i private-key.pem -J ec2-user@<Bastion-Public-IP> ec2-user@<Private-EC2-Private-IP>

設定 SSH Config 檔案(更方便)

編輯 ~/.ssh/config 檔案:

# Bastion Host
Host bastion
    HostName <Bastion-Public-IP>
    User ec2-user
    IdentityFile ~/.ssh/bastion-key.pem

# Private EC2
Host private-server
    HostName <Private-EC2-Private-IP>
    User ec2-user
    IdentityFile ~/.ssh/private-key.pem
    ProxyJump bastion

設定完成後,只需要執行:

ssh private-server

就可以直接連到 Private EC2 了!

為什麼需要堡壘主機?總結表格

為什麼需要堡壘主機無法直接從外部 SSH 連入,需要一個跳板
為什麼需要堡壘主機不想讓所有內部機器都暴露在網際網路上
為什麼需要堡壘主機只需要管理一個對外入口,而不是每台機器都開 SSH
為什麼需要堡壘主機可以集中記錄誰在什麼時候連入了哪些內部機器
為什麼需要堡壘主機許多企業安全政策要求使用跳板主機

堡壘主機的替代方案

AWS Systems Manager Session Manager

AWS 提供了一個更現代的解決方案:Session Manager

優點

  • 不需要 Bastion Host(省成本)
  • 不需要開 SSH port 22
  • 不需要 Public IP
  • 完整的連線記錄
  • 透過 IAM 權限管理

缺點

  • 需要在 EC2 上安裝 SSM Agent
  • 需要設定 IAM Role

使用方式

# 透過 Session Manager 連線
aws ssm start-session --target <EC2-Instance-ID>

比較:Bastion Host vs Session Manager

Bastion Host✅ 需要
Session Manager❌ 不需要
Bastion Host✅ 需要
Session Manager❌ 不需要
Bastion Host✅ 需要
Session Manager❌ 不需要
Bastion Host需自行設定
Session Manager✅ 內建完整記錄
Bastion Host較簡單
Session Manager需要學習 IAM
Bastion HostEC2 費用
Session Manager免費(CloudWatch 可能有費用)

常見問題 FAQ

Q1:Bastion Host 需要多大的機器規格?

:通常 t2.microt3.micro 就夠了,因為它只是轉發 SSH 連線,不需要執行其他服務。

Q2:可以多個人共用同一台 Bastion Host 嗎?

:可以!這正是 Bastion Host 的用途。每個人使用自己的 SSH Key 連入。

Q3:Bastion Host 會不會成為效能瓶頸?

:不會,因為 SSH 連線流量很小。即使有多人同時使用,也不會有問題。

Q4:如果 Bastion Host 故障了怎麼辦?

:最好的做法是:

  • 在多個 Availability Zone 部署 Bastion Host
  • 使用 Auto Scaling Group 確保高可用性
  • 或者使用 Session Manager 作為備案

Q5:NAT Gateway 和 Bastion Host 有什麼不同?

  • NAT Gateway:讓 Private Subnet 的機器可以「對外連線」(例如下載套件)
  • Bastion Host:讓你可以「連入」Private Subnet 的機器(SSH 管理)

兩者功能完全不同,通常都需要同時存在。

結語

堡壘主機是 AWS 架構中一個簡單但重要的概念。它的核心思想就是:在保持內部系統高度安全的前提下,提供一個受控的管理入口

理解堡壘主機不僅能幫助你建構更安全的 AWS 架構,也能讓你理解企業級系統中「縱深防禦(Defense in Depth)」的安全思維。

記住這個比喻:堡壘主機就像大樓的保全室,你必須先通過保全室,才能進入內部機房。這樣既保護了內部系統,也便於集中管理和監控。

隨著你的學習深入,你會發現 AWS 還提供了更多進階的解決方案(如 Session Manager、AWS Client VPN),但堡壘主機作為最基礎的概念,永遠值得你徹底理解。

祝你學習順利!🚀