本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 AWS CDK 和 AWS 部署和管理 AWS Control Tower 控制 CloudFormation
由伊克爾·雷納·富恩特(AWS)和伊万·吉拉迪(AWS)創建
程式碼儲存庫:aws-control-tower-controls-cdk | 環境:生產 | 技術:安全性、身分識別、合規性 CloudNative;基礎架構;管理與治理 |
AWS 服務:AWS CloudFormation、AWS Control Tower、AWS Organizations、AWS CDK |
Summary
此模式說明如何使用 AWS CloudFormation 和 AWS Cloud Development Kit (AWS CDK) 來實作和管理預防性、偵測和主動的 AWS Control Tower 控制作為基礎設施即程式碼 (IaC)。控制項 (也稱為護欄) 是一項高階規則,可為您的整體 AWS Control Tower 環境提供持續的管控。例如,您可以使用控制項要求 AWS 帳戶記錄,然後在發生特定安全性相關事件時設定自動通知。
AWS Control Tower 可協助您實作預防性、偵測和主動式控制,以管理 AWS 資源並監控多個 AWS 帳戶的合規。每個控制項都會強制執行單一規則。在此模式中,您可以使用提供的 IaC 範本來指定要在環境中部署的控制項。
AWS Control Tower 控制適用於整個組織單位 (OU),而且控制會影響 OU 中的每個 AWS 帳戶。因此,當使用者在您的 landing zone 中的任何帳戶中執行任何動作時,動作會受到控制 OU 的控制項的約束。
實作 AWS Control Tower 控制有助於為您的 AWS landing zone 建立堅實的安全基礎。透過使用此模式將控制項部署為 IaC to CloudFormation 和 AWS CDK,您可以標準化 landing zone 域中的控制項,並更有效率地部署和管理它們。此解決方案會在部署期間使用 cdk_nag
若要將 AWS Control Tower 控制項部署為 I HashiCorp aC,您也可以使用地形來取代 AWS CDK。如需詳細資訊,請參閱使用 Terraform 部署和管理 AWS Control Tower 控制。
目標受眾
對於具有 AWS Control Tower、AWS CDK 和 AWS Organizations 相關經驗的使用者 CloudFormation,建議使用此模式。
先決條件和限制
先決條件
以組織身分在 AWS 組織和 AWS Control Tower landing zone 中管理的有效 AWS 帳戶。如需指示,請參閱建立帳戶結構
(AWS Well-Architected 的實驗室)。 針對 AWS CDK 安裝和設定
的節點套件管理員 (npm)。 AWS CDK 的先決條件。
在部署帳戶中擔任現有 AWS Identity and Access Management (IAM) 角色的許可。
在組織的管理帳戶中擔任 IAM 角色的許可,該角色可用於啟動 AWS CDK。角色必須具有修改和部署 CloudFormation 資源的權限。如需詳細資訊,請參閱 AWS CDK 文件中的啟動安裝。
在組織的管理帳戶中建立 IAM 角色和政策的許可。如需詳細資訊,請參閱 IAM 文件中存取 IAM 資源所需的許可。
使用識別碼套用以服務控制原則 (SCP) 為基礎的控制項。必須啟動此 SCP,才能部署主動式控制。如需指示,請參閱不允許管理 AWS CloudFormation 登錄中的資源類型、模組和掛接。
限制
此模式提供跨 AWS 帳戶部署此解決方案的指示,從部署帳戶到組織的管理帳戶。基於測試目的,您可以直接在管理帳戶中部署此解決方案,但未明確提供此組態的指示。
產品版本
版 Python 3.9 或更高版本
故宮版本 8.9.0 或更新版本
架構
目標架構
本節提供此解決方案的高階概觀,以及範例程式碼所建立的架構。下圖顯示在 OU 中各個帳戶中部署的控制項。
![組織單位中所有 AWS 帳戶部署的控制架構圖](images/pattern-img/7d0d5e37-58ac-4621-b6b0-cb8c1c767ab0/images/787b7ca0-9d29-4294-a407-6019e38f08c7.png)
AWS Control Tower 控制項會根據其行為和指導進行分類。
控制行為有三種主要類型:
預防性控制的設計是為了防止動作發生。這些是透過 AWS Organizations 中的服務控制政策 (SCP) 來實作。預防控制的狀態是強制執行或未啟用。所有 AWS 區域都支援預防性控制。
Dete@@ ctive 測控制項的設計目的在於偵測特定事件發生時,並將動作記錄在中 CloudTrail。這些都是透過 AWS 組態規則來實作。偵測控制項的狀態可能是「清除」、「違規」或「未啟用」。Detective 控制僅適用於 AWS 控制塔支援的 AWS 區域。
主動控制會掃描 AWS 佈建的資源, CloudFormation 並檢查它們是否符合您公司的政策和目標。不符合標準的資源將不會被佈建。這些都是使用 AWS CloudFormation 掛鉤實現的。主動控制的狀態為「通過」、「失敗」或「略過」。
控制指引是指建議的做法,說明如何將每個控制項套用至 OU。AWS Control Tower 提供三種類別的指導:強制性、強烈建議和選修。控制項的指導獨立於其行為。如需詳細資訊,請參閱控制行為和指引。
工具
AWS 服務
AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。AWS CDK 工具組是與 AWS CDK 應用程式互動的主要工具。
AWS 可 CloudFormation協助您設定 AWS 資源、快速且一致地佈建 AWS 資源,並在 AWS 帳戶和區域的整個生命週期中進行管理。
AWS Config 提供 AWS 帳戶中資源的詳細檢視,以及資源的設定方式。它可協助您識別資源彼此之間的關聯性,以及其組態隨時間變更的情況。
AWS Control Tower 可協助您按照規範的最佳實務來設定和管理 AWS 多帳戶環境。
AWS Organizations Organization 是一種帳戶管理服務,可協助您將多個 AWS 帳戶合併到您建立並集中管理的組織中。
其他工具
代碼存儲庫
此模式的程式碼可在使用 AWS CDK 儲存庫的 GitHub 部署 AWS Control Tower 控制
最佳實務
遵循最低權限(IAM 文檔)的原則。此模式中提供的 IAM 政策和信任政策範例包括所需的最低許可,而在管理帳戶中建立的 AWS CDK 堆疊受到這些許可的限制。
遵循 AWS Control Tower 管理員的最佳實務 (AWS Control Tower 文件)。
啟動安裝 AWS CDK 時,請自訂啟動程序範本以定義政策和受信任帳戶,這些帳戶應具備讀取和寫入管理帳戶中任何資源的能力。如需詳細資訊,請參閱自訂啟動載入。
使用程式碼分析工具 (例如 cfn_nag
) 掃描產生的範本。 CloudFormation cfn-nag 工具會在 CloudFormation 範本中尋找可能表示基礎結構不安全的模式。您還可以使用 cdk-nag 通過使用雲格式化包含模塊來檢查您的 CloudFormation 模板。
史诗
任務 | 描述 | 所需技能 |
---|---|---|
在管理帳戶中建立 IAM 角色。 |
| DevOps 工程師,一般 AWS |
引導程序 AWS CDK。 |
| DevOps 工程師, 一般 AWS, Python |
複製儲存庫。 | 在 bash 外殼中,輸入以下命令。這會使用 AWS CDK 儲存庫複製部署 AWS Control Tower 控制台控制
| DevOps 工程師,一般 AWS |
編輯 AWS CDK 組態檔案。 |
|
任務 | 描述 | 所需技能 |
---|---|---|
假設部署帳戶中的 IAM 角色。 | 在部署帳戶中,假設具有在管理帳戶中部署 AWS CDK 堆疊許可的 IAM 角色。如需在 AWS CLI 中假設 IAM 角色的詳細資訊,請參閱在 AWS CLI 中使用 IAM 角色。 | DevOps 工程師,一般 AWS |
啟動環境。 | 如果您使用的是 Linux 或 MacOS 果系統:
如果您使用的是視窗:
| DevOps 工程師,一般 AWS |
安裝依賴關係。 | 啟動虛擬環境之後,輸入下列命令以執行 install_deps.sh 指令碼。此指令碼會安裝必要的相依性。
| DevOps 工程師, 一般 AWS, Python |
部署堆疊。 | 輸入以下命令以合成和部署 CloudFormation 堆疊。
| DevOps 工程師, 一般 AWS, Python |
相關資源
AWS 文件
關於控制 (AWS Control Tower 文件)
控制程式庫 (AWS Control Tower 文件)
AWS CDK 工具組命令 (AWS CDK 文件)
其他資源
其他資訊
constants.py 檔案範例
以下是更新的 constants.py 檔案的範例。
ACCOUNT_ID = 111122223333 AWS_CONTROL_TOWER_REGION = us-east-2 ROLE_ARN = "arn:aws:iam::111122223333:role/CT-Controls-Role" GUARDRAILS_CONFIGURATION = [ { "Enable-Control": { "AWS-GR_ENCRYPTED_VOLUMES", ... }, "OrganizationalUnitIds": ["ou-1111-11111111", "ou-2222-22222222"...], }, { "Enable-Control": { "AWS-GR_SUBNET_AUTO_ASSIGN_PUBLIC_IP_DISABLED", ... }, "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>
是部署帳戶的識別碼<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”: {} } ] }