本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Terraform 部署和管理 AWS Control Tower 控制項
由 Iker Reina Fuente (AWS) 和 Ivan Girardi (AWS) 建立
環境:生產 | 技術:安全、身分、合規 CloudNative;基礎設施;管理和治理 | |
工作負載:開放原始碼 | AWS 服務:AWSControl Tower; AWS Organizations |
Summary
此模式說明如何使用 AWS Control Tower 控制項、 HashiCorp Terraform 和基礎設施作為程式碼 IaC),以實作和管理預防性、偵測性和主動安全控制項。控制項 (也稱為護欄 ) 是高階規則,可為您的整體 AWS Control Tower 環境提供持續的治理。例如,您可以使用控制項來要求AWS記錄您的帳戶,然後在發生特定安全相關事件時設定自動通知。
AWS Control Tower 可協助您實作預防性、偵測性和主動性控制,以管理 AWS 資源並監控多個AWS帳戶的合規性。每個控制項都會強制執行單一規則。在此模式中,您可以使用提供的 IaC 範本來指定要在環境中部署的控制項。
AWS Control Tower 控制項適用於整個組織單位 (OU),且控制項會影響 OU 中的每個AWS帳戶。因此,當使用者在您的登陸區域的任何帳戶中執行任何動作時,該動作會受到 OU 的控制。
實作 AWS Control Tower 控制項有助於為您的AWS登陸區域建立強大的安全基礎。透過使用此模式透過 Terraform 將控制項部署為 IaC,您可以標準化登陸區域中的控制項,並更有效率地部署和管理它們。
若要將 AWS Control Tower 控制項部署為 IaC ,您也可以使用AWS雲端開發套件 (AWS CDK) 而非 Terraform。如需詳細資訊,請參閱使用 和 部署和管理 AWS Control Tower AWS CDK 控制項AWS CloudFormation。
目標受眾
具有 AWS Control Tower、Terraform 和 AWSOrganizations 經驗的使用者建議使用此模式。
先決條件和限制
先決條件
在 AWS Organizations 和 AWS Control Tower 登陸區域中以組織形式管理的作用中AWS帳戶。如需指示,請參閱建立帳戶結構
(AWS Well-Architected Labs)。 管理帳戶中的 AWS Identity and Access Management (IAM) 角色,具有部署此模式的許可。如需必要許可和範例政策的詳細資訊,請參閱此模式的其他資訊區段中IAM角色的最低權限許可。
在管理帳戶中擔任IAM角色的許可。
使用識別碼 CT 套用服務控制政策 (SCP) 型控制。 CLOUDFORMATIONPR.1. SCP 必須啟用此功能才能部署主動控制。如需指示,請參閱不允許管理AWS CloudFormation 登錄檔 中的資源類型、模組和掛鉤。
Terraform CLI,已安裝
(Terraform 文件)。 Terraform AWS Provider,已設定
(Terraform 文件)。 Terraform 後端,已設定
(Terraform 文件)。
產品版本
AWS Control Tower 3.0 版或更新版本
Terraform 1.5 版或更新版本
Terraform AWS Provider 4.67 版或更新版本
架構
目標架構
本節提供此解決方案的高階概觀,以及範例程式碼建立的架構。下圖顯示部署在 OU 中各種帳戶的控制項。
AWS Control Tower 控制項會根據其行為及其指引進行分類。
控制行為有三種主要類型:
預防性控制旨在防止動作發生。這些會在 AWS Organizations 中使用服務控制政策 (SCPs) 實作。預防性控制的狀態為強制執行或未啟用 。所有 AWS 區域都支援預防性控制。
Detective 控制項旨在偵測特定事件何時發生,並在 中記錄動作 CloudTrail。這些是使用 AWS Config 規則 實作。偵測控制項的狀態為清除 、違規 或未啟用 。Detective 控制項僅適用於 AWS Control Tower 支援的 AWS 區域。
主動控制會佈建的掃描資源AWS CloudFormation ,並檢查它們是否符合您的公司政策和目標。不合規的資源將不會佈建。這些是使用AWS CloudFormation 勾子 實作的。主動控制的狀態為 PASS、 FAIL或 SKIP。
控制指南是建議的做法,說明如何將每個控制套用至您的 OUs。AWS Control Tower 提供三種類別的指引:強制性 、強烈建議 和選擇性 。控制項的指引與其行為無關。如需詳細資訊,請參閱控制行為和指引。
工具
AWS 服務
AWS CloudFormation 可協助您設定AWS資源、快速且一致地佈建資源,並在其整個生命週期內跨AWS帳戶和區域進行管理。
AWS Config 提供AWS帳戶中資源的詳細檢視,以及其設定方式。它可協助您識別資源彼此之間的關係,以及其組態如何隨時間而改變。
AWS Control Tower 可協助您設定和管理AWS多帳戶環境,並遵循規範最佳實務。
AWS Organizations 是一種帳戶管理服務,可協助您將多個AWS帳戶合併到您建立並集中管理的組織。
其他工具
HashiCorp Terraform
是一種開放原始碼基礎設施作為程式碼 IaC) 工具,可協助您使用程式碼來佈建和管理雲端基礎設施和資源。
程式碼儲存庫
此模式的程式碼可在 GitHub 使用 Terraform 儲存庫的部署和管理 AWS Control Tower 控制項
最佳實務
用於部署此解決方案IAM的角色應遵循最低權限 ( 文件) 的原則。IAM
遵循 AWS Control Tower 管理員的最佳實務 (AWS Control Tower 文件)。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
複製儲存庫。 | 在 bash shell 中,輸入下列命令。這會使用來自 的 Terraform 儲存庫複製部署和管理 AWS Control Tower 控制項
| DevOps 工程師 |
編輯 Terraform 後端組態檔案。 |
| DevOps 工程師,Terraform |
編輯 Terraform 提供者組態檔案。 |
| DevOps 工程師,Terraform |
編輯組態檔案。 |
| DevOps 工程師、一般 AWS、Terraform |
擔任 管理帳戶中IAM的角色。 | 在 管理帳戶中,擔任具有部署 Terraform 組態檔案許可IAM的角色。如需所需許可和範例政策的詳細資訊,請參閱其他資訊區段中IAM角色的最低權限許可。如需在 AWS 中擔任IAM角色的詳細資訊CLI,請參閱在 中使用IAM角色AWSCLI。 | DevOps 工程師,一般 AWS |
部署組態檔案。 |
| DevOps 工程師、一般 AWS、Terraform |
任務 | 描述 | 所需的技能 |
---|---|---|
執行銷毀命令。 | 輸入下列命令以移除此模式部署的資源。
| DevOps 工程師、一般 AWS、Terraform |
故障診斷
問題 | 解決方案 |
---|---|
| 您嘗試啟用的控制項已在目標 OU 中啟用。如果使用者透過 AWS Management Console、Control Tower 或 AWS Organizations 手動啟用AWS控制項,則可能會發生此錯誤。若要部署 Terraform 組態檔案,您可以使用下列任一選項。 選項 1:更新 Terraform 目前狀態檔案 您可以將資源匯入至 Terraform 目前狀態檔案。當您重新執行
選項 2:停用控制項 如果您在非生產環境中工作,您可以在主控台中停用控制項。在 Epics 區段中重複部署組態中的步驟以重新啟用它。生產環境不建議使用此方法,因為有一段時間會停用控制項。如果您想要在生產環境中使用此選項,您可以實作暫時控制,例如在 AWS Organizations SCP中暫時套用 。 |
相關資源
AWS 文件
關於控制項 (AWSControl Tower 文件)
控制項程式庫 (AWS Control Tower 文件)
使用 和 AWSCDK( 規範指南) 部署和管理 AWS Control Tower 控制項 AWS CloudFormation AWS
其他資源
其他資訊
variables.tfvars 檔案範例
以下是已更新 variables.tfvars 檔案的範例。
controls = [ { control_names = [ "AWS-GR_ENCRYPTED_VOLUMES", ... ], organizational_unit_ids = ["ou-1111-11111111", "ou-2222-22222222"...], }, { control_names = [ "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... ], organizational_unit_ids = ["ou-1111-11111111"...], }, ]
IAM角色的最低權限許可
此APG模式會要求您在 管理帳戶中擔任 IAM角色。最佳實務是擔任具有臨時許可的角色,並根據最低權限原則限制許可。下列範例政策允許啟用或停用 AWS Control Tower 控制項所需的最低動作。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "controltower:EnableControl", "controltower:DisableControl", "controltower:GetControlOperation", "controltower:ListEnabledControls", "organizations:AttachPolicy", "organizations:CreatePolicy", "organizations:DeletePolicy", "organizations:DescribeOrganization", "organizations:DetachPolicy", "organizations:ListAccounts", "organizations:ListAWSServiceAccessForOrganization", "organizations:ListChildren", "organizations:ListOrganizationalUnitsForParent", "organizations:ListParents", "organizations:ListPoliciesForTarget", "organizations:ListRoots", "organizations:UpdatePolicy" ], "Resource": "*" } ] }