後端最佳做法 - AWS 方案指引

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

後端最佳做法

使用適當的遠端後端儲存狀態檔案對於啟用協同作業、透過鎖定確保狀態檔案完整性、提供可靠的備份和復原、與 CI/CD 工作流程整合,以及利用 HCP Terraform 等受管理服務提供的進階安全性、控管和管理功能至關重要。

地形支持各種後端類型,例如 Kubernetes, HashiCorp 領事和 HTTP。但是,本指南著重於 Amazon S3,這是大多數 AWS 使用者的最佳後端解決方案。

作為提供高耐久性和可用性的全受管物件儲存服務,Amazon S3 提供安全、可擴展且低成本的後端,用於管理 Terraform 狀態。 AWS Amazon S3 的全球足跡和彈性超過了大多數團隊透過自我管理狀態儲存所能達到的目標。此外,Amazon S3 與 AWS 存取控制、加密選項、版本控制功能和其他服務原生整合,讓 Amazon S3 成為方便的後端選擇。

本指南不提供其他解決方案 (例如 Kubernetes 或 Consul) 的後端指引,因為主要目標對象是客戶。 AWS 對於完全屬於中的團隊而言 AWS 雲端,Amazon S3 通常是 Kubernetes 或 HashiCorp Consul 叢集的理想選擇。Amazon S3 狀態儲存的簡易性、彈性和緊密 AWS 整合可為遵循 AWS 最佳實務的大多數使用者提供最佳基礎。團隊可以利用 AWS 服務的耐久性、備份保護和可用性,保持遠端 Terraform 狀態的高度彈性。

遵循本節中的後端建議將導致更多協作的 Terraform 代碼庫,同時限制錯誤或未經授權修改的影響。透過實作架構良好的遠端後端,團隊可以最佳化 Terraform 工作流程。

使用 Amazon S3 進行遠端儲存

在 Amazon S3 中遠端存放 Terraform 狀態,並使用 Amazon DynamoDB 實作狀態鎖定和一致性檢查,可提供相較於本機檔案儲存的主要優點。遠端狀態支援團隊協同合作、變更追蹤、備份保護和遠端鎖定,以提高安全性。

將 Amazon S3 與 S3 標準儲存類別 (預設) 搭配使用,而不是暫時的本機儲存或自我管理解決方案,可提供 99.999999999% 的耐久性和 99.99% 的可用性保護,以防止意外狀態資料遺失。 AWS 受管服務 (例如 Amazon S3 和 DynamoDB) 提供的服務層級協定 (SLA) 超出大多數組織自行管理儲存時所能達到的效果。依靠這些保護來保持遠端後端的可訪問性。

啟用遠端狀態鎖定

DynamoDB 鎖定會限制狀態存取,以防止並行寫入作業。這樣可以防止多個使用者同時修改,並減少錯誤。

具有狀態鎖定的後端配置示例:

terraform { backend "s3" { bucket = "myorg-terraform-states" key = "myapp/production/tfstate" region = "us-east-1" dynamodb_table = "TerraformStateLocking" } }

啟用版本控制和自動備份

如需額外的防護功能,請 AWS Backup 在 Amazon S3 後端上使用啟用自動版本控制備份。每當進行變更時,版本控制都會保留狀態的所有先前版本。它還可讓您在需要時還原先前的工作狀態快照,以復原不必要的變更或從事故中復原。

視需要還原先前的版本

版本化的 Amazon S3 狀態儲存貯體可透過還原先前已知的良好狀態快照,輕鬆還原變更。這有助於防止意外變更,並提供額外的備份功能。

使用醫護機構地形

HCP Terraform 提供完全受控的後端替代方案,可讓您設定自己的狀態儲存體。HCP Terraform 會自動處理安全的狀態和加密儲存,同時解鎖其他功能。

當您使用 HCP Terraform 時,默認情況下會遠程存儲狀態,從而使整個組織的狀態共享和鎖定。詳細的原則控制可協助您限制狀態存取和變更。

