【網路安全】VPC Network 基礎安全防護與操作設定

在 Google Cloud Platform (簡稱 GCP) 的世界中,Virtual Private Cloud(簡稱 VPC)為使用者提供了全球性、可擴展且靈活的虛擬私有網絡,在 GCP 中是一項非常重要的基礎服務,它能夠讓使用者部署像是 Google Compute EngineGoogle Kubernetes EngineGoogle App Engine 等 GCP 服務到雲端。提醒您,越複雜的架構到後期更會無法輕易地去進行變動,因此會建議使用者應在一開始時就對 VPC Network 的設計進行規劃。本篇文章我們將會實作 Custom VPC Network 與 Firewall 建立。

在 Google Cloud 中使用安全性較高的 VPC

雖然在 GCP 中已經有預設的 VPC 與 Firewalls 可以用來進行資源的部署,但其實這不是最正確的做法。我們會建議您使用 Custom 模式的 VPC Network,特別是在正式環境之中。此外,根據 GCP 官方給出的 Best Practices,當您建立了自己的網路後,也應該刪除 GCP 預設的網路。在以下的情況中您可以考慮使用 Custom VPC  [1]:

  1. 不需要每個 Region 中都有一個自動創建的子網段 (Subnet)。
  2. 避免因為衝突而干擾到您整體的網絡規劃 (像是新 Region 推出時其自動創建的新網段與既有的網段 IP 有重疊)。
  3. 需要完全控制在 VPC Network 中所創建的子網段,包括其區域與 IP 範圍。
  4. 未來有計劃要使用 VPC Network Peering 或 Cloud VPN 等服務來連接不同的 VPC 網絡。(Auto 模式下的 VPC Network 其子網段具有相同的 IP 地址,會產生衝突)。
  5. 您需要擁有 IPv6 範圍的子網段。

VPC 基礎操作

接下來將開始一個涵蓋了 Custom VPC Network 與 Firewall 建立的範例。在開始前有一點需要向您提醒,如果您使用非 Free Tier 的 GCP 帳號做測試,以 1 個小時的時間來計算大約需要花費 USD 1.04,主要的費用由 Compute Engine 的機器類型、使用資源 (CPU、Memory) 所產生,詳情還請參考 GCP Pricing Calculator [2]。

一、GCP 上操作所需的 IAM 權限

使用者需要先在專案層級 (Project Level) 中的 IAM 內擁有 2 個由 GCP 所事先定義好的 Predefined Role:

  • Compute Network Admin」 [3] 這個 Role 能授予使用者具備建立、修改和刪除網絡相關資源的權限,但只能讓您對 Firewalls 進行讀取,並不包含其餘的操作,因此還需與下述第 2 個 Role 搭配使用。
  • Compute Security Admin」 [4] 這個 Role 能夠讓使用者擁有對 Firewalls 進行操作的所有權限 (像是建立、修改和刪除)。

二、實作步驟

2-1 建立 Custom 模式的 VPC Network

當您進入到 VPC networks 的頁面後應該可以發現 GCP 已經幫您自動建立了一個模式為 Auto 的網路,但我們將嘗試手動後續範例所需要的 Custom VPC。

  1. 首先您需要進入 VPC 的 Console,並點擊上方「CREATE VPC NETWORK」的按鈕來開始建立 Custom VPC [5]。
圖 2-1:VPC Network 首頁
icon/enlarge

b. 請於 Name 的欄位為您的 Custom VPC 指定一個名字,本範例將以 「demo-custom-vpc-network」做為例子。

c. 您可以依照自身的需求,決定在 VPC network ULA internal IPv6 range 的區塊中是否要啟用 IPv6 的 IP 地址,在這個範例中並不會使用到 IPv6,因此可以使用「Disabled」的選項即可。

d. 在 Subnet creation mode 的區塊中選擇使用「Custom」的選項,接下請參考步驟 e 來繼續建立您的 Subnet。

圖 2-2:Subnet 模式設定
icon/enlarge

e. 請在 Name 的欄位為 Subnet 指定一個名字並選擇要建立在哪個 Region (每個 Region 可以有一個或多個的 Subnets),本範例中將命名為「demo-custom-vpc-network-subnet1」,並把 Region 設定為「asia-east1」。在 IPv4 range 的欄位,則是需填寫一個未與其他 Subnets 衝突的網段,本範例以 10.100.0.0/24 範例。其他地方您可以先使用預設的配置即可,請記得點擊「DONE」的按鈕來儲存。

圖 2-3:建立自己的子網段
icon/enlarge

f. 在下方 Firewall rules 的區塊, GCP 已經提供一些較為常見的防火牆規則 (像是 ICMP、SSH、RDP) 以供快速設定,但因為後續會有 Firewall 的建立說明,這裡就先不做勾選。

g. 其他地方的設定維持預設即可,請點擊「CREATE」的按鈕來完成此次 Custom VPC 的建立 。

2-2 建立用來測試的 VM 

  1. 在這一章節中,將使用 Google Compute Engine [6] (後簡稱為 GCE) 這個 GCP 服務來測試 Firewall 的效果,因此先建立一台 VM [7] 於剛剛新增完成的 Custom VPC 內。請進入 GCE 的 Console 內,並請點選上方「CREATE INSTANCE」的按鈕。(請注意,此步驟需要您的 IAM 中有 Compute Admin 此 Predefined Role)
  2. 請於 Name 的欄位為您的 VM 指定一個名字,本範例將以「instance-1」做為例子。
  3. 將 Region 的欄位調整成「asia-east1」,接著到設定最下方展開 Advanced options 的下拉式選單,在 Networking > Network interfaces 的部分,將 Network 更改成 Custom VPC「demo-custom-vpc-network」,此時 Subnetwork 會自動替換為「demo-custom-vpc-network-subnet1」,點擊「DONE」的按鈕來完成 Network 部分的設定。
