Control Tower (CT) 部署 - AWS 上的自動化安全回應

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

Control Tower (CT) 部署

適用於 AWS Control Tower (CfCT) 的自訂指南適用於管理員、DevOps 專業人員、獨立軟體供應商、IT 基礎設施架構師和系統整合商,他們想要為其公司和客戶自訂和擴展其 AWS Control Tower 環境。它提供使用 CfCT 自訂套件自訂和擴展 AWS Control Tower 環境的相關資訊。

部署時間:約 30 分鐘

先決條件

部署此解決方案之前,請確定其適用於 AWS Control Tower 管理員

當您準備好使用 AWS Control Tower 主控台或 APIs 設定登陸區域時,請遵循下列步驟:

若要開始使用 AWS Control Tower,請參閱:AWS Control Tower 入門

若要了解如何自訂您的登陸區域,請參閱:自訂您的登陸區域

若要啟動和部署您的登陸區域,請參閱:登陸區域部署指南

部署概觀

使用下列步驟在 AWS 上部署此解決方案。

步驟 1:建置和部署 S3 儲存貯體

注意

S3 儲存貯體組態 – 僅適用於 ADMIN。這是一次性設定步驟,不應由最終使用者重複執行。S3 儲存貯體存放部署套件,包括執行 ASR 所需的 AWS CloudFormation 範本和 Lambda 程式碼。這些資源是使用 CfCt 或 StackSet 部署。

1. 設定 S3 儲存貯體

設定將用於存放和提供部署套件的 S3 儲存貯體。

2. 設定 環境

準備建置和部署程序所需的必要環境變數、登入資料和工具。

3. 設定 S3 儲存貯體政策

定義並套用適當的儲存貯體政策,以控制存取和許可。

4. 準備組建

編譯、封裝或以其他方式準備您的應用程式或資產以進行部署。

5. 將套件部署至 S3

將準備好的建置成品上傳到指定的 S3 儲存貯體。

步驟 2:堆疊部署至 AWS Control Tower

1. 建立 ASR 元件的建置資訊清單

定義組建資訊清單,列出所有 ASR 元件、其版本、相依性和組建指示。

2. 更新 CodePipeline

修改 AWS CodePipeline 組態,以包含部署 ASR 元件所需的新建置步驟、成品或階段。

步驟 1:建置並部署至 S3 儲存貯體

AWS 解決方案使用兩個儲存貯體:透過 HTTPS 存取之範本的全域存取儲存貯體,以及存取區域內資產的區域儲存貯體,例如 Lambda 程式碼。

1. 設定 S3 儲存貯體

選擇唯一的儲存貯體名稱,例如 asr-staging。在終端機上設定兩個環境變數,其中一個應為 - 參考為尾碼的基本儲存貯體名稱,另一個則為您預期部署區域的尾碼:

export BASE_BUCKET_NAME=asr-staging-$(date +%s) export TEMPLATE_BUCKET_NAME=$BASE_BUCKET_NAME-reference export REGION=us-east-1 export ASSET_BUCKET_NAME=$BASE_BUCKET_NAME-$REGION
2. 環境設定

在您的 AWS 帳戶中,使用這些名稱建立兩個儲存貯體,例如 asr-staging-reference 和 asr-staging-us-east-1。(參考儲存貯體將保留 CloudFormation 範本,區域儲存貯體將保留所有其他資產,例如 lambda 程式碼套件。) 您的儲存貯體應該加密並不允許公開存取

aws s3 mb s3://$TEMPLATE_BUCKET_NAME/
aws s3 mb s3://$ASSET_BUCKET_NAME/
注意

建立儲存貯體時,請確保它們不可公開存取。使用隨機儲存貯體名稱。停用公有存取。使用 KMS 加密。上傳之前,請確認儲存貯體擁有權。

3. S3 儲存貯體政策設定

