本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 和 AWS CDK CloudFormation 部署和管理 AWS Control Tower 控制項
由 Iker Reina Fuente (AWS) 和 Ivan Girardi (AWS) 建立
Summary
此模式說明如何使用 AWS CloudFormation 和 AWS Cloud Development Kit (AWS CDK) ,以程式碼形式 (IaC) 形式實作和管理預防性、偵測性和主動性 AWS Control Tower 控制。控制項 (也稱為護欄) 是一種高階規則,可為您的整體 AWS Control Tower 環境提供持續的控管。例如,您可以使用控制項來要求記錄您的 , AWS 帳戶 然後在發生特定安全相關事件時設定自動通知。
AWS Control Tower 可協助您實作預防性、偵測性和主動性的控制,以管理 資源並監控多個 AWS 資源的合規性 AWS 帳戶。每個控制項都會強制執行單一規則。在此模式中,您可以使用提供的 IaC 範本來指定要在環境中部署的控制項。
AWS Control Tower 控制項適用於整個組織單位 (OU),而控制項會影響 OU AWS 帳戶 中的每個單位。因此,當使用者在您登陸區域的任何帳戶中執行任何動作時,該動作會受到 OU 的控制。
實作 AWS Control Tower 控制項有助於為您的 AWS 登陸區域建立強大的安全基礎。透過使用此模式透過 CloudFormation 將控制項部署為 IaC AWS CDK,您可以標準化登陸區域中的控制項,並更有效率地部署和管理它們。此解決方案使用 cdk_nag
若要將 AWS Control Tower 控制項部署為 IaC,您也可以使用 HashiCorp Terraform 而非 AWS CDK。如需詳細資訊,請參閱使用 Terraform 部署和管理 AWS Control Tower 控制項。
目標對象
具有 AWS Control Tower、CloudFormation AWS CDK和 經驗的使用者建議使用此模式 AWS Organizations。
先決條件和限制
先決條件
以 AWS Organizations 和 AWS Control Tower 登陸區域中的組織身分進行主動 AWS 帳戶 管理。如需說明,請參閱 AWS Control Tower 文件中的入門。
節點套件管理員 (npm),已安裝並設定
AWS CDK。 的先決條件 AWS CDK。
部署帳戶中擔任現有 AWS Identity and Access Management (IAM) 角色的許可。
在可用於引導的組織管理帳戶中擔任 IAM 角色的許可 AWS CDK。角色必須具有修改和部署 CloudFormation 資源的許可。如需詳細資訊,請參閱 AWS CDK 文件中的引導。
在組織的管理帳戶中建立 IAM 角色和政策的許可。如需詳細資訊,請參閱 IAM 文件中的存取 IAM 資源所需的許可。
使用識別碼 CT.CLOUDFORMATION.PR.1 套用服務控制政策 (SCP) 型控制。必須啟用此 SCP 才能部署主動控制。如需指示,請參閱不允許管理 AWS CloudFormation 登錄檔中的資源類型、模組和掛鉤。
限制
產品版本
AWS Control Tower 3.2 版或更新版本
Python 3.9 版或更新版本
npm 8.9.0 版或更新版本
架構
本節提供此解決方案的高階概觀,以及範例程式碼所建立的架構。下圖顯示部署在 OU 中各種帳戶的控制項。

