iT邦幫忙

1

☁️ 從 Security+ 開始:我用 ChatGPT 練習實作 IaC

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20251211/20155103ejLFZhnsRK.png

📚 起點:講義上的 SDN 跟 IaC,看得懂字卻記不住概念

在 Security+ 的筆記裡,Software-defined Network(SDN)跟 Infrastructure as Code(IaC)都只佔了幾頁:

  • SDN 被描述成「革命性的網路管理方式」、「集中化控制、分離控制平面與資料平面」SDN&iac
  • IaC 則被寫成「用程式碼管理基礎設施」、「具備冪等性、可版本控制、可稽核」SDN&iac

文字都懂,但我腦中沒有畫面,只記得幾個關鍵字:

「集中化控制」、「冪等性」、「程式碼管理」

於是我把這些零碎內容丟給 ChatGPT,開始了一連串「你說/ChatGPT 說」的對話。回頭看,整段過程可以拆成三條線:

  1. 搞懂 SDN 在真實世界長什麼樣子
  2. 把 IaC 從口號變成實作(Terraform + AWS)
  3. 釐清兩者的關係:誰是方法論、誰是技術能力

這也是本文接下來的結構。


🧠 我眼中的 SDN:從「網路設備」變成「可以被程式操控的平台」

一開始,我只把 SDN 當成「比較聰明的網路設備」。

但在對話裡,我慢慢把它換成另一個描述:

SDN 不是某一台盒子,而是「把網路拆成三個平面」的做法:資料平面、控制平面、應用平面。SDN&iac

簡單整理成我後來自己用的版本:

層級 在 SDN 的角色 我後來怎麼想像它
Data Plane 資料平面 真正轉封包的那一層 很多廉價但聽話的交換器
Control Plane 控制平面 負責「決定流量怎麼走」 一個會下指令的大腦(SDN 控制器)
Application Plane 應用平面 管理策略與應用邏輯 安全策略、流量優先權、隔離規則等應用

有了這個表,我開始能把 SDN 放進具體場景裡,而不是只背定義。

🏢 案例畫面:資料中心、雲端與校園網路

在 ChatGPT 的整理下,我腦中出現了幾個畫面:
SDN&iac

  • 企業資料中心:新增 VM 不再需要網管一台一台設定 VLAN、防火牆。控制器收到「這是 Web 伺服器」的需求,就幫你套好整套網路策略。
  • 雲端 VPC:AWS/Azure/GCP 背後其實都是 SDN 思維。你在畫面上新增 Subnet、Route Table,看起來像按按鈕,實際上是跟控制器溝通。SDN&iac
  • 校園網路自動隔離:一台筆電掃全網段,SDN 控制器偵測到,直接把它丟到隔離 VLAN,封鎖部分流量,網管沒空也能先止血。SDN&iac

這些畫面讓我第一次有了「SDN 真的在現場運作」的感覺。

⚠️ 另一面:集中化帶來的,不只有方便

但對話裡也提醒我,SDN 有幾個我原本沒想到的風險:
SDN&iac

  • 控制器可能變成單一失敗點:一旦它掛掉,整網路拿不到新策略。
  • 複雜度只是被「移位」:從實體盒子,轉移到控制器與程式碼。
  • 策略錯誤時,災難會「自動擴散」:一條錯誤 ACL、縮錯網段,可能一秒讓整個公司斷線。

我後來給自己的一句話是:

SDN 把「網路」變成一個平台,

方便之處也在平台,風險也集中在平台。


🏗️ IaC:不只是把 GUI 變 CLI,而是「描述狀態」的一套做事方式

講義上對 IaC 的描述,很快就可以背起來:

  • 透過程式碼管理基礎設施
  • 使用 YAML / JSON / HCL
  • 強調冪等性與版本控制SDN&iac

但真正讓我理解的是實際動手做。

🧪 我的小實驗:用 Terraform 在 AWS 生出一個迷你資料中心

我選 Terraform + AWS 當作 IaC 起手式,目標只有一個:

「用一個 main.tf 生出 VPC + Subnet + EC2,然後可以再用同一份程式碼把它刪掉。」

過程大致長這樣:
SDN&iac

  1. 安裝 Terraform / AWS CLI
    • Windows 上先遇到 Chocolatey 權限與 lock file 問題,最後改用系統管理員模式清 lock、重新安裝。
  2. 申請 AWS 帳號、建立 IAM 使用者與 Access Key
    • 意識到「Access Key 一旦外洩就會變成噩夢帳單」,所以刻意不把它寫進程式碼,只用 aws configure 存在本機憑證檔。
  3. 寫出第一個 main.tf
    • provider:指定 ap-northeast-1(東京)
    • aws_vpc10.0.0.0/16
    • aws_subnet10.0.1.0/24
    • aws_instance:一台 t2.micro EC2
  4. 體驗 terraform planterraform applyterraform destroy
    • 第一次看到「一段 HCL 文字變成真正的 VPC、Subnets、Instances」,感覺有點魔法。

也因為這個實驗,我第一次很具體地感受到:「IaC 管的是『資源狀態』,而不是流程步驟。
SDN&iac

🧾 IaC 與 SDN,放在一起看

我後來整理了一張自己用的對照表:
SDN&iac

面向 SDN IaC
主要目標 管理網路流量、路由、策略 管理整體基礎設施(VM、網路、儲存、服務)
操作層級 網路層 基礎設施層
典型工具 控制器、API、策略引擎 Terraform、Ansible 等
關注點 資料流如何在環境內移動(行為) 環境長什麼樣子(結構/狀態)
自動化特性 動態、事件導向(遇到壅塞/攻擊即時調整) 宣告式、版本化(描述最終狀態,工具幫你補齊)