其他功能包括版本控制整合、原則護欄、工作流程自動化、變數管理,以及與 SAML 的單一登入整合。您也可以使用 Sentinel 原則做為程式碼來實作治理控制。

雖然 HCP Terraform 需要使用軟體即服務 (SaaS) 平台,但對於許多團隊而言,安全性、存取控制、自動化政策檢查和協作功能方面的好處,使其成為使用 Amazon S3 或 DynamoDB 自我管理狀態儲存的最佳選擇。

輕鬆地與服務(例如 GitHub 和次要 GitLab 配置)集成也吸引了完全採用雲和 SaaS 工具的用戶,以實現更好的團隊工作流程。

促進團隊協作

使用遠端後端在 Terraform 團隊的所有成員之間共用狀態資料。這有助於協同合作,因為它使整個團隊可以看到基礎結構變化。共用後端協定與狀態歷程記錄透明度相結合,可簡化內部變更 所有基礎架構變更都會透過既定的管道進行,從而提高整個企業的業務敏捷性。

透過使用改善責任 AWS CloudTrail

AWS CloudTrail 與 Amazon S3 儲存貯體整合,以擷取對狀態儲存貯體發出的 API 呼叫。過濾要跟踪PutObjectCloudTrail 事件DeleteObject,及其他相關呼叫。

CloudTrail 記錄會顯示每個 API 呼叫狀態變更的主體 AWS 識別。使用者的身分可以與機器帳戶或與後端儲存區互動的團隊成員進行比對。

結合 CloudTrail 日誌與 Amazon S3 狀態版本控制,將基礎設施變更與套用它們的主體聯繫起來。透過分析多個修訂,您可以將任何更新歸因於機器帳戶或負責的專案團隊成員。

如果發生意外或破壞性變更,狀態版本控制會提供復原功能。 CloudTrail 追蹤使用者的變更,以便您討論預防性的改進。

我們也建議您強制執行 IAM 許可,以限制狀態值區存取權限。整體而言,S3 版本控制和 CloudTrail 監控支援跨基礎設施變更的稽核 團隊在 Terraform 狀態歷史記錄中獲得更高的責任、透明度和審核能力。

分隔每個環境的後端

針對每個應用程式環境使用不同的 Terraform 後端。獨立後端可隔離開發、測試和生產之間的狀態。

減少影響範圍

隔離狀態有助於確保較低環境中的變更不會影響生產基礎架構。在開發和測試環境中的事故或實驗的影響有限。

限制生產存取

將生產狀態後端的權限鎖定為大多數使用者的唯讀存取權。限制可以將生產基礎架構修改為 CI/CD 管線並破壞玻璃角色的人員。

簡化存取控制

在後端層級管理權限可簡化環境之間的存取控制。針對每個應用程式和環境使用不同的 S3 儲存貯體,意味著可以在整個後端儲存貯體授與廣泛的讀取或寫入許可。

避免共用工作區

雖然您可以使用 Terraform 工作區來分隔環境之間的狀態,但不同的後端提供更強的隔離能力。如果您有共用工作區,事故仍可能影響多個環境。

保持環境後端完全隔離,可將任何單一故障或漏洞的影響降到最低。獨立的後端也會將存取控制與環境的敏感度等級保持一致。例如,您可以為生產環境提供寫入保護,並為開發和測試環境提供更廣泛的存取權限。

主動監控遠端狀態活動

持續監控遠端狀態活動對於及早偵測潛在問題至關重要。尋找異常的解鎖、變更或存取嘗試。

獲取有關可疑解鎖的警報

大多數狀態變更應該透過 CI/CD 管線執行。如果狀態解鎖直接通過開發人員工作站發生,則生成警報,這可能發出未經授權或未經測試的更改

監控存取嘗試

狀態存儲桶上的身份驗證失敗可能表示偵察活動。請注意,如果多個帳戶嘗試訪問狀態,或出現異常的 IP 地址,這表明憑據洩露。