選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 和 AWS CDK CloudFormation 部署和管理 AWS Control Tower 控制項 - AWS 方案指引

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

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

使用 和 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 CDK 應用程式。此工具會檢查應用程式是否符合 AWS 最佳實務。

若要將 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 文件中的入門

  • AWS Command Line Interface (AWS CLI),已安裝設定

  • 節點套件管理員 (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 帳戶跨 部署此解決方案的說明。基於測試目的,您可以直接在管理帳戶中部署此解決方案,但不會明確提供此組態的指示。

  • 對於 AWS Control Tower 控制項,此模式需要使用下列格式的全域識別符

    arn:<PARTITION>:controlcatalog:::control/<CONTROL_CATALOG_OPAQUE_ID>

    此模式的先前版本使用不再支援的區域識別符。我們建議您從區域識別符遷移到全域識別符。全域識別碼可協助您管理控制項,並擴展您可以使用的控制項數量。

    注意

    在大多數情況下, 的值<PARTITION>aws

產品版本

  • AWS Control Tower 3.2 版或更新版本

  • Python 3.9 版或更新版本

  • npm 8.9.0 版或更新版本

架構

本節提供此解決方案的高階概觀,以及範例程式碼所建立的架構。下圖顯示部署在 OU 中各種帳戶的控制項。

部署在組織單位中所有 AWS 帳戶的控制項架構圖。

AWS Control Tower 控制項會根據其行為及其指引進行分類。

控制行為有三種主要類型:

  1. 預防性控制旨在防止動作發生。這些是使用 中的服務控制政策 SCPs)資源控制政策 RCPs) 實作 AWS Organizations。預防性控制的狀態為強制執行或未啟用。所有 都支援預防性控制 AWS 區域。

  2. Detective 控制項旨在偵測發生的特定事件,並記錄動作 AWS CloudTrail。這些是使用 AWS Config 規則實作的。偵測性控制項的狀態為清楚違規或未啟用。Detective 控制項僅適用於 AWS 區域 支援的控制項 AWS Control Tower。

  3. 主動控制 佈建的掃描資源 AWS CloudFormation ,並檢查它們是否符合您的公司政策和目標。不會佈建不合規的資源。這些會使用AWS CloudFormation 勾點實作。主動控制的狀態為 PASSFAILSKIP

控制指導是指如何將每個控制套用至 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 帳戶 到您建立並集中管理的組織。

其他工具

  • cdk_nag 是一種開放原始碼工具,使用規則套件組合來檢查 AWS CDK 應用程式是否符合最佳實務。

  • npm 是在 Node.js 環境中執行的軟體登錄檔,用於共用或借用套件和管理私有套件的部署。

  • Python 是一種一般用途的電腦程式設計語言。

程式碼儲存庫

此模式的程式碼可在使用 儲存庫的 GitHub 部署控制項中使用。 AWS Control TowerAWS CDK您可以使用 cdk.json 檔案與 AWS CDK 應用程式互動,並使用 package.json 檔案安裝 npm 套件。

最佳實務

史詩

任務描述所需的技能

在管理帳戶中建立 IAM 角色。

  1. 在管理帳戶中建立 IAM 政策,並在其他資訊區段中具有 IAM 政策中定義的許可。如需說明,請參閱《IAM 文件》中的建立 IAM 政策。請記下政策的 Amazon Resource Name (ARN)。以下是範例 ARN。

    arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
  2. 在管理帳戶中建立 IAM 角色、連接您在上一個步驟中建立的 IAM 許可政策,以及附加其他資訊區段中的信任政策中的自訂信任政策。如需說明,請參閱 IAM 文件中的使用自訂信任政策建立角色。以下是新角色的範例 ARN。

    arn:aws:iam:: <MANAGEMENT-ACCOUNT-ID>:role/<ROLE-NAME>
DevOps 工程師,一般 AWS

引導 AWS CDK。

  1. 在管理帳戶中,擔任具有引導許可的角色 AWS CDK。

  2. 輸入下列命令,取代下列項目:

    • <MANAGEMENT-ACCOUNT-ID> 是組織的管理帳戶的 ID。

    • <AWS-CONTROL-TOWER-REGION> 是 AWS Control Tower 部署 AWS 區域 的 。如需區域代碼的完整清單,請參閱AWS 一般參考中的區域端點

    • <DEPLOYMENT-ACCOUNT-ID> 是部署帳戶的 ID。

    • <DEPLOYMENT-ROLE-NAME> 是您使用部署帳戶的 IAM 角色名稱。

    • <POLICY-NAME> 是您在管理帳戶中建立的政策名稱。

    $ npx cdk bootstrap aws://<MANAGEMENT-ACCOUNT-ID>/<AWS-CONTROL-TOWER-REGION> \ --trust arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME> \ --cloudformation-execution-policies arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