一句話記:

SDN = 網路如何運作

IaC = 網路(與整個環境)怎麼被建立出來
SDN&iac

而 IaC 甚至可以拿來「操作 SDN」:用 Terraform 建出 VPC、Route Table、Security Group,本身就是對 SDN 能力的一種包裝。
SDN&iac


🧰 實作 IaC 的路:從安裝失敗、到 Git push 被 GitHub 退件

如果只看最後的結果,好像只是:

「成功在 AWS 建了一個 VPC + EC2,GitHub 上也有個 repo。」

但中間的小插曲,反而對我幫助更大。

⚙️ Terraform / AWS CLI 安裝:權限與 PATH 的第一課

一開始我用官網 exe 安裝 Terraform,沒有成功;

改用 Chocolatey,又遇到 lock file 及 lib-bad 無法寫入的錯誤。
SDN&iac

最後的解法其實很「工程師」:

  1. 用系統管理員模式打開 PowerShell。
  2. 手動刪除 Chocolatey 下面出錯的 lock 檔與舊的 terraform 目錄。
  3. 再重新執行 choco install terraform -y

這件事讓我慢慢習慣:

出錯時,不是重裝一遍就好,而是先分清楚:工具問題?權限問題?還是環境變數問題?

同樣地,AWS CLI 也因為 PATH 沒設好而一度無法使用,

我第一次開始認真檢查「執行檔實際裝在哪裡」、以及 Windows 的 PATH 到底長什麼樣。

🗂️ .terraform 與 tfstate:學會「不要把所有東西都丟進 Git」

另一個有趣的坑,是我第一次 git push 到 GitHub 的時候:

被一個 700 多 MB 的 terraform-provider-aws exe 擋下來。

原因很單純:

  • 我把 .terraform/providers/... 整個資料夾都 commit 進去了;
  • GitHub 對單一檔案有 100MB 限制;
  • 儘管我後來刪掉了檔案並再 commit,歷史裡仍然留下那個大檔。

最後的修正方式是:

  1. 將以下內容寫進 .gitignore
    • .terraform/
    • .tfstate
    • .tfstate.backup
    • crash.log
  2. 砍掉整個 .git 資料夾,重新 git init、建一顆乾淨的初始 commit,再 push 一次。SDN&iac

這一次,我不只解決「GitHub 檔案太大」的問題,也真正記住了:

.terraform:是 Terraform 幫我下載的 provider 產物,不是源碼。tfstate:可能含有敏感資訊(ID、設定),不適合放在公開 repo。

對我來說,這好像是 IaC 給我的第二堂課:

版本控制不是「全部一起丟進 Git」,而是知道哪些該被追蹤、哪些不該。


🔁 SDN × IaC:當「網路哲學」遇上「基礎設施程式化」

在整段對話裡,有一個觀點我很喜歡,也一直拿來提醒自己:

SDN 不是工具,是一種網路哲學;IaC 也不只是寫腳本,而是一種描述狀態的方法論。SDN&iac

換成更實務的語言,是三個問題:

  1. 我現在寫的程式,描述的是「結構(狀態)」還是「行為」?
  2. 我用自動化在簡化什麼?複雜度到底是消失,還是被轉移?SDN&iac
  3. 一旦「錯誤被自動化」,最壞的情況會長怎樣?

當我用 Terraform 建 VPC 時,實際上是在練習:

  • 把「這個環境要長什麼樣」寫清楚;
  • 接受自己永遠不會直接調整單台機器,而是改程式碼、再 apply;
  • 習慣看 plan 的 diff,再決定要不要動手。

而當我回頭看 SDN,就比較能理解:

  • 它關心的是「封包路徑」、「流量調度」、「政策如何落地」;
  • IaC 則可以幫 SDN 建出整個運作舞台(VPC / Subnet / Router / ACL)SDN&iac

兩者搭配起來,才會有那種「網管、DevOps、雲端架構」混在一起的新工作樣貌。


💬 我後來常用來問 ChatGPT 的幾種 Prompt

如果未來還要繼續往這條路走,我自己會保留幾種實用的問法:

  1. 請它幫我建模概念

    「幫我用對照表整理 SDN 和 IaC 的異同,重點放在『誰管行為、誰管狀態』,搭配兩個真實案例。」

  2. 請它協助設計練習路線

    「我想用 AWS + Terraform 練習 IaC,目標是 5 天內建出可上網的 Web Server 架構,請幫我規劃每天的具體任務與完成標準。」

  3. 請它檢查我寫的程式邏輯

    「這是我目前的 main.tf,請幫我檢查:哪一些資源適合拆成 module?哪一些設定若放到 production 環境會有安全風險?」

  4. 請它扮演『對立視角』

    「假設你不同意在這個小團隊導入 SDN + IaC,請從成本、組織能力、風險三個角度提出反對理由,並點出我可能忽略的條件。」

  5. 請它把考試用語翻回實務場景

    「Security+ 講義中對 SDN/IaC 的定義是這樣(貼原文),請幫我用一個中小企業的實際案例,把這些名詞連成一個完整故事。」


🧷 給未來自己的幾個備忘小結

  • SDN 不是某一個產品,而是「讓網路可被程式控制」的架構與哲學。
  • IaC 不是「少點幾下 UI」,而是把整個環境當成可以版本控制的狀態描述。
  • Terraform + AWS VPC 的小實驗,是一個不錯的起點:從一個 main.tf 生出、再刪掉整個世界。
  • 權限、PATH、.gitignore,這些看起來瑣碎的細節,其實就是 DevOps 的日常。
  • 每當想再多裝一個工具時,先問自己:「我是在累積架構思維,還是在堆疊指令表?」


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言