

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

# Control Tower (CT) 部署
<a name="cfctdeployment"></a>

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

 **部署時間：**約 30 分鐘

## 先決條件
<a name="cfctprerequisites"></a>

部署此解決方案之前，請確保其適用於 **AWS Control Tower 管理員**。

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

若要開始使用 AWS Control Tower，請參閱：[AWS Control Tower 入門](https://docs.aws.amazon.com/controltower/latest/userguide/getting-started-with-control-tower.html) 

若要了解如何自訂您的登陸區域，請參閱：[自訂您的登陸區域](https://docs.aws.amazon.com/controltower/latest/userguide/customize-landing-zone.html) 

若要啟動和部署您的登陸區域，請參閱：[登陸區域部署指南](https://docs.aws.amazon.com/controltower/latest/userguide/deployment.html) 

## 部署概觀
<a name="cfctdeployment-overview"></a>

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

 [步驟 1：建置和部署 S3 儲存貯體](#step-1-cfn) 

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

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

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

**3. 設定 S3 儲存貯體政策**  
定義並套用適當的儲存貯體政策，以控制存取和許可。

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

**5. 將套件部署至 S3**  
將準備好的建置成品上傳至指定的 S3 儲存貯體。

 [步驟 2：堆疊部署至 AWS Control Tower](#step-2-cfn) 

**1. 建立 ASR 元件的建置資訊清單**  
定義組建資訊清單，列出所有 ASR 元件、其版本、相依性和組建指示。

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

## 步驟 1：建置和部署至 S3 儲存貯體
<a name="step-1-cfn"></a>

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::account-id:role/iam-role-name"
                }
            }
        }
    ]
}
```

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

**4. 組建準備**
+ 事前準備：
  + AWS CLI v2
  + Python 3.11\+ 搭配 pip
  + AWS CDK 2.171.1\+
  + Node.js 20\+ 搭配 npm
  + Poetry v2 搭配要匯出的外掛程式
+ Git 複製 [https://github.com/aws-solutions/automated-security-response-on-aws.git](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
<a name="step-2-cfn"></a>

**1. 為 ASR 元件建置資訊清單**  
將 ASR 成品部署至 S3 儲存貯體之後，請更新 Control Tower [管道資訊清單](https://docs.aws.amazon.com/controltower/latest/userguide/cfcn-byo-customizations.html)以參考新版本，然後觸發管道執行，請參閱：[Controltower 部署](https://docs.aws.amazon.com/controltower/latest/userguide/deployment.html) 

**重要**  
若要確保 ASR 解決方案的正確部署，請參閱官方 AWS 文件，以取得 CloudFormation 範本概觀和參數描述的詳細資訊。以下資訊連結：[CloudFormation 範本](https://docs.aws.amazon.com/en_us/solutions/latest/automated-security-response-on-aws/aws-cloudformation-template.html)[參數概觀指南](https://docs.aws.amazon.com/solutions/latest/automated-security-response-on-aws/deployment.html) 

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: ShouldDeployWebUI
        parameter_value: "yes"
      - parameter_key: AdminUserEmail
        parameter_value: "<YOUR EMAIL ADDRESS>"
      - parameter_key: LoadSCAdminStack
        parameter_value: "yes"
      - parameter_key: LoadCIS120AdminStack
        parameter_value: "no"
      - 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: 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，請參閱：[程式碼管道概觀](https://docs.aws.amazon.com/controltower/latest/userguide/cfct-codepipeline-overview.html) 