DevOps 工程師、一般 AWS、Python

複製儲存庫。

在 bash shell 中,輸入下列命令。這會從 GitHub 使用儲存庫複製部署 AWS Control Tower 控制項 AWS CDK

git clone https://github.com/aws-samples/aws-control-tower-controls-cdk.git
DevOps 工程師,一般 AWS

編輯 AWS CDK 組態檔案。

  1. 在複製的儲存庫中,開啟 constants.py 檔案。

  2. ACCOUNT_ID 參數中,輸入管理帳戶的 ID。

  3. <AWS-CONTROL-TOWER-REGION> 參數中,輸入部署 AWS 區域 AWS Control Tower 所在的 。

  4. ROLE_ARN 參數中,輸入您在 管理帳戶中建立之角色的 ARN。

  5. 開啟 AWS Control Tower 文件中的所有全域識別碼

  6. 在 JSON 格式清單中,找到您要實作的控制項,然後複製其全域識別符 (也稱為 {CONTROL_CATALOG_OPAQUE_ID} 值)。例如,AWS-GR_AUDIT_BUCKET_ENCRYPTION_ENABLED 控制項的全域識別符為 k4izcjxhukijhajp6ks5mjxk

  7. GUARDRAILS_CONFIGURATION區段的 Enable-Control 參數中,輸入您複製的全域識別碼。在雙引號中輸入識別符,並以逗號分隔多個識別符。

  8. 在 參數的 GUARDRAILS_CONFIGURATION區段中OrganizationalUnitIds,輸入您要啟用控制項的組織單位 ID,例如 ou-1111-11111111。以雙引號輸入 ID,並以逗號分隔多個 IDs。如需如何擷取 OU IDs 的詳細資訊,請參閱檢視 OU 的詳細資訊

  9. 儲存並關閉 constants.py 檔案。如需更新 constants.py 檔案的範例,請參閱此模式的其他資訊一節。

DevOps 工程師,一般 AWS

準備啟用控制項

任務描述所需的技能

在管理帳戶中建立 IAM 角色。

  1. 在管理帳戶中建立 IAM 政策,並在其他資訊區段中具有 IAM 政策中定義的許可。如需說明,請參閱《IAM 文件》中的建立 IAM 政策。請記下政策的 Amazon Resource Name (ARN)。以下是範例 ARN。

    arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
  2. 在管理帳戶中建立 IAM 角色、連接您在上一個步驟中建立的 IAM 許可政策,以及附加其他資訊區段中的信任政策中的自訂信任政策。如需說明,請參閱 IAM 文件中的使用自訂信任政策建立角色。以下是新角色的範例 ARN。

    arn:aws:iam:: <MANAGEMENT-ACCOUNT-ID>:role/<ROLE-NAME>
DevOps 工程師,一般 AWS

引導 AWS CDK。

  1. 在管理帳戶中,擔任具有引導許可的角色 AWS CDK。

  2. 輸入下列命令,取代下列項目:

    • <MANAGEMENT-ACCOUNT-ID> 是組織的管理帳戶的 ID。

    • <AWS-CONTROL-TOWER-REGION> 是 AWS Control Tower 部署 AWS 區域 的 。如需區域代碼的完整清單,請參閱AWS 一般參考中的區域端點

    • <DEPLOYMENT-ACCOUNT-ID> 是部署帳戶的 ID。

    • <DEPLOYMENT-ROLE-NAME> 是您使用部署帳戶的 IAM 角色名稱。

    • <POLICY-NAME> 是您在管理帳戶中建立的政策名稱。

    $ npx cdk bootstrap aws://<MANAGEMENT-ACCOUNT-ID>/<AWS-CONTROL-TOWER-REGION> \ --trust arn:aws:iam::<DEPLOYMENT-ACCOUNT-ID>:role/<DEPLOYMENT-ROLE-NAME> \ --cloudformation-execution-policies arn:aws:iam::<MANAGEMENT-ACCOUNT-ID>:policy/<POLICY-NAME>
DevOps 工程師、一般 AWS、Python

複製儲存庫。

