Skip to main content
雲端安全

什麼是 Infrastructure as Code?它如何運作?

Infrastructure as Code (IaC) 使用程式碼自動化基礎架構管理。它可確保一致性、減少錯誤,並加快部署速度,讓您的基礎架構更有效率。

作者 SentinelOne
什麼是 Infrastructure as Code?它如何運作?

您是剛接觸 Infrastructure to Code,還不確定該從何開始嗎?我們的指南將解析 Infrastructure as Code 的含義,並為您拆解關鍵的 IaC 工作流程與技術。如果您一直以手動方式設定基礎架構,且厭倦了一再重複重新設定,那麼您將會很享受了解 Infrastructure as Code 優勢的過程。

因此,我們將說明 Infrastructure as Code 的定義。我們也會帶您了解良好的 Infrastructure as code 範例,並提供入門起點。您也將了解為何 SentinelOne 非常適合用於 Infrastructure as Code 掃描與 Infrastructure as Code 安全性。您將對不同類型的 Infrastructure as Code 及其範本有基本概念。讓我們開始吧!

什麼是 Infrastructure as Code (IaC)?

Infrastructure as Code (IaC) 會以程式碼形式管理與佈建您的整體基礎架構,而不是使用手動流程來建置元件、管理及佈建它們。

以下說明其運作方式以及我們為何使用它:

  • 想像您正在用樂高積木建造一座城市。您必須拿起積木,一個接一個地搭建不同的結構。
  • 現在想像您有一個系統,可以接受任何像是「幫我建一座城市」這樣的指令,然後它最終會遵照您的命令,替您完成所有事情。
  • 不需要手動管理組態與設定。您只要把想要的內容寫進檔案中,Terraform 就能替您完成其餘工作。

這就是 Infrastructure as Code 在運算世界中的意義。Infrastructure as Code 可讓您即時追蹤變更,也支援版本控制。

Infrastructure as Code 的目的是為企業標準化基礎架構管理。它為現代雲端與 DevOps 環境中的軟體開發生命週期帶來速度、一致性與更高的效率。

Infrastructure as Code 的必要性

傳統的基礎架構設定與管理方法,包括手動設定伺服器、調整網路設定、安裝作業系統等等。  這種方法相當耗時。它也容易產生低效率問題,進而拖慢從專案時程到日常維護的各項工作。

以下說明 IaC 為何在現代 IT 環境中不可或缺:

1. 跨環境的一致性

您是否曾遇過開發環境與正式環境不同步的情況?這就是我們所說的「組態漂移」,也是手動設定常見的棘手問題。IaC 技術透過以程式碼定義基礎架構,確保可在所有環境中複製的一致性。

2. 更快的佈建

手動設定基礎架構需要時間與資源。  例如,假設一位熟練的技術人員正以傳統方式設定一台新伺服器。他們可能需要大約 4 到 6 小時才能讓一切完成並開始運作。這包括處理從伺服器佈建(無論是實體或虛擬)到安裝作業系統及設定網路組態的所有事項。

現在,將這個情境改為使用 Infrastructure as a Code (IaC)。有了 IaC,假設您的指令碼已準備妥當並經過測試,您可以在不到 10 分鐘內完成相同的設定。IaC 會自動化資源佈建,協助您快速設定、部署及擴展基礎架構。

3. 工作流程自動化

IaC 可無縫整合至持續整合/持續部署 (CI/CD) 管線,以提供自動化的基礎架構測試、部署與擴展。

假設某個軟體開發團隊的任務是升級某個 Web 應用程式的功能。每當開發人員提交一段新程式碼時,CI/CD 管線(持續整合/持續交付)便會自動啟動一連串動作:1) 建置應用程式,2) 執行測試,以及—若測試通過—將最新版本部署到測試或正式環境。

有了 IaC,這個特定流程也能自動因應基礎架構的重新設定。如果新的程式碼更新需要額外的處理資源,IaC 可以即時佈建額外伺服器或調整組態。這可在無需人工介入的情況下調整開發環境,減少停機時間與人為錯誤。