AWS Control Tower 控制項會根據其行為及其指引進行分類。
控制行為有三種主要類型:
預防性控制旨在防止動作發生。這些是使用 中的服務控制政策 SCPs) 或資源控制政策 RCPs) 實作 AWS Organizations。預防性控制的狀態為強制執行或未啟用。所有 都支援預防性控制 AWS 區域。
Detective 控制項旨在偵測發生的特定事件,並記錄動作 AWS CloudTrail。這些是使用 AWS Config 規則實作的。偵測性控制項的狀態為清楚、違規或未啟用。Detective 控制項僅適用於 AWS 區域 支援的控制項 AWS Control Tower。
主動控制 佈建的掃描資源 AWS CloudFormation ,並檢查它們是否符合您的公司政策和目標。不會佈建不合規的資源。這些會使用AWS CloudFormation 勾點實作。主動控制的狀態為 PASS、FAIL 或 SKIP。
控制指導是指如何將每個控制套用至 OUs的建議實務。 AWS Control Tower 提供三種類型的指導:強制性、強烈建議和選擇性。控制項的指引與其行為無關。如需詳細資訊,請參閱控制行為和指導。
工具
AWS 服務
AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端 基礎設施。AWS CDK Toolkit 是與您的 AWS CDK 應用程式互動的主要工具。
AWS CloudFormation 可協助您設定 AWS 資源、快速且一致地佈建資源,以及在整個 AWS 帳戶 和 生命週期中管理資源 AWS 區域。
AWS Config 提供 中資源的詳細檢視 AWS 帳戶 及其設定方式。它可協助您識別資源彼此的關係,以及其組態如何隨時間變化。
AWS Control Tower 可協助您設定和管理 AWS 多帳戶環境,並遵循規範最佳實務。
AWS Organizations 是一種帳戶管理服務,可協助您將多個 合併 AWS 帳戶 到您建立並集中管理的組織。
其他工具
程式碼儲存庫
此模式的程式碼可在使用 儲存庫的 GitHub 部署控制項中使用。 AWS Control TowerAWS CDK
最佳實務
遵循最低權限原則 (IAM 文件)。此模式中提供的範例 IAM 政策和信任政策包含所需的最低許可,而且在管理帳戶中建立的 AWS CDK 堆疊會受到這些許可的限制。
遵循AWS Control Tower 管理員的最佳實務 (AWS Control Tower 文件)。
遵循使用 (文件) 開發和部署雲端基礎設施的最佳實務 AWS CDK。AWS CDK
啟動時 AWS CDK,自訂引導範本以定義政策和信任的帳戶,這些帳戶應該能夠讀取和寫入管理帳戶中的任何資源。如需詳細資訊,請參閱自訂引導。
使用程式碼分析工具,例如 cfn_nag
,掃描產生的 CloudFormation 範本。cfn-nag 工具會在 CloudFormation 範本中尋找可能表示基礎設施不安全的模式。您也可以使用 CloudFormation-include 模組,使用 cdk-nag 來檢查 CloudFormation 範本。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
在管理帳戶中建立 IAM 角色。 |
| DevOps 工程師,一般 AWS |
引導 AWS CDK。 |
| DevOps 工程師、一般 AWS、Python |
複製儲存庫。 | 在 bash shell 中,輸入下列命令。這會從 GitHub 使用儲存庫複製部署 AWS Control Tower 控制項 AWS CDK
| DevOps 工程師,一般 AWS |
編輯 AWS CDK 組態檔案。 |
| DevOps 工程師,一般 AWS |
任務 | 描述 | 所需的技能 |
---|---|---|
擔任部署帳戶中的 IAM 角色。 | 在部署帳戶中,擔任 IAM 角色,該角色具有在管理帳戶中部署 AWS CDK 堆疊的許可。如需在 中擔任 IAM 角色的詳細資訊 AWS CLI,請參閱在 中使用 IAM 角色 AWS CLI。 | DevOps 工程師,一般 AWS |
啟動環境。 | 如果您使用的是 Linux 或 MacOS:
如果您使用的是 Windows:
| DevOps 工程師,一般 AWS |
安裝相依性。 | 虛擬環境啟動後,請輸入下列命令來執行 install_deps.sh 指令碼。此指令碼會安裝所需的相依性。
| DevOps 工程師、一般 AWS、Python |
部署堆疊。 | 輸入下列命令來合成和部署 CloudFormation 堆疊。
| DevOps 工程師、一般 AWS、Python |
相關資源
AWS 文件
關於控制項 (AWS Control Tower 文件)
控制項程式庫 (AWS Control Tower 文件)
AWS CDK Toolkit 命令 (AWS CDK 文件)
使用 Terraform 部署和管理 AWS Control Tower 控制項 (AWS 規範性指導)
其他資源
其他資訊
範例 constants.py 檔案
以下是更新 constants.py 檔案的範例。此範例會啟用 AWS-GR_ENCRYPTED_VOLUMES 控制項 (全域 ID:503uicglhjkokaajywfpt6ros
) 和 AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED 控制項 (全域 ID:50z1ot237wl8u1lv5ufau6qqo
)。如需全域 IDs 的清單,請參閱 AWS Control Tower 文件中的所有全域識別碼。
ACCOUNT_ID = 111122223333
AWS_CONTROL_TOWER_REGION = us-east-2
ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role"
GUARDRAILS_CONFIGURATION = [
{
"Enable-Control": {
"503uicglhjkokaajywfpt6ros",
...
},
"OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...],
},
{
"Enable-Control": {
"50z1ot237wl8u1lv5ufau6qqo",
...
},
"OrganizationalUnitIds": ["ou-2222-22222222"...],
},
]
IAM 政策
下列範例政策允許在將 AWS CDK 堆疊從部署帳戶部署到管理帳戶時,啟用或停用 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:DescribeOrganizationalUnit",
"organizations:DetachPolicy",
"organizations:ListAccounts",
"organizations:ListAWSServiceAccessForOrganization",
"organizations:ListChildren",
"organizations:ListOrganizationalUnitsForParent",
"organizations:ListParents",
"organizations:ListPoliciesForTarget",
"organizations:ListRoots",
"organizations:UpdatePolicy",
"ssm:GetParameters"
],
"Resource": "*"
}
]
}
信任政策
下列自訂信任政策允許部署帳戶中的特定 IAM 角色擔任管理帳戶中的 IAM 角色。取代以下項目:
<DEPLOYMENT-ACCOUNT-ID>
是部署帳戶的 ID<DEPLOYMENT-ROLE-NAME>
是允許在管理帳戶中擔任角色的部署帳戶中的角色名稱
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Effect”: “Allow”,
“Principal”: {
“AWS”: “arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME>”
},
“Action”: “sts:AssumeRole”,
“Condition”: {}
}
]
}