本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用引導管道實作 Account Factory for Terraform (AFT)
由 Vinicius Elias (AWS) 和 Edgar Costa Filho (AWS) 建立
程式碼儲存庫: aft-bootstrap-pipeline | 環境:生產 | 技術:管理與治理;基礎設施 |
工作負載:開放原始碼 | AWS 服務:AWS CodeBuild;AWS CodeCommit;AWS CodePipeline;AWSControl Tower; AWS Organizations |
Summary
此模式提供從 管理帳戶部署 AWS Control Tower Account Factory for Terraform (AFT) 的簡單且安全方法 AWS Organizations。解決方案的核心是 AWS CloudFormation 範本,透過建立 Terraform 管道來自動化AFT組態,其結構結構可輕鬆適應初始部署或後續更新。
安全性和資料完整性是 的首要任務 AWS,因此 Terraform 狀態檔案是追蹤受管基礎設施和組態狀態的關鍵元件,可安全地存放在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中。此儲存貯體設定了數種安全措施,包括伺服器端加密和封鎖公開存取的政策,以協助確保您的 Terraform 狀態不受未經授權的存取和資料外洩。
管理帳戶會協調和監督整個環境,因此它是 中的重要資源 AWS Control Tower。此模式遵循 AWS 最佳實務,並確保部署程序不僅有效率,而且還符合安全和治理標準,以提供全方位、安全且有效率的方式AFT,以便在您的 AWS 環境中部署。
如需 的詳細資訊AFT,請參閱 AWS Control Tower 文件 。
先決條件和限制
先決條件
基本 AWS 多帳戶環境,至少具有下列帳戶:管理帳戶、Log Archive 帳戶、稽核帳戶,以及一個額外的 帳戶以進行AFT管理。
已建立 AWS Control Tower 的環境。管理帳戶應正確設定,因為 CloudFormation 範本會部署在其中。
AWS 管理帳戶中的必要許可。您需要足夠的許可來建立和管理資源,例如 S3 儲存貯體、 AWS Lambda 函數、 AWS Identity and Access Management (IAM) 角色和 AWS CodePipeline 專案。
熟悉 Terraform。了解 Terraform 的核心概念和工作流程很重要,因為部署涉及產生和管理 Terraform 組態。
限制
請注意您帳戶中AWS 的資源配額。部署可能會建立多個資源,而遇到服務配額可能會阻礙部署程序。
範本專為特定版本的 Terraform 和 而設計 AWS 服務。升級或變更版本可能需要修改範本。
產品版本
Terraform 1.5.7 版或更新版本
AFT 1.11.1 版或更新版本
架構
目標技術堆疊
AWS CloudFormation
AWS CodeBuild
AWS CodeCommit
AWS CodePipeline
Amazon EventBridge
IAM
AWS Lambda
Amazon S3
目標架構
下圖說明此模式討論的實作。
工作流程包含三個主要任務:建立資源、產生內容和執行管道。
建立 資源
CloudFormation 隨此模式提供的範本
儲存 AFT Terraform 引導程式碼的 CodeCommit 儲存庫
儲存與AFT實作相關聯的 Terraform 狀態檔案的 S3 儲存貯體
CodePipeline 管道
兩個 CodeBuild 專案來實作 Terraform 計劃,並在管道的不同階段套用命令
IAM CodeBuild 和 CodePipeline 服務的角色
儲存管道執行期成品的第二個 S3 儲存貯體
擷取
main
分支上 CodeCommit 儲存庫變更的 EventBridge 規則EventBridge 規則的另一個IAM角色
此外,如果您將 CloudFormation 範本中的 Generate AFT Files
參數設定為 true
,範本會建立這些其他資源來產生內容:
儲存產生內容並用作 CodeCommit 儲存庫來源的 S3 儲存貯體
Lambda 函數可處理指定的參數並產生適當的內容
執行 Lambda IAM函數的函數
部署範本時執行 Lambda 函數的 CloudFormation 自訂資源
產生內容
若要產生AFT引導檔案及其內容,解決方案會使用 Lambda 函數和 S3 儲存貯體。函數會在儲存貯體中建立資料夾,然後在資料夾內建立兩個檔案: main.tf
和 backend.tf
。函數也會處理提供的 CloudFormation 參數,並使用預先定義的程式碼填入這些檔案,取代個別的參數值。
若要檢視用來產生檔案的範本程式碼,請參閱解決方案的GitHub 儲存庫
main.tf
module "aft" { source = "github.com/aws-ia/terraform-aws-control_tower_account_factory?ref=<aft_version>" # Required variables ct_management_account_id = "<ct_management_account_id>" log_archive_account_id = "<log_archive_account_id>" audit_account_id = "<audit_account_id>" aft_management_account_id = "<aft_management_account_id>" ct_home_region = "<ct_home_region>" # Optional variables tf_backend_secondary_region = "<tf_backend_secondary_region>" aft_metrics_reporting = "<false|true>" # AFT Feature flags aft_feature_cloudtrail_data_events = "<false|true>" aft_feature_enterprise_support = "<false|true>" aft_feature_delete_default_vpcs_enabled = "<false|true>" # Terraform variables terraform_version = "<terraform_version>" terraform_distribution = "<terraform_distribution>" }
backend.tf
terraform { backend "s3" { region = "<aft-main-region>" bucket = "<s3-bucket-name>" key = "aft-setup.tfstate" } }
在儲存 CodeCommit 庫建立期間,如果您將 Generate AFT Files
參數設定為 true
,範本會使用 S3 儲存貯體搭配產生的內容作為main
分支的來源,以自動填入儲存庫。
執行管道
建立資源並設定引導檔案後,管道就會執行。第一階段 (來源 ) 從儲存庫的主分支擷取原始程式碼,第二階段 (建置 ) 會執行 Terraform 計劃命令,並產生要檢閱的結果。在第三個階段 (核准 ) 中,管道會等待手動動作核准或拒絕最後一個階段 (部署 )。在最後一個階段,管道會使用先前 Terraform apply
命令的結果作為輸入,來執行 Terraform plan
命令。最後,使用跨帳戶角色和管理帳戶中的許可來建立AFT管理帳戶中AFT的資源。
工具
AWS 服務
AWS CloudFormation 可協助您設定AWS資源、快速且一致地佈建資源,並在其整個生命週期內跨AWS帳戶和區域進行管理。
AWS CodeBuild 是一項完全受管建置服務,可協助您編譯原始程式碼、執行單位測試,並產生準備好部署的成品。
AWS CodeCommit 是一種版本控制服務,可協助您私下存放和管理 Git 儲存庫,而不需要管理您自己的來源控制系統。
AWS CodePipeline 可協助您快速建模和設定軟體版本的不同階段,並自動執行持續發行軟體變更所需的步驟。
AWS Lambda 是一種運算服務,可針對事件執行程式碼並自動管理運算資源,提供快速的方式,以建立現代化、無伺服器的應用程式進行生產。
AWS SDK for Python (Boto3)
是軟體開發套件,可協助您將 Python 應用程式、程式庫或指令碼與 AWS服務整合。
其他工具
程式碼儲存庫
此模式的程式碼可在 GitHub AFT引導管道儲存庫
如需官方AFT儲存庫,請參閱 中的 AWS Control Tower Account Factory for Terraform
最佳實務
當您AFT使用提供的 CloudFormation 範本進行部署時,建議您遵循最佳實務,以協助確保安全、高效且成功的實作。實作和操作 的重要準則和建議AFT包括以下內容。
徹底檢閱參數 :仔細檢閱並了解 CloudFormation 範本中的每個參數。準確的參數組態對於 的正確設定和運作至關重要AFT。
定期範本更新 :使用最新 AWS 功能和 Terraform 版本來保持範本的更新。定期更新可協助您利用新功能並維護安全性。
版本控制 :盡可能釘選AFT模組版本,並使用個別AFT部署進行測試。
範圍 :AFT僅用於部署基礎設施護欄和自訂。請勿使用它來部署您的應用程式。
內嵌和驗證:AFT管道需要內嵌和驗證的 Terraform 組態。在將組態推送至AFT儲存庫之前,先執行 lint、驗證和測試。
Terraform 模組 :建置可重複使用的 Terraform 程式碼做為模組,並一律指定 Terraform 和 AWS 提供者版本以符合組織的需求。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
準備 AWS Control Tower 環境。 | AWS Control Tower 在您的 AWS 環境中設定和配置,以確保 的集中管理和治理 AWS 帳戶。如需詳細資訊,請參閱 AWS Control Tower 文件中的入門 AWS Control Tower。 | 雲端管理員 |
啟動AFT管理帳戶。 | 使用 AWS Control Tower Account Factory 啟動新的 AWS 帳戶 作為您的AFT管理帳戶。如需詳細資訊,請參閱 AWS Control Tower 文件中的使用 AWS Service Catalog Account Factory 佈建帳戶。 | 雲端管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
啟動 CloudFormation 範本。 | 在此史詩中,您可以部署此解決方案隨附的 CloudFormation 範本,以在 AWS 管理帳戶中設定AFT引導管道。管道會在您在上一個史詩中設定的AFT管理帳戶中部署AFT解決方案。 步驟 1:開啟 AWS CloudFormation 主控台
步驟 2:建立新的堆疊
步驟 3:設定堆疊參數
步驟 4:決定檔案產生
步驟 5:填入 AWS Control Tower 和 AFT 帳戶詳細資訊
步驟 6:設定AFT選項
步驟 7:指定版本
步驟 8:檢閱並建立堆疊
步驟 9:監控堆疊建立
步驟 10:驗證部署
| 雲端管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
填入AFT引導儲存庫。 | (選用) 部署 CloudFormation 範本後,您可以在新建立的AFT引導儲存庫中填入或驗證內容,並測試管道是否已成功執行。 如果您將 步驟 1:填入儲存庫
步驟 2:認可並推送變更
| 雲端管理員 |
驗證AFT引導管道。 | 步驟 1:檢視管道
步驟 2:核准 Terraform 計劃結果
步驟 3:等待部署
步驟 4:檢查建立的資源
| 雲端管理員 |
故障診斷
問題 | 解決方案 |
---|---|
CloudFormation 範本中包含的自訂 Lambda 函數在部署期間失敗。 | 檢查 Lambda 函數的 Amazon CloudWatch 日誌以識別錯誤。日誌提供詳細資訊,有助於找出特定問題。確認 Lambda 函數具有必要的許可,以及環境變數已正確設定。 |
您遇到資源建立或管理失敗,原因在於許可不足。 | 檢閱連接至 Lambda 函數IAM的角色和政策 CodeBuild,以及與部署相關的其他服務。確認他們具有必要的許可。如果有許可問題,請調整IAM政策以授予必要的存取權。 |
您正在使用過時的 CloudFormation 範本版本搭配較新的 AWS 服務 或 Terraform 版本。 | 定期更新 CloudFormation 範本,使其與最新 AWS 和 Terraform 版本相容。檢查版本備註或文件是否有任何版本特定的變更或要求。 |
您可以在部署期間達到 AWS 服務 配額。 | 部署管道之前,請檢查資源 AWS 服務 配額,例如 S3 儲存貯體、IAM角色和 Lambda 函數。請求會視需要增加。如需詳細資訊,請參閱 AWS 網站上的AWS 服務 配額。 |
由於 CloudFormation 範本中的輸入參數不正確,您遇到錯誤。 | 仔細檢查所有輸入參數是否有錯字或不正確的值。確認資源識別符,例如帳戶IDs和區域名稱,是否準確。 |
相關資源
若要成功實作此模式,請檢閱下列資源。這些資源提供其他資訊和指引,這些資訊和指引對於AFT使用 設定和管理來說非常重要 AWS CloudFormation。
AWS 文件:
AWS Control Tower 使用者指南提供有關設定和管理 的詳細資訊 AWS Control Tower。
AWS CloudFormation 文件提供 CloudFormation 範本、堆疊和資源管理的洞見。
IAM 政策和最佳實務:
中的安全最佳實務IAM說明如何使用IAM角色和政策協助保護 AWS 資源。
上的 Terraform AWS:
Terraform AWS 提供者文件
提供有關將 Terraform 與 搭配使用的完整資訊 AWS。
AWS 服務 配額:
AWS 服務 配額提供有關如何檢視 AWS 服務 配額以及如何請求增加的資訊。