本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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 上部署此解決方案。
注意
S3 儲存貯體組態 – 僅適用於 ADMIN。這是一次性設定步驟,不應由最終使用者重複執行。S3 儲存貯體存放部署套件,包括執行 ASR 所需的 AWS CloudFormation 範本和 Lambda 程式碼。這些資源是使用 CfCt 或 StackSet 部署。
1. 設定 S3 儲存貯體
設定將用於存放和提供部署套件的 S3 儲存貯體。
2. 設定 環境
準備建置和部署程序所需的必要環境變數、登入資料和工具。
3. 設定 S3 儲存貯體政策
定義並套用適當的儲存貯體政策,以控制存取和許可。
4. 準備組建
編譯、封裝或以其他方式準備您的應用程式或資產以進行部署。
5. 將套件部署至 S3
將準備好的建置成品上傳到指定的 S3 儲存貯體。
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. 組建準備
-
事前準備:
-
AWS CLI v2
-
Python 3.11+ 搭配 pip
-
AWS CDK 2.171.1+
-
Node.js 20+ 搭配 npm
-
Poetry v2 搭配要匯出的外掛程式
-
-
Git 複製 https://https://github.com/aws-solutions/automated-security-response-on-aws.git
首先,請確定您已在來源資料夾中執行 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,請參閱:程式碼管道概觀