4. 成本效益

手動管理基礎架構可能成本高昂且耗時。例如,美國 DevOps 工程師的預估年薪為 $1,07,377。對於依賴手動流程進行基礎架構管理的組織而言,這些成本可能迅速累積。透過自動化,IaC 可降低營運成本,並讓團隊專注於更具策略性、價值導向的活動。

5. 組態的可重複使用性

傳統方法通常需要重複投入心力來設定相似的環境。IaC 透過允許相同程式碼套用於不同專案,提升可重複使用性。

IaC 中的宣告式與命令式方法

IaC 主要有兩種方法:宣告式與命令式方法。  雖然宣告式工具非常適合維持一致且合規的環境,但命令式方法則適用於需要複雜、詳細設定的情境。選擇正確的 IaC 方法可簡化您的部署流程、確保更高的穩定性,並大幅減少手動錯誤。

宣告式方法

在宣告式方法中,您只需指定最終組態應呈現的樣貌,而無需詳述達成它的步驟。接著,IaC 工具會判斷並執行達到指定組態所需的動作。

例如,想像您正在設定一個大型樂高專案。在宣告式方法中,您不必擔心每一塊積木要如何擺放。相反地,您只需描述最終模型應該長什麼樣子。IaC 工具會替您找出如何將一切組合起來。  透過這種方式,可以將基礎架構管理底層流程的複雜性抽象化。

它非常適合必須維持特定狀態的環境,例如以合規為重點的設定。假設您想確保基礎架構與預先定義的政策高度一致,那麼宣告式方法就很有用。

優點

  • 宣告式方法著重於期望結果而非流程,因此可簡化管理。
  • 由於工具會處理執行作業,因此可降低發生錯誤的可能性。
  • 它更容易維護與更新,因為變更是透過修改期望狀態來完成。

範例

使用 Terraform、AWS CloudFormation 或 Kubernetes YAML 檔案即屬於宣告式方法。這是因為使用者只需指定基礎架構的最終狀態,而無需說明達成該狀態的步驟。

例如,使用 Terraform 時,您會撰寫描述基礎架構的組態檔,而 Terraform 會隨著時間推進判斷需要執行哪些動作,才能達成您的組態檔所定義的狀態。

此外,在 Kubernetes YAML 的情境中,這些檔案會指定叢集及部署於其中的應用程式之期望狀態。它們是用來設定 Pod、服務及其他實體的資源定義。

同樣地,在 AWS 中,CloudFormation 可讓您使用 YAML 或 JSON 來定義您希望執行的 AWS 資源,以及它們應如何設定。您提供一個概述 AWS 環境的範本,而 CloudFormation 會依照指定內容負責佈建與管理這些資源。

命令式方法

命令式方法涉及透過詳細指定要執行的確切命令或步驟,來說明如何達成所需的基礎架構狀態。

它在需要特定且循序步驟才能正確完成設定的複雜部署中特別有效。

這種方法讓您能更精細地控制流程中的每個步驟,並適用於需要自訂與細緻控制的情境。

優點:

  • 命令式方法可對執行流程提供細緻的控制。
  • 對於需要特定且有順序步驟的複雜情境而言,此方法相當實用。
  • 對熟悉指令碼與命令列介面的使用者而言,這種方法可能更直觀。

範例:

像 Ansible 和用於組態管理的 shell 指令碼等工具,通常與基礎架構即程式碼的命令式方法相關。在 Ansible 中,您會撰寫 playbook,詳細說明系統應執行的步驟,例如安裝套件、寫入檔案或設定服務。這些 playbook 會依特定順序列出命令或工作,讓您能夠對部署流程進行細緻控制。

同樣地,當您建立用於設定系統的 shell 指令碼時,您是在撰寫所有必須執行之命令的順序,並指定其執行次序。例如,可以建立一個指令碼,以指定順序作為多個獨立命令來更新作業系統、安裝特定應用程式,以及變更系統中的檔案。

