

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

# 部署適用於 Terraform (AFT) 的 AWS Control Tower 帳戶工廠
<a name="aft-getting-started"></a>

 本節適用於想要在現有環境中設定 Account Factory for Terraform (AFT) 的 AWS Control Tower 環境管理員。它說明如何使用新的專用 AFT 管理帳戶設定 Account Factory for Terraform (AFT) 環境。

**注意**  
 Terraform 模組會部署 AFT。此模組可在 GitHub 上的 [AFT 儲存庫](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main)中使用，而且整個 AFT 儲存庫都視為模組。  
 我們建議您參考 GitHub 上的 AFT 模組，而不是複製 AFT 儲存庫。如此一來，您就可以在模組可用時控制和使用更新。

 如需 AWS Control Tower Account Factory for Terraform (AFT) 功能最新版本的詳細資訊，請參閱此 GitHub 儲存庫的[版本檔案](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/releases)。

 **部署先決條件** 

在設定和啟動 AFT 環境之前，您必須擁有下列資源：
+  AWS Control Tower 登陸區域的主區域。如需詳細資訊，請參閱[如何使用 AWS 區域 AWS Control Tower](https://docs.aws.amazon.com/controltower/latest/userguide/region-how.html)。
+  AWS Control Tower 登陸區域。如需詳細資訊，請參閱[規劃您的 AWS Control Tower 登陸區域](https://docs.aws.amazon.com/controltower/latest/userguide/planning-your-deployment.html)。
+  AFT 管理帳戶，您可以在 AWS Control Tower 中佈建，或透過其他方式佈建並註冊 AWS Control Tower。
+  Terraform 版本和分佈。如需詳細資訊，請參閱 [Terraform 和 AFT 版本](https://docs.aws.amazon.com/controltower/latest/userguide/version-supported.html)。
+  用於追蹤和管理程式碼和其他檔案變更的 VCS 提供者。根據預設，AFT 會使用 AWS CodeCommit。如需詳細資訊，請參閱*AWS CodeCommit 《 使用者指南*》中的[什麼是 AWS CodeCommit？](https://docs.aws.amazon.com/codecommit/latest/userguide/welcome.html)。

  如果您是第一次部署 AFT，而且沒有現有的 CodeCommit 儲存庫，則必須選擇外部 VCS 供應商，例如 GitHub 或 BitBucket。如需詳細資訊，請參閱 [AFT 中原始程式碼版本控制的替代方案](https://docs.aws.amazon.com/controltower/latest/userguide/aft-alternative-vcs.html)。
+  執行期環境，您可以在其中執行安裝 AFT 的 Terraform 模組。
+  AFT 功能選項。如需詳細資訊，請參閱[啟用功能選項](https://docs.aws.amazon.com/controltower/latest/userguide/aft-feature-options.html)。

## 設定和啟動適用於 Terraform 的 AWS Control Tower 帳戶工廠
<a name="aft-configure-and-launch"></a>

 下列步驟假設您熟悉 Terraform 工作流程。您也可以遵循 AWS Workshop Studio 網站上的 AFT 實驗室[簡介，進一步了解部署 AFT](https://catalog.workshops.aws/control-tower/en-US/customization/aft)。

 **步驟 1：啟動您的 AWS Control Tower 登陸區域** 

 完成 [AWS Control Tower 入門](https://catalog.workshops.aws/control-tower/en-US/customization/aft)中的步驟。您可以在此處建立 AWS Control Tower 管理帳戶，並設定 AWS Control Tower 登陸區域。

**注意**  
 請務必為具有 **AdministratorAccess** 登入資料的 AWS Control Tower 管理帳戶建立角色。如需詳細資訊，請參閱下列內容：  
 *AWS Identity and Access Management 《 使用者指南*》中的 [IAM 身分 （使用者、使用者群組和角色）](https://docs.aws.amazon.com/IAM/latest/UserGuide/id.html) 
 《 *AWS 受管政策參考指南*》中的 [AdministratorAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AdministratorAccess.html) 

 **步驟 2：為 AFT 建立新的組織單位 （強烈建議）** 

 我們建議您在 AWS Control Tower 登陸區域 中建立個別的 OU。此 OU 是您佈建 AFT 管理帳戶的地方。從 AWS Control Tower 管理帳戶建立新的 OU 和 AFT 管理帳戶。如需詳細資訊，請參閱[建立新的 OU](https://docs.aws.amazon.com/controltower/latest/userguide/create-new-ou.html)。

 **步驟 3：佈建 AFT 管理帳戶** 

 AFT 要求您佈建專用於 AFT 管理操作 AWS 的帳戶。當您登入與您的 AWS Control Tower 登陸區域相關聯的 AWS Control Tower 管理帳戶時，請建立 AFT 管理帳戶。您可以在**組織**頁面上選取**建立帳戶，或透過其他方式，從 AWS Control Tower 主控台佈建 AFT 管理帳戶**。如需詳細資訊，請參閱[使用 Account Factory 佈建 AWS Service Catalog 帳戶](https://docs.aws.amazon.com/controltower/latest/userguide/provision-as-end-user.html)。

**注意**  
如果您為 AFT 建立單獨的 OU，請務必在建立 AFT 管理帳戶時選取此 OU。

完整佈建 AFT 管理帳戶最多可能需要 30 分鐘。

 **步驟 4：確認 Terraform 環境可供部署** 

 此步驟假設您有使用 Terraform 的經驗，並具有執行 Terraform 的程序。如需詳細資訊，請參閱 HashiCorp 開發人員網站上的 [Command： init](https://developer.hashicorp.com/terraform/cli/commands/init)。

**注意**  
 AFT 支援 Terraform 版本 `1.6.0` 或更新版本。

 **步驟 5：選用組態**
+ **選擇性地設定虛擬私有雲端 (VPC) 組態**

  AFT 模組包含 `aft_enable_vpc` 參數，指定 AWS Control Tower 是否在中央 AFT 管理帳戶中的 VPC 內佈建帳戶資源。根據預設， 參數會設定為 `true`。如果您將此參數設定為 `false`，AWS Control Tower *會在不使用* VPC 和私有聯網資源的情況下部署 AFT，例如 NAT Gateways 或 VPC 端點。停用`aft_enable_vpc`可能有助於降低*某些使用模式*的 AFT 操作成本。新增任何 VPC 組態會覆寫設定為 的`aft_enable_vpc`參數`false`。
**注意**  
重新啟用 `aft_enable_vpc` 參數 （將值從 切換`false`為 `true`) 可能需要您連續執行`terraform apply`命令兩次。

  您可以設定 AFT 以使用帳戶中現有的 VPC，而不是佈建新的 VPC。若要使用您自己的 VPC，請提供下列 VPC 組態參數：
  + `aft_customer_vpc_id` - 現有 VPC 的 ID
  + `aft_customer_private_subnets` - VPC 中的私有子網路 IDs清單

  範例組態：

  ```
  module "aft" {
    source = "github.com/aws-ia/terraform-aws-control_tower_account_factory"
    
    # VPC configuration
    aft_customer_vpc_id = "vpc-0123456789abcdef0"
    aft_customer_private_subnets = ["subnet-0123456789abcdef0", "subnet-0123456789abcdef1"]
    
    # Other AFT parameters...
  }
  ```
**重要**  
如果您有現有的 AFT 部署，我們不建議您使用自訂 VPC 選項。您可能對 Lambda 函數或 CodePipeline 有相依性，這些相依性取決於基礎現有 VPC 中的資源。
+ **選擇性地設定 Terraform 專案名稱**

  您可以設定 `terraform_project_name` 參數來自訂 AFT 使用的 Terraform 專案名稱。根據預設，AFT 會將部署置於 Terraform Cloud 或 Terraform Enterprise 的「預設」專案中。

  範例組態：

  ```
  module "aft" {
    source = "github.com/aws-ia/terraform-aws-control_tower_account_factory"
    
    # Project name configuration
    terraform_project_name = "my-organization-aft"
    
    # Other AFT parameters...
  }
  ```
**注意**  
此參數僅適用於 Terraform Enterprise 或 Terraform Cloud 部署。
+ **選擇性地將自訂標籤套用至 AFT 資源**

  您可以使用 `tags` 參數，將自訂標籤套用至所有 AFT 資源。這些標籤可協助進行資源組織、成本分配和存取控制。

  範例組態：

  ```
  module "aft" {
    source = "github.com/aws-ia/terraform-aws-control_tower_account_factory"
    
    # Custom tags configuration
    tags = {
      Environment = "Production"
      CostCenter = "IT-12345"
      Project = "AFT-Deployment"
      Owner = "platform-team@example.com"
    }
    
    # Other AFT parameters...
  }
  ```

  這些標籤會套用至 AFT 模組建立的所有資源。AFT 會自動將`managed_by = "AFT"`標籤新增至所有資源，這些資源無法被自訂標籤覆寫。
**注意**  
您可以隨時新增自訂標籤，而不只是在初始部署期間。
+ **選擇性地將 AWS KMS 客戶受管加密金鑰 (CMK) 套用至 CloudWatch 日誌群組和 SNS 主題**

  若要啟用日誌群組和 SNS 主題的 KMS CMK 加密，請設定 `cloudwatch_log_group_enable_cmk_encryption`和 `sns_topic_enable_cmk_encryption`變數。

  如果您選擇加入這些設定，AFT 會使用現有的 CMK、*別名/後*置來加密 CloudWatch 日誌和 SNS 主題。在 AFT 管理帳戶中部署 AFT 時，會建立此 CMK，並可套用至日誌群組和 SNS 主題。
  + 如果變數`cloudwatch_log_group_enable_cmk_encryption`設為 **true**，則 AFT 的 CloudWatch 日誌群組會使用 CMK 加密。如果變數設定為 **false**，這是預設值，則會使用[伺服器端加密來加密日誌，並預設使用 CloudWatch 日誌](https://docs.aws.amazon.com//AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)。
  +  如果變數`sns_topic_enable_cmk_encryption`設為 **true**，傳送至 AFT SNS 主題的通知 (*後置通知*和*aft-failure-notifications*) 會使用 CMK 加密。如果變數設定為 **false**，這是預設值，SNS 訊息會使用 AWS 受管金鑰加密：*alias/aws/sns*。如需詳細資訊，請參閱 [SSE 金鑰術語](https://docs.aws.amazon.com//sns/latest/dg/sns-server-side-encryption.html#sse-key-terms)。
+ **選擇性地變更 CodeBuild 運算類型**

  在部署期間，若要變更 AFT 用於 CodeBuild 的運算類型，請設定變數 `aft_codebuild_compute_type`。

  如需已接受運算類型的資訊，請參閱[關於隨需環境類型](https://docs.aws.amazon.com//codebuild/latest/userguide/build-env-ref-compute-types.html#environment.types)。預設運算類型為 `BUILD_GENERAL1_MEDIUM`。
+ **選擇性地為 Terraform 設定 OpenID Connect (OIDC)**

  使用 Terraform Enterprise 或 HCP Terraform （先前稱為 Terraform Cloud) 的客戶可以使用建立在 OIDC 通訊協定上的 Terraform 工作負載身分字符 （或動態提供者憑證），以使用 AFT 安全地連接和驗證工作區。

  您可以將 `terraform_oidc_integration` 參數設定為 ，以啟用 AFT 工作區的 OIDC 整合`true`。根據預設，此參數會設定為 `false`。啟用此參數時，如果預設值 (`aws.workload.identity` `terraform_oidc_aws_audience`和 分別為 ) 不符合您的環境`app.terraform.io`，則應檢閱和設定 和 `terraform_oidc_hostname` 參數。

  範例組態：

  ```
  module "aft" {
    source = "github.com/aws-ia/terraform-aws-control_tower_account_factory"
    
    # Terraform distribution must be "tfc" or "tfe" for OIDC
    terraform_distribution = "tfc"
  
    # Terraform OIDC Configuration
    terraform_oidc_integration  = true
    terraform_oidc_aws_audience = "aws.workload.identity"  # default
    terraform_oidc_hostname     = "app.terraform.io"       # default; set to your TFE hostname if applicable
    
    # Other AFT parameters...
  }
  ```
**注意**  
此參數僅適用於 Terraform Enterprise 或 HCP Terraform 部署。
**注意**  
如果您目前正在 AFT 管理帳戶中利用 Terraform 的 OIDC 提供者，您必須先刪除該提供者，才能選擇加入此整合。AFT 會在部署時為您重新建立該提供者。

**步驟 6：呼叫 Account Factory for Terraform 模組以部署 AFT** 

 使用您為具有 **AdministratorAccess** 憑證的 AWS Control Tower 管理帳戶建立的角色來呼叫 AFT 模組。AWS Control Tower 透過 AWS Control Tower 管理帳戶佈建 Terraform 模組，這會建立協調 AWS Control Tower 帳戶工廠請求所需的所有基礎設施。

 您可以在 GitHub 的 AFT [儲存庫中檢視 AFT](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main) 模組。整個 GitHub 儲存庫會被視為 AFT 模組。如需執行 AFT 模組和部署 AFT 所需的輸入相關資訊，請參閱 [README 檔案](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/blob/main/README.md)。或者，您可以在 [Terraform 登錄](https://registry.terraform.io/modules/aws-ia/control_tower_account_factory/aws/latest)檔中檢視 AFT 模組。

 如果您在環境中建立了用於管理 Terraform 的管道，您可以將 AFT 模組整合到現有的工作流程中。否則，請從使用所需登入資料進行身分驗證的任何環境執行 AFT 模組。

 逾時會導致部署失敗。我們建議您使用 AWS Security Token Service (STS) 登入資料，以確保您的逾時足以進行完整部署。 AWS STS 登入資料的最短逾時為 60 分鐘。如需詳細資訊，請參閱*AWS Identity and Access Management 《 使用者指南*[》中的 IAM 中的臨時安全登入](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html)資料。

**注意**  
 您可以等待最多 30 分鐘讓 AFT 透過 Terraform 模組完成部署。

 **步驟 7：管理 Terraform 狀態檔案** 

 部署 AFT 時會產生 Terraform 狀態檔案。此成品說明 Terraform 建立的資源狀態。如果您打算更新 AFT 版本，請務必預先保存 Terraform 狀態檔案，或使用 Amazon S3 和 DynamoDB 設定 Terraform 後端。AFT 模組不會管理後端 Terraform 狀態。

**注意**  
 您有責任保護 Terraform 狀態檔案。某些輸入變數可能包含敏感值，例如私有`ssh`金鑰或 Terraform 字符。根據您的部署方法，這些值可以在 Terraform 狀態檔案中以純文字形式檢視。如需詳細資訊，請參閱 HashiCorp 網站上的[狀態敏感資料](https://www.terraform.io/docs/language/state/sensitive-data.html)。