更新 $TEMPLATE_BUCKET_NAME S3 儲存貯體政策,以包含執行帳戶 ID 的 PutObject 許可。將此許可指派給執行帳戶中有權寫入儲存貯體的 IAM 角色。此設定可讓您避免在 管理帳戶中建立儲存貯體。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<template bucket name>/*", "arn:aws:s3:::<template bucket name>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<template bucket name>/*", "arn:aws:s3:::<template bucket name>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }

修改資產 S3 儲存貯體政策以包含許可。將此許可指派給執行帳戶中有權寫入儲存貯體的 IAM 角色。為每個區域資產儲存貯體 (例如asr-staging-us-east-1、asr-staging-eu-west-1 等) 重複此設定,允許跨多個區域部署,而無需在 管理帳戶中建立儲存貯體。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "StringEquals": { "aws:PrincipalOrgID": "<org id>" } } }, { "Effect": "Allow", "Principal": "*", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::<asset bucket name>-<region>/*", "arn:aws:s3:::<asset bucket name>-<region>" ], "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::<execute_account_id>:role/<iam_role_name>" } } } ] }
4. 組建準備

首先,請確定您已在來源資料夾中執行 npm 安裝。

在複製儲存庫的部署資料夾中,執行 build-s3-dist.sh,傳遞儲存貯體的根名稱 (例如 mybucket) 和您要建置的版本 (例如 v1.0.0)。我們建議根據從 GitHub 下載的版本 (例如 GitHub:v1.0.0,您的組建:v1.0.0.mybuild)

chmod +x build-s3-dist.sh
export SOLUTION_NAME=automated-security-response-on-aws
export SOLUTION_VERSION=v1.0.0.mybuild
./build-s3-dist.sh -b $BASE_BUCKET_NAME -v $SOLUTION_VERSION

5. 將套件部署至 S3

cd deployment
aws s3 cp global-s3-assets/  s3://$TEMPLATE_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control
aws s3 cp regional-s3-assets/  s3://$ASSET_BUCKET_NAME/$SOLUTION_NAME/$SOLUTION_VERSION/ --recursive --acl bucket-owner-full-control

步驟 2:堆疊部署至 AWS Control Tower

1. 建置 ASR 元件的資訊清單

將 ASR 成品部署至 S3 儲存貯體之後,請更新 Control Tower 管道資訊清單以參考新版本,然後觸發管道執行,請參閱:Controltower 部署

重要

若要確保 ASR 解決方案的正確部署,請參閱官方 AWS 文件,以取得 CloudFormation 範本概觀和參數描述的詳細資訊。以下資訊連結:CloudFormation 範本參數概觀指南

ASR 元件的資訊清單如下所示:

region: us-east-1 #<HOME_REGION_NAME> version: 2021-03-15 # Control Tower Custom CloudFormation Resources resources: - name: <ADMIN STACK NAME> resource_file: s3://<ADMIN TEMPLATE BUCKET path> parameters: - parameter_key: UseCloudWatchMetricsAlarms parameter_value: "yes" - parameter_key: TicketGenFunctionName parameter_value: "" - parameter_key: LoadSCAdminStack parameter_value: "yes" - parameter_key: LoadCIS120AdminStack parameter_value: "no" - parameter_key: TargetAccountIDsStrategy parameter_value: "INCLUDE" - parameter_key: LoadCIS300AdminStack parameter_value: "no" - parameter_key: UseCloudWatchMetrics parameter_value: "yes" - parameter_key: LoadNIST80053AdminStack parameter_value: "no" - parameter_key: LoadCIS140AdminStack parameter_value: "no" - parameter_key: ReuseOrchestratorLogGroup parameter_value: "yes" - parameter_key: LoadPCI321AdminStack parameter_value: "no" - parameter_key: RemediationFailureAlarmThreshold parameter_value: "5" - parameter_key: LoadAFSBPAdminStack parameter_value: "no" - parameter_key: TargetAccountIDs parameter_value: "ALL" - parameter_key: EnableEnhancedCloudWatchMetrics parameter_value: "no" deploy_method: stack_set deployment_targets: accounts: # :type: list - <ACCOUNT_NAME> # and/or - <ACCOUNT_NUMBER> regions: - <REGION_NAME> - name: <ROLE MEMBER STACK NAME> resource_file: s3://<ROLE MEMBER TEMPLATE BUCKET path> parameters: - parameter_key: SecHubAdminAccount parameter_value: <ADMIN_ACCOUNT_NAME> - parameter_key: Namespace parameter_value: <NAMESPACE> deploy_method: stack_set deployment_targets: organizational_units: - <ORG UNIT> - name: <MEMBER STACK NAME> resource_file: s3://<MEMBER TEMPLATE BUCKET path> parameters: - parameter_key: SecHubAdminAccount parameter_value: <ADMIN_ACCOUNT_NAME> - parameter_key: LoadCIS120MemberStack parameter_value: "no" - parameter_key: LoadNIST80053MemberStack parameter_value: "no" - parameter_key: Namespace parameter_value: <NAMESPACE> - parameter_key: CreateS3BucketForRedshiftAuditLogging parameter_value: "no" - parameter_key: LoadAFSBPMemberStack parameter_value: "no" - parameter_key: LoadSCMemberStack parameter_value: "yes" - parameter_key: LoadPCI321MemberStack parameter_value: "no" - parameter_key: LoadCIS140MemberStack parameter_value: "no" - parameter_key: EnableCloudTrailForASRActionLog parameter_value: "no" - parameter_key: LogGroupName parameter_value: <LOG_GROUP_NAME> - parameter_key: LoadCIS300MemberStack parameter_value: "no" deploy_method: stack_set deployment_targets: accounts: # :type: list - <ACCOUNT_NAME> # and/or - <ACCOUNT_NUMBER> organizational_units: - <ORG UNIT> regions: # :type: list - <REGION_NAME>
2. 程式碼管道更新

將資訊清單檔案新增至 custom-control-tower-configuration.zip 並執行 CodePipeline,請參閱:程式碼管道概觀