IaC 的關鍵元件

IaC 包含數種工具,例如版本控制、組態檔,以及協調流程工具。開發人員與 IT 團隊使用這些工具來自動化並精進部署流程。了解這些元件可讓您的設定保持一致,並提升開發人員效率。

讓我們來探索這些要素:

1. 版本控制

版本控制會彙整組態與對話所做變更的歷程記錄。此工具可協助開發人員了解隨時間推移所做的變更,進而改善協作。若發生錯誤組態或意外刪除,版本控制也能協助他們將組態回復到先前版本。

2. 組態檔

IaC 是以一組包含組態的檔案為基礎,其中描述了最終的基礎架構。這類檔案通常採用包含組態的格式,例如 JSON、YAML 或 HCL,並在其中建立範本,包含用於設定與管理資源的指令碼,包括伺服器、資料庫和網路。組態檔可作為開發人員與 IT 團隊的單一事實來源,並確保各環境之間的一致性。透過使用這些檔案,開發人員可以輕鬆複製其基礎架構設定,而無需在每次想要建置基礎架構時都手動進行組態設定。

3. 協調流程工具

Terraform 和 AWS CloudFormation 等協調流程工具可自動化部署流程的各個層面: 資源佈建、組態、合規、災難復原等等。開發人員可以使用 IaC 規格並以指令碼形式來設定基礎架構。這讓開發人員能定義更可靠的基礎架構設定並節省時間。

4. 佈建工具

Chef、Puppet 和 SaltStack 等佈建工具會實際建立並設定基礎架構資源。這些佈建工具可確保實體或虛擬基礎架構是依照佈建組態檔中提及的資源配置來設定。透過自動化此流程,開發人員可在多個環境中維持一致的組態。

5. 自動化測試與驗證

自動化測試也是 IaC 的一個面向,用於驗證基礎架構是否如預期運作。驗證包含 Testinfra 和 Serverspec,可協助進行測試,以檢查部署前後的基礎架構程式碼組態是否正確。這些工具有助於在問題影響正式環境中的專案之前,及早偵測潛在問題。

6. 持續整合/持續部署 (CI/CD) 管線

將 IaC 與 CI/CD 管線整合的價值,可從基礎架構的持續測試、部署與更新中看出。這種整合有助於確保變更經過測試並推送到正式環境,以減少系統離線的次數。此工具可加速回饋循環,並讓開發人員能以可靠的方式複製類似基礎架構環境的設定。

基礎架構即程式碼如何運作?

IaC 涉及撰寫程式碼,以定義伺服器、資料庫、網路及其他資源等基礎架構元件的期望狀態。以下說明 IaC 的運作方式:

  • 定義:基礎架構是使用程式碼來定義,通常採用描述性模型:一種結構化格式,可清楚概述所需資源(例如伺服器、網路和儲存體)以及其應如何設定。此程式碼會指定基礎架構的期望狀態,包括所需資源及其組態。
  • 自動化:自動化工具會執行程式碼來佈建及設定基礎架構。這可避免必須手動執行作業,並具有減少錯誤及提高部署速度的優勢。
  • 版本控制:基礎架構程式碼會儲存在 Git 等版本控制系統中,以便檢查所做的變更、在需要時回復到先前版本,以及進行協作。
  • 部署:基礎架構會系統化地在不同環境中實作,以確保設定的一致性。

IaC 的優勢

IaC 改變了組織管理與擴展其基礎架構的方式,從手動流程轉向自動化、以程式碼為基礎的工作流程。透過 IaC,團隊可以定義、佈建,並消除組態漂移等常見挑戰。它可確保團隊在維持對基礎架構控制的同時,快速回應市場需求。以下是企業可從 IaC 獲得的更多優勢:

1. 提升部署速度