圖 2-4:建立一台 VM
icon/enlarge

d. 點擊「CREATE」的按鈕來完成 VM 的建立。

e. 當您點擊右側「SSH」的按鈕後,您應該會發現無法順利連進去剛剛建好的 VM,因為目前這個 VPC 中並沒有任何 Firewalls 有開放 SSH 連線所需的 22 Port。

圖 2-5:VM SSH 連線失敗
icon/enlarge

2-3 建立專屬的 Firewall

進入到 Firewall 的頁面後,可以發現 GCP 已經自動產生了 6 條以 default 名稱為開頭的防火牆規則,但我們將手動為已建立完的 Custom VPC 添加對應的 22 Port 規則。

  1. 重新回到 VPC 的 Console,並點擊左側 Firewall 的選單,接著點擊上方「CREATE FIREWALL RULE」的按鈕 [8]。
  2. 將此 Firewall 命名為「demo-custom-vpc-network-allow-22」,並將 Network 的欄位更改成稍早建立的 Custom VPC「demo-custom-vpc-network」。Priority 是用於決定此 Firewall 的優先程度,數字越小會越優先被判斷。
圖 2-6:Firewall 名稱與 Network 設定
icon/enlarge

c. 您可以選擇此 Firewall 的類型(Ingress / Egress)和允許的動作(Allow / Deny),由於此範例是想要通過 22 Port 順利連進去 VM,因此還請分別選擇 Ingress 及 Allow 的選項。

圖 2-7:Firewall 類型與動作
icon/enlarge

d. 在下方 Targets 的部分,請選擇「All instances in the network」的選項 (在設定上更為嚴謹的做法是為 VM 添加不同的 Network tags,這樣您就可以針對不同的 VM 利用「Specified target tags」的選項去做防火牆的控制)。

圖 2-8:Firewall 設定目標對象
icon/enlarge

e. 在 Source IPv4 ranges 的欄位需決定那些網段可以透過此 Firewall 來連進您的 VM 中,舉例來說像是您的個人 / 企業 IP 位址。本範例中將以 "35.74.166.229" 此 IP 來做示範,還請記得更換為您自身的 IP。

圖 2-9:設定允許的 IP 位址
icon/enlarge

f. 最後則是決定哪些 Port 要被開放使用,此範例因為要使用 SSH,您需要先將「TCP」做勾選的動作,並在下方填入「22」。到這裡為止 Firewall 的設定就已經完成了,還請記得按「CREATE」來完成操作。

圖 2-10:指定使用的 Protocols 與 Ports
icon/enlarge

g. 為了測試 Firewall 是否建立成功,請再回到 GCE 的 Console,點擊相同的「SSH」按鈕,此時應該已經可以順利連進去 VM 了,如果仍然是連線失敗的狀態,還請檢查上述步驟是否有設定錯誤的情況。

圖 2-11:VM SSH 連線成功
icon/enlarge

結論

在進行任何部署之前,請先替您的 VPC 網絡設計規劃仔細地考慮,VPC 的配置可能會對其路由、規模和安全性產生重大的影響。雖然使用預設的 VPC Networks 與 Firewall 是很方便又快速,但其實這是非常不安全的方式,建議還是事先規劃好相關網路的架構,採用客製化的做法,也利於自己日後能較方便的去維護。如果想了解更多與 VPC Network 或是 Firewall 的介紹,還請參考官方文件 [9,10],或是您也可以瀏覽官方針對 VPC 所提出的最佳建議(Best Practices)  [11]。

撰文者:Oaklynn Lin, Cloud Support Engineer

協助客戶調查、解決有關雲端環境上的疑難雜症,並負責 MSP 客戶專案環境的代管。

參考資料

[1] Considerations for auto mode VPC networks

https://cloud.google.com/vpc/docs/vpc#auto-mode-considerations

[2] Google Cloud Pricing Calculator

https://cloud.google.com/products/calculator/#id=97db5e22-dbc0-4387-88c9-6270b956f60f

[3] Compute Network Admin

https://cloud.google.com/iam/docs/understanding-roles#compute.networkAdmin

[4] Compute Security Admin

https://cloud.google.com/iam/docs/understanding-roles#compute.securityAdmin

[5] Create a custom mode VPC network with only IPv4 subnets

https://cloud.google.com/vpc/docs/create-modify-vpc-networks#create-custom-network

[6] Compute Engine Overview

https://cloud.google.com/compute

[7] Create a VM instance from an image

https://cloud.google.com/compute/docs/instances/create-start-instance#startinginstancewithimage

[8] Create VPC firewall rules

https://cloud.google.com/vpc/docs/using-firewalls#creating_firewall_rules

[9] VPC networks

https://cloud.google.com/vpc/docs/vpc

[10] VPC firewall rules

https://cloud.google.com/vpc/docs/firewalls

[11] Best practice and reference architectures for VPC design

https://cloud.google.com/architecture/best-practices-vpc-design

訂閱 CloudMile 電子報

所有 CloudMile 最新消息、產品動態、活動資訊和特別優惠,立即掌握。