在 bash shell 中,輸入下列命令。這會從 GitHub 使用儲存庫複製部署 AWS Control Tower 控制項 AWS CDK

git clone https://github.com/aws-samples/aws-control-tower-controls-cdk.git
DevOps 工程師,一般 AWS

編輯 AWS CDK 組態檔案。

  1. 在複製的儲存庫中,開啟 constants.py 檔案。

  2. ACCOUNT_ID 參數中,輸入管理帳戶的 ID。

  3. <AWS-CONTROL-TOWER-REGION> 參數中,輸入部署 AWS 區域 AWS Control Tower 所在的 。

  4. ROLE_ARN 參數中,輸入您在 管理帳戶中建立之角色的 ARN。

  5. 開啟 AWS Control Tower 文件中的所有全域識別碼

  6. 在 JSON 格式清單中,找到您要實作的控制項,然後複製其全域識別符 (也稱為 {CONTROL_CATALOG_OPAQUE_ID} 值)。例如,AWS-GR_AUDIT_BUCKET_ENCRYPTION_ENABLED 控制項的全域識別符為 k4izcjxhukijhajp6ks5mjxk

  7. GUARDRAILS_CONFIGURATION區段的 Enable-Control 參數中,輸入您複製的全域識別碼。在雙引號中輸入識別符,並以逗號分隔多個識別符。

  8. 在 參數的 GUARDRAILS_CONFIGURATION區段中OrganizationalUnitIds,輸入您要啟用控制項的組織單位 ID,例如 ou-1111-11111111。以雙引號輸入 ID,並以逗號分隔多個 IDs。如需如何擷取 OU IDs 的詳細資訊,請參閱檢視 OU 的詳細資訊

  9. 儲存並關閉 constants.py 檔案。如需更新 constants.py 檔案的範例,請參閱此模式的其他資訊一節。

DevOps 工程師,一般 AWS
任務描述所需的技能

擔任部署帳戶中的 IAM 角色。

在部署帳戶中,擔任 IAM 角色,該角色具有在管理帳戶中部署 AWS CDK 堆疊的許可。如需在 中擔任 IAM 角色的詳細資訊 AWS CLI,請參閱在 中使用 IAM 角色 AWS CLI

DevOps 工程師,一般 AWS

啟動環境。

如果您使用的是 Linux 或 MacOS:

  1. 輸入下列命令來建立虛擬環境。

    $ python3 -m venv .venv
  2. 虛擬環境建立後,請輸入下列命令來啟用它。

    $ source .venv/bin/activate

如果您使用的是 Windows:

  1. 輸入下列命令以啟用虛擬環境。

    % .venv\Scripts\activate.bat
DevOps 工程師,一般 AWS

安裝相依性。

虛擬環境啟動後,請輸入下列命令來執行 install_deps.sh 指令碼。此指令碼會安裝所需的相依性。

$ ./scripts/install_deps.sh
DevOps 工程師、一般 AWS、Python

部署堆疊。

輸入下列命令來合成和部署 CloudFormation 堆疊。

$ npx cdk synth $ npx cdk deploy
DevOps 工程師、一般 AWS、Python

在管理帳戶中啟用控制項

任務描述所需的技能

擔任部署帳戶中的 IAM 角色。

在部署帳戶中,擔任 IAM 角色,該角色具有在管理帳戶中部署 AWS CDK 堆疊的許可。如需在 中擔任 IAM 角色的詳細資訊 AWS CLI,請參閱在 中使用 IAM 角色 AWS CLI

DevOps 工程師,一般 AWS

啟動環境。

如果您使用的是 Linux 或 MacOS:

  1. 輸入下列命令來建立虛擬環境。

    $ python3 -m venv .venv
  2. 虛擬環境建立後,請輸入下列命令來啟用它。

    $ source .venv/bin/activate

如果您使用的是 Windows:

  1. 輸入下列命令以啟用虛擬環境。

    % .venv\Scripts\activate.bat
DevOps 工程師,一般 AWS

安裝相依性。

虛擬環境啟動後,請輸入下列命令來執行 install_deps.sh 指令碼。此指令碼會安裝所需的相依性。

$ ./scripts/install_deps.sh
DevOps 工程師、一般 AWS、Python

部署堆疊。

輸入下列命令來合成和部署 CloudFormation 堆疊。

$ npx cdk synth $ npx cdk deploy
DevOps 工程師、一般 AWS、Python

相關資源

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”: {} } ] }
隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。