IaC 讓基礎架構的佈建與部署變得容易,因此新環境上線所需時間更短。這有助於加快開發與測試週期,協助更快速地交付應用程式與更新。

2. 強化環境可重現性

基礎架構即程式碼可確保環境能夠輕鬆重現,並盡可能與開發、預備和正式等其他環境保持高度相似。這讓不同環境之間的升級與降級更容易,也減少應用程式在環境間移轉時的問題。

3. 基礎架構文件化

透過 IaC,基礎架構會記錄在程式碼本身中。這會自動提供最新的基礎架構設定文件。新加入的團隊成員也能輕鬆了解環境。

4. 促進 DevOps 實務

IaC 是 DevOps 中的重要一步,有助於建立 CI/CD 管線。這種整合有助於縮短基礎架構變更的測試與部署時間,使基礎架構管理能以最少的延遲與工作量快速擴展或變更組態。  讓基礎架構管理更敏捷。

5. 降低人為錯誤風險

使用 IaC 自動化基礎架構也具有將部署期間常見的人為錯誤機率降到最低的優勢。這可帶來更高的穩定性,並降低意外發生故障或中斷的可能性。

6. 災難復原規劃

使用 IaC 可讓組織制定有效且易於實施的災難復原計畫。透過將基礎架構組態套用於版本控制系統中,組織可縮短建立環境所需的時間。

7. 營運可擴展性

隨著組織成長,IaC 讓擴展營運變得更容易。相同的程式碼可用於擴充基礎架構,確保擴展作業能一致且有效率地完成,而無需人工介入。

IaC 的挑戰與限制

Infrastructure as Code 模型可自動化並簡化基礎架構管理,但也伴隨一些挑戰。對於不熟悉以程式碼為基礎的基礎架構管理的組織而言,這可能因以下原因而具有挑戰性:

#1. 初始設定的複雜性

它需要對整體結構以及 IaC 中使用的工具具備深入知識。首次設定可能相當複雜且耗費資源,尤其是對於剛接觸 IaC 的組織。為了讓導入流程更順暢,組織可以先從較小型、非關鍵的環境開始實作 IaC。

這將有助於您在不讓團隊負擔過重的情況下逐步熟悉。此外,還應建立標準化範本與模組,以簡化初始設定並確保整體基礎架構的一致性。

#2. 大型程式碼庫的管理

隨著基礎架構擴展,IaC 程式碼庫可能會變得龐大且難以管理。維護與更新這些大型程式碼庫需要嚴謹的版本控制實務,且可能導致變更追蹤上的困難。

SentinelOne 建議將組態拆分為較小且可重複使用的模組,以簡化維護。實作如 Git 這類強健的版本控制實務,可確保變更的追蹤與回復,同時與 CI/CD 管線整合。這將自動化測試與部署,以維持基礎架構的可擴展性與一致性。

#3. 偵錯與錯誤處理

IaC 錯誤可能難以解決,尤其是在涉及複雜配置或錯誤出現在自動化部署期間時。追查問題的根本原因通常相當複雜,且可能需要具備程式碼與基礎架構方面的知識。

#4. 工具與相容性問題

這是因為現有許多 IaC 工具,而其中一部分挑戰在於確保它們能夠協同運作。當組織同時採用地端與雲端 IaC 時,就可能出現這類問題。

#5. 安全疑慮

從 infrastructure as code 的定義可見,這類自動化也帶來了安全疑慮。已確認 IaC 指令碼同樣容易出現安全弱點,此外,組態錯誤還可能進一步導致「金鑰」或密碼外洩。

Infrastructure as Code 最佳實務

無論是透過版本控制管理程式碼、自動化部署以減少錯誤,還是確保設定安全且符合法規,IaC 都具備一整套策略工具。若不了解這些實務,您最終可能會產生不一致的組態,例如過度佈建、佈建不足以及版本差異等問題。請遵循這些最佳實務,以持續掌控您的開發環境。

#1. 版本控制與協作

理想情況下,您應將所有基礎架構程式碼儲存在版本控制系統中,例如 Git,以便追蹤變更。這可讓多位團隊成員在同一程式碼庫上協作,並在發生錯誤時協助進行回復。

#2. 自動化與測試

使用 Terratest 和 Kitchen-Terraform 等工具來自動化測試,確保組態在部署前能如預期運作。將 IaC 與 CI/CD 管線整合,以簡化測試、驗證與部署流程,在加快處理速度的同時降低錯誤。

#3. 模組化與可重複使用性

將您的 IaC 程式碼組織為模組化、可重複使用的元件,以利維護並確保跨環境的一致性。實作不可變基礎架構實務,也就是以替換而非修改伺服器的方式,有助於維持穩定且一致的基礎架構。

#4. 安全性與合規

定期掃描您的基礎架構程式碼中的 弱點 與錯誤組態,以便及早發現問題。使用 HashiCorp Vault 等工具安全地管理敏感資訊,避免將資訊納入版本控制。

#5. 監控與記錄變更

Prometheus、Grafana 和 ELK Stack 等工具可協助監控基礎架構健康狀態,並提供對任何已發生問題的洞察。這有助於快速解決問題,並維持您基礎架構的完整性。

#6. 效率與最佳化

透過適當調整部署規模並移除未使用的資源來最佳化您的基礎架構,這有助於控制成本。使用短暫性環境進行測試,以降低對長期資源的需求。

#7. 文件與治理

將基礎架構文件視為程式碼來管理,持續更新並與您的基礎架構程式碼一同儲存。這可確保文件始終保持最新且易於管理。此外,也可透過政策與檢查自動化治理,以維持 合規 並減少人工錯誤。

IaC 的使用案例

以下列出不同的 Infrastructure as Code 使用案例:

1. Web App 部署

您可以使用 IaC 簡化 Web App 部署。它涵蓋伺服器、資料庫、網路與可重複使用的範本。您可以為測試、開發與正式環境複製基礎架構,這有助於減少人為錯誤、確保更佳的一致性,並將部署風險降至最低。

2. 雲端設定

您可以使用 IaC 工具來定義運算能力並修正網路組態。您可以將最佳安全設定與儲存需求套用至您的組態檔。IaC 可消除手動設定所涉及的不確定性,並確保您妥善配置資源。您也可以在維持組織標準與合規的同時,隨著業務成長擴展營運。

3. 管理多雲部署

IaC 工具可讓管理多雲部署變得容易許多。您可以避免供應商綁定,並支援跨不同平台的一致組態。您可以採用由 Infrastructure as Code 工作流程驅動的多雲策略,以消除冗餘並確保可擴展性。這些工具也有助於最佳化成本,並滿足不斷變化且動態的企業需求。

4. CI/CD 管線

IaC 的另一個使用案例是自動化 CI/CD 管線並消除瓶頸。您可以加強與開發人員的協作,並在可鏡像正式環境的設定中測試程式碼,從而促進更快速的部署。因此,您最終可獲得更高品質的版本發行,並提升團隊效率。

5. 災難復原

IaC 支援災難復原規劃,並協助您在事件失敗期間快速且一致地回復變更。您可以回到先前狀態、自動化佈建,並使用預先定義的指令碼快速重建整個基礎架構。其中包括您的應用程式相依性與網路設定,並且也能運用自動化的力量來因應關鍵業務挑戰。

使用 SentinelOne 的 IaC 掃描保護您的雲端

SentinelOne Singularity™ Cloud Security 提供可協助保護您 IaC 環境的安全功能。您可以掃描常見的 IaC 範本,包括 CloudFormation、Terraform 和 Kubernetes,以識別並處理關鍵的 IaC 錯誤設定與弱點。

SentinelOne 的無代理 CNAPP 可直接整合至您的 CI/CD 管線,並且也具備 Snyk 整合功能。此平台可自動掃描程式碼提交,並在問題進入正式環境之前及早發現。

您可以執行無代理弱點管理與評估。SentinelOne 可掃描機密資訊,並防止 GitLab、GitHub 和 Bitbucket 等程式碼儲存庫中的憑證外洩。它可識別超過 750+ 種類型的機密資訊,並同時防止雲端憑證外洩。

SentinelOne 獨特的 Offensive Security Engine™ 可從攻擊者的 POV 識別弱點與潛在的利用路徑。它可協助您透過 Verified Paths™ 落實 shift-left security 與最佳 DevSecOps 實務。您也可使用 Graph Explorer 進行有效的資產清冊管理。

SentinelOne 提供 IaC 掃描功能,但它也提供執行階段保護,可在即時雲端環境中持續偵測並回應威脅。您可以防止 IaC 組態漂移,並協助符合 CIS、MITRE 和 NIST 等最佳安全標準與合規要求。SentinelOne 可協助您實作最小權限存取原則,並避免權限過度寬鬆的 IAM 角色。它可以強化權限並管理雲端權限。您可以使用其 1000+ 個開箱即用規則與自訂規則,並掃描儲存庫、容器登錄、映像與 IaC 範本。它也將協助您跨不同來源追蹤並關聯警示,並降低威脅的爆炸半徑與影響。

SentinelOne 也可執行容器與 Kubernetes 安全態勢管理,其防護能力超越 CSPM。您可以進行外部攻擊面管理,並取得完整的鑑識遙測資料。您也可獲得專家的事件回應協助,而 SentinelOne 的 CNAPP 包含其 CWPP,非常適合即時 AI 驅動的雲端工作負載防護。它支援容器、Kubernetes、虛擬機器、實體伺服器與無伺服器環境,也適用於公有、私有、混合與地端環境。

Product_Tours_Cloud-Native@.png

AI-powered cloud workload protection (CWPP) for servers, VMs, and containers, that detects and stops runtime threats in real time.

結論

IaC 管理並非一次性的工作,也不是一體適用的解決方案。您需要謹慎撰寫並部署您的基礎架構即程式碼。任何疏漏都可能導致整個基礎架構崩解,而手動審查變更也可能相當麻煩。因此,使用正確的 Infrastructure as Code 工具與技術是必要的。

如果您需要 Infrastructure as Code 管理方面的協助或任何建議,歡迎隨時聯絡 SentinelOne 團隊。我們很樂意提供協助。

Callout Background Image Gradient

See SentinelOne in Action

Discover how AI-powered cloud security can protect your organization in a one-on-one demo with a SentinelOne product expert.

常見問題

Infrastructure as code 可透過自動化基礎架構管理、確保各環境的一致性、加快部署速度,以及減少人工作業錯誤來強化 DevOps。它可與 CI/CD 管線整合,促進協作並加速軟體交付。

IaC 掃描 是指在部署前分析基礎架構程式碼中的弱點與錯誤設定,以確保雲端環境的安全與合規。它可在開發流程早期識別潛在風險,以防止安全性事件發生。

常見的 IaC 工具包括 Terraform、AWS CloudFormation、Ansible 和 Pulumi。這些工具透過將基礎架構定義為程式碼,協助自動化與管理基礎架構,從而實現跨環境的一致性與可擴充性。

關鍵功能包括支援多種雲端平台、強大的版本控制、自動化測試,以及易於與 CI/CD 管線整合。此外,還應具備強大的安全性與合規能力。

深入了解 雲端安全

Decorative background gradient

您的雲端安全——30 分鐘內完成全面評估。

與 SentinelOne 專家會面,評估您在多雲環境中的雲端安全態勢,找出雲端資產、錯誤設定、秘密掃描,並透過 Verified Exploit Paths™ 排定風險優先順序。
Dark dashboard UI with purple-highlighted nav, summary cards showing 149, 7, 78, 56, 1.2 h, and a status table with linked purple text