

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

# 使用 AWS Control Tower Account Factory for Terraform (AFT) 佈建帳戶
<a name="taf-account-provisioning"></a>

AWS Control Tower Account Factory for Terraform (AFT) 採用 GitOps 模型，可自動化 AWS Control Tower 中的帳戶佈建和更新程序。

使用 AFT，您可以建立帳戶請求 Terraform 檔案，其中包含叫用 AFT 工作流程的輸入。帳戶佈建和更新完成後，AFT 工作流程會繼續執行 AFT 帳戶佈建架構和帳戶自訂步驟。

AFT 不會影響 AWS Control Tower 中的工作流程效能。如果您透過 AFT 或 Account Factory 佈建帳戶，則會發生相同的後端工作流程。

## 先決條件
<a name="aft-prerequisites"></a>

**注意**  
AFT 帳戶佈建必須以 AWS Control Tower 中啟用 AWSControlTowerBaseline 的組織單位 (OU) 為目標。如需 AWSControlTowerBaseline 的詳細資訊，請參閱：[在 OU 層級套用的基準類型](types-of-baselines.md#ou-baseline-types)。

當您開始使用 AFT 時，您將建立下列項目：
+ 在 AWS Control Tower 中，為您的 AFT 環境建立 OU，然後建立 AFT 管理帳戶。請記下帳戶 ID，以便您稍後使用 Terraform 模組部署 AFT 時，可以在 `main.tf` 檔案中輸入帳戶 ID。您可以在 AWS Control Tower **Control 詳細資訊**頁面上檢視此帳戶 ID。如需詳細資訊，請參閱 [Terraform 文件](https://developer.hashicorp.com/terraform/tutorials/aws/aws-control-tower-aft)。
+ 完整部署 AFT 環境的一或多個`git`儲存庫。如需詳細資訊，請參閱 [AFT 的部署後步驟](https://docs.aws.amazon.com/controltower/latest/userguide/aft-post-deployment.html)。
+ 完全部署的 AFT 環境。如需詳細資訊，請參閱[適用於 Terraform 的 AWS Control Tower 帳戶工廠概觀 (AFT)](https://docs.aws.amazon.com/controltower/latest/userguide/aft-overview.html) 和適用於 [Terraform 的部署 AWS Control Tower 帳戶工廠 (AFT)。](https://docs.aws.amazon.com/controltower/latest/userguide/aft-getting-started.html)另請參閱 [Terraform 文件](https://developer.hashicorp.com/terraform/tutorials/aws/aws-control-tower-aft)。

**提示**  
您可以從 AWS Control Tower 主控台使用建立帳戶建立 AFT 管理**帳戶**。如需詳細資訊，請參閱[佈建方法](https://docs.aws.amazon.com//controltower/latest/userguide/methods-of-provisioning.html)。  
此外，您可以選擇在 **aft-account-customizations** 儲存庫中建立帳戶範本資料夾，以協助定義其他帳戶。

對於透過自動註冊註冊的帳戶：
+ 透過 AFT 建立新帳戶會繼續正常運作。
+ 現有的帳戶匯入需要額外的步驟：
  + 註冊 OU 以在匯入之前建立必要的佈建產品。
  + 註冊 OU 將發出 `CreateManagedAccount`和 `UpdateManagedAccount`事件，啟用 AFT 自訂。

如需 AFT 具有部署限制 AWS 區域 之處的詳細資訊，請參閱 [AWS Control Tower 中的限制和配額](limits.md)和 [控制限制](control-limitations.md)。

[Terraform 文件](https://developer.hashicorp.com/terraform/tutorials/aws/aws-control-tower-aft)包含如何為 Terraform 設定 AWS Control Tower 帳戶工廠 (AFT) 的良好概觀。

# 適用於 Terraform (AFT) 的 AWS Control Tower 帳戶工廠概觀
<a name="aft-overview"></a>

 Account Factory for Terraform (AFT) 會設定 Terraform 管道，協助您在 AWS Control Tower 中佈建和自訂帳戶。AFT 為您提供 Terraform 型帳戶佈建的優勢，同時允許您使用 AWS Control Tower 管理您的帳戶。

 使用 AFT，您可以建立*帳戶請求 Terraform 檔案*，以取得觸發帳戶佈建之 AFT 工作流程的輸入。帳戶佈建階段完成後，AFT 會自動在帳戶自訂階段開始之前執行一系列步驟。如需詳細資訊，請參閱 [AFT 帳戶佈建管道](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provisioning-framework.html)。

 AFT 支援 Terraform Cloud、Terraform Enterprise 和 Terraform Community Edition。使用 AFT，您可以使用輸入檔案和簡單的`git push`命令來啟動帳戶建立，並自訂新的或現有的帳戶。帳戶建立包括所有 AWS Control Tower 控管優勢和帳戶自訂，可協助您符合組織的標準安全程序和合規準則。

 AFT 支援帳戶自訂請求追蹤。每次您提交帳戶自訂請求時，AFT 都會產生唯一的追蹤字符，透過 AFT 自訂 AWS Step Functions 狀態機器傳遞，該機器會將字符記錄為執行的一部分。然後，您可以使用 Amazon CloudWatch Logs 洞見查詢來搜尋時間戳記範圍並擷取請求字符。因此，您可以看到字符隨附的承載，以便在整個 AFT 工作流程中追蹤您的帳戶自訂請求。如需 CloudWatch Logs 和 Step Functions 的相關資訊，請參閱下列內容：
+  《Amazon CloudWatch Logs 使用者指南》**中的[什麼是 Amazon CloudWatch Logs？](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) 
+  《AWS Step Functions 開發人員指南》**中的[什麼是 AWS Step Functions？](https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html) 

AFT 結合了其他 AWS 服務的功能，以[元件服務](aft-components.md)建置架構，以及部署 Terraform Infrastructure as Code (IaC) 的管道。AFT 可讓您：
+ 在 GitOps 模型中提交帳戶佈建和更新請求
+ 存放帳戶中繼資料和稽核歷史記錄
+ 套用帳戶層級標籤
+ 將自訂新增至所有帳戶、一組帳戶或個別帳戶
+ 啟用功能選項

AFT 會建立稱為 *AFT 管理帳戶*的獨立帳戶，以部署 AFT 功能。您必須先擁有現有的 AWS Control Tower 登陸區域，才能設定 AFT。AFT 管理帳戶與 AWS Control Tower 管理帳戶不同。

**AFT 提供彈性**
+ **平台彈性：**AFT 支援任何 Terraform Distribution 進行初始部署和持續操作：Community Edition、Cloud 和 Enterprise。
+ **版本控制系統的彈性：**AFT 支援 AWS CodeCommit，以及透過 的替代版本控制來源 AWS CodeConnections。

**AFT 提供功能選項**

您可以根據最佳實務啟用數個功能選項：
+ 建立用於記錄資料事件的組織層級 CloudTrail 
+ 刪除帳戶 AWS 的預設 VPC
+ 將佈建帳戶註冊至 AWS 企業支援計劃

**注意**  
AFT 管道不適用於部署您帳戶執行應用程式所需的資源，例如 Amazon EC2 執行個體。它僅用於自動佈建和自訂 AWS Control Tower 帳戶。

## 影片演練
<a name="terraform-provisioning-video"></a>

此影片 (7：33) 說明如何使用 AWS Control Tower Account Factory for Terraform 部署帳戶。若要獲得更佳的觀賞效果，請選取影片右下角的圖示，將影片放大至全螢幕。並提供字幕。

[![AWS Videos](http://img.youtube.com/vi/eDbNvHz02dk/0.jpg)](http://www.youtube.com/watch?v=eDbNvHz02dk)


# AFT 架構
<a name="aft-architecture"></a>

## 操作順序
<a name="aft-operation"></a>

 您可以在 AFT 管理帳戶中執行 AFT 操作。對於完整的帳戶佈建工作流程，圖表中從左到右的階段順序如下：

1.  帳戶請求會建立並提交至管道。您可以一次建立和提交多個帳戶請求。Account Factory first-in-first-out順序處理請求。如需詳細資訊，請參閱[提交多個帳戶請求](https://docs.aws.amazon.com/controltower/latest/userguide/aft-multiple-account-requests.html)。

1.  每個帳戶都會佈建。此階段會在 AWS Control Tower 管理帳戶中執行。

1.  全域自訂會在針對每個付費帳戶建立的管道中執行。

1.  如果在初始帳戶佈建請求中指定自訂，則自訂只會在目標帳戶上執行。如果您有已佈建的帳戶，則必須在帳戶的管道中手動啟動進一步的自訂。

**適用於 Terraform 的 AWS Control Tower 帳戶工廠 – 帳戶佈建工作流程 **

![\[圖：AFT 工作流程圖表\]](http://docs.aws.amazon.com/zh_tw/controltower/latest/userguide/images/high-level-aft-diagram.png)


# Cost
<a name="aft-pricing"></a>

AFT 沒有額外費用。您只需為 AFT 部署的資源、AFT 啟用 AWS 的服務，以及您在 AFT 環境中部署的資源付費。

預設 AFT 組態包含 AWS PrivateLink 端點的配置，以增強資料保護和安全性，以及支援 AWS CodeBuild 所需的 NAT 閘道。如需此基礎設施定價的詳細資訊，請參閱 NAT Gateway 的[AWS PrivateLink 定價](https://aws.amazon.com//privatelink/pricing/)和 Amazon VPC 定價。 [https://aws.amazon.com//vpc/pricing/](https://aws.amazon.com//vpc/pricing/)如需管理這些成本的詳細資訊，請聯絡您的 AWS 客戶代表。您可以變更 AFT 的這些預設設定。

# 部署適用於 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)。

# 部署後步驟
<a name="aft-post-deployment"></a>

AFT 基礎設施部署完成後，請依照這些額外步驟完成設定程序，並準備好佈建帳戶。

**步驟 1：使用所需的 VCS 供應商完成 CodeConnections **

如果您選擇第三方 VCS 提供者，AFT 會建立 CodeConnections，然後進行確認。請參閱 ，[AFT 中原始程式碼版本控制的替代方案](aft-alternative-vcs.md)了解如何使用您偏好的 VCS 設定 AFT。

建立 AWS CodeStar 連線的初始步驟是由 AFT 完成。您必須確認連線。

**步驟 2：填入每個儲存庫**

AFT 要求您管理[四個儲存庫：](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos)

1. 帳戶請求 – 此儲存庫會處理提出或更新帳戶請求。[可用的範例](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-account-request) 。如需 AFT 帳戶請求的詳細資訊，請參閱 [使用 AFT 佈建新帳戶](aft-provision-account.md)。

1. AFT 帳戶佈建自訂 – 此儲存庫會在開始全域自訂階段之前，管理套用到由 AFT 建立和使用 AFT 管理的所有帳戶的自訂。[可用的範例](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-account-provisioning-customizations) 。若要建立 AFT 帳戶佈建自訂，請參閱 [建立您的 AFT 帳戶佈建自訂狀態機器](aft-provisioning-framework.md#aft-create-customizations)。

1. 全域自訂 – 此儲存庫會管理套用至由 AFT 建立和使用 AFT 管理的所有帳戶的自訂。[可用的範例](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-global-customizations) 。若要建立 AFT 全域自訂，請參閱 [套用全域自訂](aft-account-customization-options.md#aft-global-customizations)。

1. 帳戶自訂 – 此儲存庫會管理僅套用至由 AFT 建立和使用 AFT 管理的特定帳戶的自訂。[可用的範例](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-account-customizations) 。若要建立 AFT 帳戶自訂，請參閱 [套用帳戶自訂](aft-account-customization-options.md#aft-account-customizations)。

 AFT 預期每個儲存庫都遵循特定的目錄結構。用於填入儲存庫的範本和描述如何填入範本的指示，可在 [AFT github 儲存庫](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos)的 Account Factory for Terraform 模組中使用。

# 使用 AFT 佈建新帳戶
<a name="aft-provision-account"></a>

*本節假設您已設定 AFT 和 AFT 管理帳戶，而且您正在佈建其他帳戶。*

若要使用 AFT 佈建新帳戶，請建立帳戶請求 Terraform 檔案。此檔案包含 **aft-account-request** 儲存庫中參數的輸入。建立帳戶請求 Terraform 檔案之後，請執行 開始處理您的帳戶請求`git push`。此命令會在 中叫用 操作 AWS CodePipeline，該`ct-aft-account-request`操作會在帳戶佈建完成後在 AFT 管理帳戶中建立。如需詳細資訊，請參閱 [AFT 帳戶佈建管道](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provisioning-framework.html)。

## 帳戶請求 Terraform 檔案參數
<a name="w2aac44c33c15b7"></a>

 您必須在帳戶請求 Terraform 檔案中包含下列參數。您可以在 GitHub 上檢視[範例帳戶請求 Terraform 檔案](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-account-request)。
+  的值在每個 AWS 帳戶 請求中`module name`必須是唯一的。
+  的值`module source`是 AFT 提供之帳戶請求 Terraform 模組的路徑。
+  的值會`control_tower_parameters`擷取建立 AWS Control Tower 帳戶所需的輸入。此值包含下列輸入欄位：
  + `AccountEmail`
  + `AccountName`
  +  `ManagedOrganizationalUnit` 
  + `SSOUserEmail`
  + `SSOUserFirstName`
  + `SSOUserLastName`

**注意**  
 您無法在帳戶佈建期間`control_tower_parameters`變更您為 提供的輸入。  
 在 **aft-account-request** 儲存庫`ManagedOrganizationalUnit`中指定 支援的格式包括 `OUName`和 `OUName (OU-ID)`。
+  `account_tags` 會擷取使用者定義的金鑰和值，這些金鑰和值可根據業務準則 AWS 帳戶 進行標記。如需詳細資訊，請參閱*AWS Organizations 《 使用者指南*》中的[標記 AWS Organizations 資源](https://docs.aws.amazon.com//organizations/latest/userguide/orgs_tagging.html)。
+  的值會`change_management_parameters`擷取其他資訊，例如建立帳戶請求的原因，以及啟動帳戶請求的人員。此值包含下列輸入欄位：
  + `change_reason`
  + `change_requested_by`
+  `custom_fields` 在 **/aft/account-request/custom-fields/** 下的付費帳戶中，使用部署為 SSM 參數的索引鍵和值擷取其他中繼資料。您可以在帳戶自訂期間參考此中繼資料，以部署適當的控制項。例如，受法規合規約束的帳戶可能會部署額外的 AWS Config 規則。您使用 收集的中繼資料`custom_fields`可以在帳戶佈建和更新期間叫用其他處理。如果從帳戶請求中移除自訂欄位，則自訂欄位會從佈建帳戶的 SSM 參數存放區中移除。
+  （選用） 會`account_customizations_name`擷取 **aft-account-customizations** 儲存庫中的帳戶範本資料夾。如需詳細資訊，請參閱[帳戶自訂](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html)。

# 提交多個帳戶請求
<a name="aft-multiple-account-requests"></a>

 AFT 一次處理一個帳戶請求，但您可以將多個帳戶請求提交至 AFT 管道。當您向 AFT 管道提交多個帳戶請求時，AFT 會排入佇列，並以先進先出順序處理帳戶請求。

**注意**  
 您可以為您希望 AFT 在單一帳戶請求 Terraform 檔案中佈建或串聯多個帳戶請求的每個帳戶建立帳戶請求 Terraform 檔案。

# 更新現有帳戶
<a name="aft-update-account"></a>

**自動註冊相容性**  
如果您的組織使用自動註冊進行自動帳戶註冊，請注意，AFT 對匯入這些帳戶有限制。透過自動註冊註冊的帳戶缺少 AFT 匯入工作流程所需的 Service Catalog 佈建產品。  
**解決方法：**使用註冊 OU 功能為自動註冊的帳戶建立佈建產品。這可為 AFT 自訂啟用必要的生命週期事件。

 您可以編輯先前提交的帳戶請求並執行 ，以更新 AFT 佈建的帳戶`git push`。此命令會叫用帳戶佈建工作流程，並可處理帳戶更新請求。您可以更新 的輸入`ManagedOrganizationalUnit`，這是 所需值的一部分`control_tower_parameters`。

`ManagedOrganizationalUnit` 是可在所有 中更新的唯一參數`control_tower_parameters`。不過，屬於帳戶請求 Terraform 檔案的其他參數可以更新，例如 `custom_fields`。如需詳細資訊，請參閱[使用 AFT 佈建新帳戶](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provision-account.html)。

例如，若要更新 AFT 帳戶的名稱或電子郵件地址，您可以定義帳戶`custom_fields`請求檔案中的詳細資訊。透過這樣做，您可以建立 SSM 參數，您可以在全域自訂期間傳入`aws_account_alternate_contact`資源。

```
resource "aws_account_alternate_contact" "operations" {

  alternate_contact_type = "OPERATIONS"

  name          = "Example"
  title         = "Example"
  email_address = "someone@example.com"
  phone_number  = "+1234567890"
}
```

您可以為其他聯絡類型新增類似的欄位，例如操作和安全性。在全球自訂中，為每個自訂欄位新增資料查詢，以確保您查詢在帳戶請求中建立的所有欄位：

```
data "aws_ssm_parameter" "billing_name" {
            name = "/aft/account-request/custom-fields/billing_name"
            }
            
            data "aws_ssm_parameter" "billing_title" {
            name = "/aft/account-request/custom-fields/billing_title"
            }
            
            data "aws_ssm_parameter" "billing_email_address" {
            name = "/aft/account-request/custom-fields/billing_email_address"
            }
            
            data "aws_ssm_parameter" "billing_phone_number" {
            name = "/aft/account-request/custom-fields/billing_phone_number"
            }
```

最後，在全球自訂檔案中，建立替代聯絡人資源。您需要為您在帳戶請求中建立的每個聯絡類型定義其中一個區塊：

```
resource "aws_account_alternate_contact" "billing" {
            
            alternate_contact_type = "BILLING"
            
            name          = data.aws_ssm_parameter.billing_name.value
            title         = data.aws_ssm_parameter.billing_title.value
            email_address = data.aws_ssm_parameter.billing_email_address.value
            phone_number  = data.aws_ssm_parameter.billing_phone_number.value
            }
```

**注意**  
 您無法在帳戶佈建期間`control_tower_parameters`變更您為 提供的輸入。  
 在 **aft-account-request** 儲存庫`ManagedOrganizationalUnit`中指定 支援的格式包括 `OUName`和 `OUName (OU-ID)`。

## 更新 AFT 未佈建的帳戶
<a name="aft-update-account-not-provision"></a>

 您可以在 **aft-account-request** 儲存庫中指定帳戶，以更新在 AFT 外部建立的 AWS Control Tower 帳戶。

**注意**  
 確保所有帳戶詳細資訊皆正確且符合 AWS Control Tower 組織和個別 AWS Service Catalog 佈建的產品。

**AWS 帳戶 使用 AFT 更新現有 的先決條件**
+  AWS 帳戶 必須在 AWS Control Tower 中註冊。
+  AWS 帳戶 必須是 AWS Control Tower 組織的一部分。

# Terraform 和 AFT 版本
<a name="version-supported"></a>

Account Factory for Terraform (AFT) 支援 Terraform 版本 `1.6.0` 或更新版本。您必須提供 Terraform 版本做為 AFT 部署程序的輸入參數，如以下範例所示。

```
terraform_version = "1.6.0"
```

## Terraform 分佈
<a name="terraform-distributions"></a>

AFT 支援三種 Terraform 分佈：
+ Terraform Community Edition
+ Terraform 雲端
+ Terraform Enterprise

這些分佈會在以下各節中說明。在 AFT 引導程序期間，提供您選擇的 Terraform 分佈做為輸入參數。如需 AFT 部署和輸入參數的詳細資訊，請參閱 [部署適用於 Terraform (AFT) 的 AWS Control Tower 帳戶工廠](aft-getting-started.md) 。

如果您選擇 Terraform Cloud 或 Terraform Enterprise 分佈，您為 指定的 [API 權](https://www.terraform.io/cloud-docs/users-teams-organizations/api-tokens)杖`terraform_token `必須是使用者或團隊 API 權杖。並非所有必要的 APIs都支援 Organization 權杖。基於安全考量，您必須藉由指派 [terraform 變數](https://www.terraform.io/cloud-docs/workspaces/variables/managing-variables)，避免將此權杖的值簽入版本控制系統 (VCS)，如以下範例所示。

```
 # Sensitive variable managed in Terraform Cloud:
 terraform_token = var.terraform_cloud_token
```

### Terraform Community Edition
<a name="terraform-oss"></a>

當您選取 Terraform Community Edition 做為分佈時，AFT 會在 AFT 管理帳戶中為您管理 Terraform 後端。AFT 會下載`terraform-cli`指定 Terraform 版本的 ，以在 AFT 部署和 AFT 管道階段執行。產生的 Terraform 狀態組態會存放在 Amazon S3 儲存貯體中，並以下列格式命名：

```
aft-backend-[account_id]-primary-region
```

AFT 也會建立 Amazon S3 儲存貯體，在另一個儲存貯體中複寫您的 Terraform 狀態組態 AWS 區域，用於災難復原，名稱為 ，格式如下：

```
aft-backend-[account_id]-secondary-region
```

建議您為這些 Terraform 狀態 Amazon S3 儲存貯體上的刪除函數啟用多重驗證 (MFA)。若要進一步了解 Terraform Community Edition，請參閱 [Terraform 文件](https://www.terraform.io/docs/cli/index.html)。

若要選取 Terraform OSS 做為分佈，請提供下列輸入參數：

```
terraform_distribution = "oss"
```

### Terraform 雲端
<a name="terraform-cloud"></a>

 當您選取 Terraform Cloud 做為分佈時，AFT 會在 Terraform Cloud 組織中為下列元件建立工作區，這會啟動 API 驅動的工作流程。
+  帳戶請求 
+  AFT 佈建之帳戶的 AFT 自訂 
+  AFT 佈建之帳戶的帳戶自訂 
+  AFT 佈建之帳戶的全域自訂 

 Terraform Cloud 會管理產生的 Terraform 狀態組態。

 當您選取 Terraform Cloud 做為分佈時，請提供下列輸入參數：
+  `terraform_distribution = "tfc"` 
+  `terraform_token` – 此參數包含 Terraform Cloud 字符的值。AFT 會將 標記為敏感，並將值儲存為 AFT 管理帳戶中 SSM 參數存放區中的安全字串。我們建議您根據公司的安全政策和合規準則定期輪換 Terraform 字符的值。Terraform 權杖應該是使用者或團隊層級 API 權杖。不支援組織字符。
+  `terraform_org_name` – 此參數包含 Terraform Cloud 組織的名稱。

**注意**  
 不支援單一 Terraform Cloud 組織中的多個 AFT 部署。

 如需有關如何設定 Terraform Cloud 的資訊，請參閱 [Terraform 文件](https://www.terraform.io/docs/cloud/index.html)。

### Terraform Enterprise
<a name="terraform-enterprise"></a>

當您選取 Terraform Enterprise 做為分佈時，AFT 會在 Terraform Enterprise 組織中為下列元件建立工作區，並觸發產生 Terraform 執行的 API 驅動工作流程。
+ 帳戶請求
+ 由 AFT 佈建之帳戶的 AFT 帳戶佈建自訂
+ AFT 佈建的帳戶的帳戶自訂
+ AFT 佈建之帳戶的全域自訂

產生的 Terraform 狀態組態是由您的 Terraform Enterprise 設定管理。

若要選取 Terraform Enterprise 做為分佈，請提供下列輸入參數：
+  `terraform_distribution = "tfe"` 
+ `terraform_token` – 此參數包含 Terraform Enterprise 字符的值。AFT 將其值標記為敏感，並將其儲存為 SSM 參數存放區 AFT 管理帳戶中的安全字串。我們建議您根據公司的安全政策和合規準則，定期輪換 Terraform 字符的值。
+ `terraform_org_name` – 此參數包含 Terraform Enterprise 組織的名稱。
+ `terraform_api_endpoint` – 此參數包含 Terraform Enterprise 環境的 URL。此參數的值格式必須為：

  ```
  https://{fqdn}/api/v2/
  ```

請參閱 [Terraform 文件](https://www.terraform.io/docs/enterprise/index.html)以進一步了解如何設定 Terraform Enterprise。

# 檢查 AFT 版本
<a name="check-aft-version"></a>

您可以透過查詢 AWS SSM 參數存放區金鑰來檢查已部署的 AFT 版本：

```
/aft/config/aft/version
```

如果您使用登錄檔方法，則可以鎖定版本。

```
module "control_tower_account_factory" {
  source  = "aws-ia/control_tower_account_factory/aws"
  version = "1.3.2"
  # insert the 6 required variables here
}
```

您可以在 AFT [儲存庫中檢視 AFT ](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main)版本的詳細資訊。

# 更新 AFT 版本
<a name="update-aft-version"></a>

登入 AWS Control Tower 管理帳戶以啟動此 AFT 更新。

您可以從`main`儲存庫分支中提取已部署的 AFT 版本，以更新該版本：

```
terraform get -update
```

提取完成後，您可以重新執行 Terraform 計劃或執行套用，以使用最新的變更更新 AFT 基礎設施。

# 啟用功能選項
<a name="aft-feature-options"></a>

AFT 會根據最佳實務提供功能選項。您可以在 AFT 部署期間，透過功能旗標選擇加入這些功能。如需 AFT 輸入組態參數的詳細資訊[使用 AFT 佈建新帳戶](aft-provision-account.md)，請參閱。

預設不會啟用這些功能。您必須明確啟用環境中的每個項目。

**Topics**
+ [AWS CloudTrail 資料事件](#cloudtrail-data-event-option)
+ [AWS 企業支援計劃](#enterprise-support-option)
+ [刪除 AWS 預設 VPC](#delete-default-vpc-option)

## AWS CloudTrail 資料事件
<a name="cloudtrail-data-event-option"></a>

啟用時， AWS CloudTrail 資料事件選項會設定這些功能。
+ 在適用於 CloudTrail 的 AWS Control Tower 管理帳戶中建立 Organization Trail
+ 開啟 Amazon S3 和 Lambda 資料事件的記錄
+ 使用加密將所有 CloudTrail 資料事件加密並匯出至 AWS Control Tower Log Archive 帳戶中的 `aws-aft-logs-*` S3 儲存貯體 AWS KMS 
+ 開啟**日誌檔案驗證**設定

若要啟用此選項，請在 AFT 部署輸入組態中將下列功能旗標設為 **True**。

```
aft_feature_cloudtrail_data_events
```

**必要條件**

啟用此功能選項之前，請確定您的組織中 AWS CloudTrail 已啟用 的受信任存取。

**若要檢查 CloudTrail 的受信任存取狀態：**

1. 導覽至 AWS Organizations 主控台。

1. 選擇**服務 > CloudTrail**。

1. 然後視需要選取右上角的**啟用受信任存取**。

您可能會收到警告訊息，建議您使用 AWS CloudTrail 主控台，但在這種情況下，請忽略警告。在您允許受信任存取之後，AFT 會建立線索做為啟用此功能選項的一部分。如果未啟用受信任存取，當 AFT 嘗試為資料事件建立追蹤時，您會收到錯誤訊息。

**注意**  
此設定適用於組織層級。啟用此設定會影響 中的所有帳戶 AWS Organizations，無論它們是否由 AFT 管理。Amazon S3 資料事件會排除啟用時 AWS Control Tower Log Archive 帳戶中的所有儲存貯體。請參閱 [AWS CloudTrail 使用者指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)以進一步了解 CloudTrail。

## AWS 企業支援計劃
<a name="enterprise-support-option"></a>

啟用此選項時，AFT 管道會為 AFT 佈建的帳戶開啟 AWS 企業支援計劃。

AWS 帳戶預設會啟用 AWS 基本支援計劃。AFT 為 AFT 佈建的帳戶提供企業支援層級的自動註冊。佈建程序會開啟帳戶的支援票證，請求將其新增至 AWS 企業支援計劃。

若要啟用企業支援選項，請在 AFT 部署輸入組態中將下列功能旗標設為 **True**。

```
aft_feature_enterprise_support=false
```

請參閱[比較 AWS 支援計劃](https://aws.amazon.com/premiumsupport/plans/)以進一步了解 AWS 支援計劃。

**注意**  
若要允許此功能運作，您必須將付款人帳戶註冊到企業支援計劃中。

## 刪除 AWS 預設 VPC
<a name="delete-default-vpc-option"></a>

 當您啟用此選項時，即使尚未在這些 中部署 AWS Control Tower 資源 AWS 區域，AFT 仍會刪除 AFT 管理帳戶和 中的所有 AWS 預設 VPCs AWS 區域。

 AFT 不會自動刪除 AFT 佈建的任何 AWS Control Tower 帳戶或您透過 AFT 註冊 AWS Control Tower 的現有 AWS 帳戶 AWS 的預設 VPCs。

根據預設 AWS 區域，會在每個 中設定 VPC 來建立新 AWS 帳戶。您的企業可能有建立 VPCs的標準實務，這需要您刪除 AWS 預設 VPC 並避免啟用它，尤其是 AFT 管理帳戶。

若要啟用此選項，請在 AFT 部署輸入組態中將下列功能旗標設為 **True**。

```
aft_feature_delete_default_vpcs_enabled
```

以下是 AFT 部署輸入組態的範例。

```
module "aft" {
  source = "github.com/aws-ia/terraform-aws-control_tower_account_factory"
  ct_management_account_id    = var.ct_management_account_id
  log_archive_account_id      = var.log_archive_account_id
  audit_account_id            = var.audit_account_id
  aft_management_account_id   = var.aft_management_account_id
  ct_home_region              = var.ct_home_region
  tf_backend_secondary_region = var.tf_backend_secondary_region

  vcs_provider                                  = "github"
  account_request_repo_name                     = "${var.github_username}/learn-terraform-aft-account-request"
  account_provisioning_customizations_repo_name = "${var.github_username}/learn-terraform-aft-account-provisioning-customizations"
  global_customizations_repo_name               = "${var.github_username}/learn-terraform-aft-global-customizations"
  account_customizations_repo_name              = "${var.github_username}/learn-terraform-aft-account-customizations"

  # Optional Feature Flags
  aft_feature_delete_default_vpcs_enabled = true
  aft_feature_cloudtrail_data_events      = false
  aft_feature_enterprise_support          = false
}
```

請參閱[預設 VPC 和預設子網路](https://docs.aws.amazon.com/vpc/latest/userguide/default-vpc.html)，進一步了解預設 VPCs。

# 適用於 Terraform 的 AWS Control Tower 帳戶工廠的資源考量事項
<a name="aft-resources"></a>

當您使用 AWS Control Tower Account Factory for Terraform 設定登陸區域時，會在 AWS 您的帳戶內建立數種類型的 AWS 資源。

**搜尋資源**
+ 您可以使用標籤來搜尋最新的 AFT 資源清單。您搜尋的鍵/值對為：

  ```
  Key: managed_by | Value: AFT
  ```
+ 對於不支援標籤的元件服務，您可以在資源名稱`aft`中找到搜尋 的資源。

**注意**  
AFT 不會在管理帳戶中建立任何 AWS Backup 資源。

**帳戶最初建立的資源資料表**


**適用於 Terraform 管理帳戶的 AWS Control Tower 帳戶工廠**  

| **AWS 服務** | **Resource Type (資源類型)** | **資源名稱** | 
| --- | --- | --- | 
| AWS Identity and Access Management | 角色 |  AWSAFTAdmin AWSAFTExecution AWSAFTService ct-aft-\$1 aft-\$1 codebuild\$1trigger\$1role python-layer-builder-aft-common-\$1 | 
| AWS Identity and Access Management | 政策 | aft-\$1 | 
| CodeCommit： | 儲存庫 | aft-\$1 | 
| CodeBuild： | 組建專案 | aft-\$1 ct-aft-\$1 python-layer-builder-aft-common-\$1  | 
| 程式碼管道 | 管道 | **YourAccountId**-customizations-pipeline | 
| Amazon S3 | 儲存貯體 | aft-\$1  | 
| Lambda | 函數 | aft-\$1 | 
| Lambda | 層 | aft-common-\$1 | 
| DynamoDB | 表格 | aft-request aft-request-audit aft-request-metadata aft-controltower-events | 
| 步驟函數 | 狀態機器 | aft-account-provisioning-customizations aft-account-provisioning-framework aft-feature-options aft-invoke-customizations | 
| VPC | VPC | aft-management-vpc | 
| Amazon SNS | 主題 | aft-notifications aft-failure-notifications | 
| Amazon EventBridge | 事件匯流排 | aft-events-from-ct-management | 
| Amazon EventBridge | 事件規則 | aft-account-provisioning-customizations-trigger aft-account-request-codepipeline-trigger aft-lambda-account-request-processor aft-controltower-event-logger | 
| Key Management Service (KMS) | 客戶受管金鑰 | aft-backend-\$1-kms-key aft | 
| AWS Systems Manager | 參數存放區 | /aft/\$1  | 
| Amazon SQS | 佇列 | aft-account-request.fifo aft-account-request-dlg.fifo | 
| CloudWatch | 日誌群組 | /aws/\$1/ct-aft-\$1 /aws/\$1/aft-\$1 /aws/codebuild/python-layer-builder-aft-common-\$1 | 
| AWS 備份 | 保存庫 | aft-controltower-backup-vault | 
| AWS 備份 | 計劃 | aft-controltower-backup-plan | 
| AWS 支援中心 （選用） | 支援計劃 | Enterprise | 


**AWS 透過 AWS Control Tower Account Factory for Terraform 佈建的帳戶**  

| **AWS 服務** | **Resource Type (資源類型)** | **資源名稱** | 
| --- | --- | --- | 
| AWS Identity and Access Management | 角色 | AWSAFTExecution | 
| AWS 支援中心 （選用） | 支援計劃 | Enterprise | 


**AWS Control Tower 管理帳戶**  

| **AWS 服務** | **Resource Type (資源類型)** | **資源名稱** | 
| --- | --- | --- | 
| AWS Identity and Access Management | 角色 |  AWSAFTExecution AWSAFTService aft-controltower-events-rule  | 
| AWS Systems Manager | 參數存放區 | /aft/\$1 | 
| EventBridge | 事件規則 | aft-capture-ct-events | 
| CloudTrail （選用） | 線索 | aws-aft-CustomizationsCloudTrail | 
| AWS Support Center （選用） | 支援計劃 | Enterprise | 


**AWS Control Tower 日誌封存帳戶**  

| **AWS 服務** | **Resource Type (資源類型)** | **資源名稱** | 
| --- | --- | --- | 
| AWS Identity and Access Management | 角色 |  AWSAFTExecution AWSAFTService  | 
| Key Management Service (KMS) | 客戶受管金鑰 | aft | 
| Amazon S3 | 儲存貯體 | aws-aft-logs-\$1 aws-aft-s3-access-logs-\$1 | 
| AWS 支援中心 （選用） | 支援計劃 | Enterprise | 


**AWS Control Tower 稽核帳戶**  

| **AWS 服務** | **Resource Type (資源類型)** | **資源名稱** | 
| --- | --- | --- | 
| AWS Identity and Access Management | 角色 |  AWSAFTExecution AWSAFTService  | 
| AWS 支援中心 （選用） | 支援計劃 | Enterprise | 

# 必要角色
<a name="aft-required-roles"></a>

一般而言，角色和政策是 中身分和存取管理 (IAM) 的一部分 AWS。如需詳細資訊，請參閱 [https://docs.aws.amazon.com//IAM/latest/UserGuide/introduction.html](https://docs.aws.amazon.com//IAM/latest/UserGuide/introduction.html)。

AFT 會在 AFT 管理和 AWS Control Tower 管理帳戶中建立多個 IAM 角色和政策，以支援 AFT 管道的操作。這些角色是根據最低權限存取模型建立的，這會限制對每個角色和政策的最低必要動作和資源集的許可。這些角色和政策會獲指派 AWS 標籤`key:value`對，` managed_by:AFT`用於識別。

除了這些 IAM 角色之外，AFT 還會建立三個基本角色：
+ `AWSAFTAdmin` 角色
+ `AWSAFTExecution` 角色
+ `AWSAFTService` 角色

以下各節會說明這些角色。

**AWSAFTAdmin 角色，說明**

當您部署 AFT 時，`AWSAFTAdmin`角色會在 AFT 管理帳戶中建立。此角色允許 AFT 管道擔任 AWS Control Tower 和 AFT 佈建帳戶中`AWSAFTExecution`的角色，藉此執行與帳戶佈建和自訂相關的動作。

以下是連接到`AWSAFTAdmin`角色的內嵌政策 (JSON 成品）：

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::*:role/AWSAFTExecution",
                "arn:aws:iam::*:role/AWSAFTService"
            ]
        }
    ]
}
```

------

下列 JSON 成品顯示`AWSAFTAdmin`角色的信任關係。預留位置號碼`012345678901`會由 AFT 管理帳戶 ID 號碼取代。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678901:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

**AWSAFTExecution 角色，說明**

部署 AFT 時，`AWSAFTExecution`角色會在 AFT 管理和 AWS Control Tower 管理帳戶中建立。稍後，AFT 管道會在 AFT 帳戶佈建階段期間，在每個 AFT 佈建帳戶中建立`AWSAFTExecution`角色。

 AFT 一開始會利用`AWSControlTowerExecution`角色，在指定的帳戶中建立`AWSAFTExecution`角色。此`AWSAFTExecution`角色可讓 AFT 管道針對 AFT 佈建帳戶和共用帳戶，執行在 AFT 架構佈建和佈建自訂階段期間執行的步驟。

**不同的角色可協助您限制範圍**  
最佳實務是將自訂許可與 資源初始部署期間允許的許可分開。請記住，`AWSAFTService`角色適用於帳戶佈建，而`AWSAFTExecution`角色適用於帳戶自訂。此分隔會限制管道每個階段期間允許的許可範圍。如果您自訂 AWS Control Tower 共用帳戶，此區別尤其重要，因為共用帳戶可能包含敏感資訊，例如帳單詳細資訊或使用者資訊。

`AWSAFTExecution` 角色的許可： **AdministratorAccess** – AWS 受管政策 

下列 JSON 成品顯示連接至`AWSAFTExecution`角色的 IAM 政策 （信任關係）。預留位置號碼`012345678901`會由 AFT 管理帳戶 ID 號碼取代。

的信任政策 `AWSAFTExecution`

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678901:role/AWSAFTAdmin"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

**AWSAFTService 角色，說明**

此`AWSAFTService`角色會在所有已註冊和受管帳戶中部署 AFT 資源，包括共用帳戶和管理帳戶。先前僅由 `AWSAFTExecution`角色部署的資源。

該`AWSAFTService`角色旨在供服務基礎設施在佈建階段期間部署資源，而該`AWSAFTExecution`角色僅用於部署自訂。透過以此方式擔任角色，您可以在每個階段維持更精細的存取控制。

`AWSAFTService` 角色的許可： **AdministratorAccess** – AWS 受管政策 

下列 JSON 成品顯示連接至`AWSAFTService`角色的 IAM 政策 （信任關係）。預留位置號碼`012345678901`會由 AFT 管理帳戶 ID 號碼取代。

的信任政策 `AWSAFTService`

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::012345678901:role/AWSAFTAdmin"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

# 元件服務
<a name="aft-components"></a>

當您部署 AFT 時，元件會從每個 AWS 服務新增至您的 AWS 環境。
+ **[AWS Control Tower](https://docs.aws.amazon.com//controltower/latest/userguide/what-is-control-tower.html)** – AFT 使用 AWS Control Tower 管理帳戶中的 AWS Control Tower 帳戶工廠來佈建帳戶。
+ **[Amazon DynamoDB](https://docs.aws.amazon.com//amazondynamodb/latest/developerguide/Introduction.html)** – AFT 會在 AFT 管理帳戶中建立 Amazon DynamoDB 資料表，以存放帳戶請求、帳戶更新稽核歷史記錄、帳戶中繼資料和 AWS Control Tower 生命週期事件。AFT 也會建立 DynamoDB Lambda 觸發來啟動下游程序，例如啟動 AFT 帳戶佈建工作流程。
+ **[Amazon Simple Storage Service](https://docs.aws.amazon.com//AmazonS3/latest/userguide/Welcome.html)** – AFT 會在 AFT 管理帳戶和 AWS Control Tower 日誌封存帳戶中建立 Amazon Simple Storage Service (S3) 儲存貯體，以存放 AFT 管道所需的 AWS 服務所產生的日誌。AFT 也會在主要和次要 中建立 Terraform 後端 S3 儲存貯體 AWS 區域，以存放 AFT 管道工作流程期間產生的 Terraform 狀態。
+ **[Amazon Simple Notification Service](https://docs.aws.amazon.com//sns/latest/dg/welcome.html)** – AFT 會在 AFT 管理帳戶中建立 Amazon Simple Notification Service (SNS) 主題，該主題會在處理每個 AFT 帳戶請求後儲存成功和失敗通知。您可能會使用您選擇的通訊協定來接收這些訊息。
+ **[Amazon Simple Queuing Service](https://docs.aws.amazon.com//AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html)** – AFT 在 AFT 管理帳戶中建立 Amazon Simple Queuing Service (Amazon SQS) FIFO 佇列。佇列可讓您平行提交多個帳戶請求，但一次傳送一個請求給 AWS Control Tower 帳戶工廠，以進行循序處理。
+ **[AWS CodeBuild](https://docs.aws.amazon.com//codebuild/latest/userguide/welcome.html)** – AFT 在 AFT 管理帳戶中建立 AWS CodeBuild 組建專案，以在各種組建階段初始化、編譯、測試和套用 AFT 原始程式碼的 Terraform 計劃。
+ **[AWS CodePipeline](https://docs.aws.amazon.com//codepipeline/latest/userguide/welcome.html)** – AFT 在 AFT 管理帳戶中建立 AWS CodePipeline 管道，以與您所選、支援的 AFT 原始碼 AWS CodeStar 連線供應商整合，並在 AWS CodeBuild 中觸發建置任務。
+ **[AWS Lambda](https://docs.aws.amazon.com//lambda/latest/dg/welcome.html)** – AFT 在 AFT 管理帳戶中建立 AWS Lambda 函數和層，以在帳戶請求、AFT 帳戶佈建和帳戶自訂程序期間執行步驟。
+ **[AWS Systems Manager 參數存放](https://docs.aws.amazon.com//systems-manager/latest/userguide/systems-manager-parameter-store.html)**區 – AFT 會在 AFT 管理帳戶中設定 AWS Systems Manager 參數存放區，以存放 AFT 管道程序所需的組態參數。
+ **[Amazon CloudWatch](https://docs.aws.amazon.com//AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)** – AFT 在 AFT 管理帳戶中建立 Amazon CloudWatch 日誌群組，以存放由 AFT 管道使用之 AWS 服務產生的日誌。CloudWatch 日誌的保留期間設定為 `Never Expire`。
+ **[Amazon VPC](https://docs.aws.amazon.com//vpc/latest/userguide/what-is-amazon-vpc.html)** – AFT 建立 Amazon Virtual Private Cloud (VPC)，將 AFT 管理帳戶中的服務和資源隔離到單獨的聯網環境中，以提高安全性。
+ **[AWS KMS](https://docs.aws.amazon.com//kms/latest/developerguide/overview.html)** – AFT 在 AWS Key Management Service (KMS)。AFT 會建立金鑰來加密 Terraform 狀態、存放在 DynamoDB 資料表中的資料，以及 SNS 主題。這些日誌和成品會在 AFT 部署 AWS 資源和服務時產生。AFT 建立的 KMS 金鑰預設會啟用每年輪換。
+ **[AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com//IAM/latest/UserGuide/introduction.html)** – AFT 遵循建議的最低權限模型。它會視需要在 AFT 管理帳戶、AWS Control Tower 帳戶和 AFT 佈建帳戶中建立 AWS Identity and Access Management (IAM) 角色和政策，以在 AFT 管道工作流程期間執行所需的動作。
+ **[AWS Step Functions](https://docs.aws.amazon.com//step-functions/latest/dg/welcome.html)** – AFT 在 AFT 管理帳戶中建立 AWS Step Functions 狀態機器。這些狀態機器會協調和自動化 AFT 帳戶佈建架構和自訂的程序和步驟。
+ **[Amazon EventBridge](https://docs.aws.amazon.com//eventbridge/latest/userguide/eb-what-is.html)** – AFT 在 AFT 和 AWS Control Tower 管理帳戶中建立 Amazon EventBridge 事件匯流排，以在 AFT 管理帳戶的 DynamoDB 資料表中長期擷取和存放 AWS Control Tower 生命週期事件。AFT 在 AFT 管理和 AWS Control Tower 管理帳戶中建立 Amazon CloudWatch 事件規則，這會觸發執行 AFT 管道工作流程期間所需的多個步驟
+ **[AWS CloudTrail （選用）](https://docs.aws.amazon.com//awscloudtrail/latest/userguide/cloudtrail-user-guide.html)** – 啟用此功能時，AFT 會在 AWS Control Tower 管理帳戶中建立 AWS CloudTrail 組織追蹤，用於記錄 Amazon S3 儲存貯體和 AWS Lambda 函數的資料事件。AFT 會將這些日誌傳送至 AWS Control Tower 日誌封存帳戶中的中央 S3 儲存貯體。
+ **[AWS 支援 （選用）](https://aws.amazon.com//premiumsupport/)** – 啟用此功能時，AFT 會為 AFT 佈建的帳戶開啟 AWS 企業支援計劃。根據預設， AWS 帳戶會在基本 AWS 支援計劃啟用的情況下建立。

# AFT 帳戶佈建管道
<a name="aft-provisioning-framework"></a>

管道的帳戶佈建階段完成後，AFT 架構會繼續。它會自動執行一系列步驟，以確保新佈建的帳戶在[帳戶自訂](aft-account-customization-options.md)階段開始之前擁有詳細資訊。

**以下是 AFT 管道執行的後續步驟。**

1. 驗證帳戶請求輸入。

1. 擷取已佈建帳戶的相關資訊，例如帳戶 ID。

1. 將帳戶中繼資料存放在 AFT 管理帳戶中的 DynamoDB 資料表中。

1. 在新佈建的帳戶中建立 **AWSAFTExecution** IAM 角色。AFT 會擔任此角色來執行帳戶自訂階段，因為此角色會授予帳戶工廠產品組合的存取權。

1. 套用您在帳戶請求輸入參數中提供的帳戶標籤。

1. 套用您在 AFT 部署時選擇的 AFT 功能選項。

1. 套用您提供的 AFT 帳戶佈建自訂。下一節說明如何在`git`儲存庫中使用 AWS Step Functions 狀態機器設定這些自訂。此階段有時稱為*帳戶佈建架構*階段。這是核心佈建程序的一部分，但您先前已設定架構，在帳戶佈建工作流程中提供自訂整合，然後再將其他自訂新增至下一個階段的帳戶。

1. 對於每個佈建的帳戶，它會 AWS CodePipeline 在 AFT 管理帳戶中建立 ，該帳戶將執行以執行 （下一個、全域） [帳戶自訂](aft-account-customization-options.md)階段。

1. 叫用每個佈建 （和目標） 帳戶的帳戶自訂管道。

1. 傳送成功或失敗通知至 SNS 主題，您可以從中擷取訊息。

## 使用狀態機器設定帳戶佈建架構自訂
<a name="aft-customizations"></a>

如果您在佈建帳戶之前設定自訂、非 Terraform 整合，這些自訂會包含在 AFT 帳戶佈建工作流程中。例如，您可能需要特定自訂，以確保 AFT 建立的所有帳戶都符合組織的標準和政策，例如安全標準，而且這些標準可能會在其他自訂之前新增至帳戶。這些*帳戶佈建架構*自訂會在每個佈建帳戶上實作，之後才開始全球帳戶自訂階段。

**注意**  
本節所述的 AFT 功能適用於了解 AWS Step Functions 功能的進階使用者。或者，我們建議您在帳戶自訂階段與全球協助程式合作。

AFT 帳戶佈建架構會呼叫您定義的 AWS Step Functions 狀態機器，以實作您的自訂。請參閱 [AWS Step Functions 文件](https://docs.aws.amazon.com//step-functions/latest/dg/welcome.html)，進一步了解可能的 狀態機器整合。

以下是一些常見的整合。
+ 您選擇的語言 AWS Lambda 函數
+ AWS ECS 或 AWS Fargate 任務，使用 Docker 容器
+ 使用自訂工作者的 AWS Step Functions 活動，託管於 AWS 或內部部署
+ Amazon SNS 或 SQS 整合

如果未定義 AWS Step Functions 狀態機器，則階段會通過無操作。若要建立 AFT 帳戶佈建自訂狀態機器，請遵循 中的指示[建立您的 AFT 帳戶佈建自訂狀態機器](#aft-create-customizations)。新增自訂之前，請確定您已備妥先決條件。

這些類型的整合不屬於 AWS Control Tower，而且無法在 AFT 帳戶自訂的全域預先 API 階段期間新增。反之，AFT 管道可讓您將這些自訂設定為佈建程序的一部分，並在佈建工作流程中執行。您必須在啟動 AFT 帳戶佈建階段之前，事先建立您的狀態機器來實作這些自訂，如以下各節所述。

**建立狀態機器的先決條件**
+ 完全部署的 AFT。如需 AFT 部署的詳細資訊[部署適用於 Terraform (AFT) 的 AWS Control Tower 帳戶工廠](aft-getting-started.md)，請參閱 。
+ 在您的環境中設定儲存`git`庫以進行 AFT 帳戶佈建自訂。如需詳細資訊，請參閱[部署後步驟](aft-post-deployment.md)。

## 建立您的 AFT 帳戶佈建自訂狀態機器
<a name="aft-create-customizations"></a>

**步驟 1：修改狀態機器定義**

修改範例`customizations.asl.json`狀態機器定義。此範例在您為儲存 AFT 帳戶佈建自訂而設定的儲存`git`庫中可用，位於[部署後步驟](https://docs.aws.amazon.com//controltower/latest/userguide/aft-post-deployment.html)中。請參閱 [AWS Step Functions 開發人員指南](https://docs.aws.amazon.com//step-functions/latest/dg/welcome.html)，進一步了解狀態機器定義。

**步驟 2：包含對應的 Terraform 組態**

在具有自訂整合狀態機器定義的相同`git`儲存庫中包含`.tf`副檔名的 Terraform 檔案。例如，如果您選擇在狀態機器任務定義中呼叫 Lambda 函數，您會在相同的目錄中包含 `lambda.tf` 檔案。請務必包含自訂組態所需的 IAM 角色和許可。

當您提供適當的輸入時，AFT 管道會自動調用您的狀態機器，並將您的自訂部署為 AFT 帳戶佈建架構階段的一部分。

## 重新啟動 AFT 帳戶佈建架構和自訂
<a name="aft-provisioining-considerations"></a>

AFT 會針對透過 AFT 管道提供的每個帳戶執行帳戶佈建架構和自訂步驟。若要重新啟動帳戶佈建自訂，您可以使用下列兩種方法之一：

1. 對帳戶請求儲存庫中的現有帳戶進行任何變更。

1. 使用 AFT 佈建新帳戶。

# 帳戶自訂
<a name="aft-account-customization-options"></a>

AFT 可以在佈建帳戶中部署標準或自訂組態。在 AFT 管理帳戶中，AFT 為每個帳戶提供一個管道。使用此管道，您可以在所有帳戶、一組帳戶或個別帳戶中實作自訂。您可以執行 Python 指令碼、Bash 指令碼和 Terraform 組態，也可以在帳戶自訂階段中與 AWS CLI 互動。

## 概觀
<a name="aft-customizations-overview"></a>

在您選擇的`git`儲存庫中指定自訂之後，無論是存放全域自訂的儲存庫，或是存放帳戶自訂的儲存庫，帳戶自訂階段都會由 AFT 管道自動完成。若要追溯自訂帳戶，請參閱 [重新叫用自訂](#aft-re-invoke-customizations)。

**全域自訂 （選用）**

您可以選擇將特定自訂套用至 AFT 佈建的所有帳戶。例如，如果您需要建立特定 IAM 角色，或在每個帳戶中部署自訂控制項，則 AFT 管道中的全域自訂階段可讓您自動執行此操作。

**帳戶自訂 （選用）**

若要自訂個別帳戶或一組帳戶，與其他 AFT 佈建帳戶不同，您可以利用 AFT 管道的帳戶自訂部分來實作帳戶特定的組態。例如，只有特定帳戶可能需要存取網際網路閘道。

## 自訂先決條件
<a name="aft-account-customization-prerequisites"></a>

開始自訂帳戶之前，請確定已備妥這些先決條件。
+ 完全部署的 AFT。如需如何部署的資訊，請參閱 [設定和啟動適用於 Terraform 的 AWS Control Tower 帳戶工廠](aft-getting-started.md#aft-configure-and-launch)。
+ 預先填入`git`的儲存庫，用於您環境中的全域自訂和帳戶自訂。如需詳細資訊[部署後步驟](aft-post-deployment.md)，請參閱 中的*步驟 3：填入每個儲存庫*。

## 套用全域自訂
<a name="aft-global-customizations"></a>

若要套用全域自訂，您必須將特定資料夾結構推送至您選擇的儲存庫。
+ 如果您的自訂組態採用 Python 程式或指令碼的形式，請將這些組態放在儲存庫的 **api\$1helpers/python** 資料夾下。
+ 如果您的自訂組態採用 Bash 指令碼形式，請將這些組態放在儲存庫的 **api\$1helpers** 資料夾下。
+ 如果您的自訂組態採用 Terraform 格式，請將它們放在儲存庫中的 **terraform** 資料夾下。
+ 如需建立自訂組態的詳細資訊，請參閱全域自訂 README 檔案。

**注意**  
在 AFT 管道的 AFT 帳戶佈建架構階段之後，會自動套用全域自訂。

## 套用帳戶自訂
<a name="aft-account-customizations"></a>

****

 您可以將特定資料夾結構推送至您選擇的儲存庫，以套用帳戶自訂。帳戶自訂會在 AFT 管道和全域自訂階段之後自動套用。您也可以在帳戶自訂儲存庫中建立多個資料夾，其中包含不同的帳戶自訂。對於您需要的每個帳戶自訂，請使用下列步驟。

**套用帳戶自訂**

1.  ** 步驟 1：為帳戶自訂建立資料夾 ** 

    在您選擇的儲存庫中，將 AFT 提供的`ACCOUNT_TEMPLATE`資料夾複製到新資料夾。新資料夾的名稱應與`account_customizations_name`您在帳戶請求中提供的 相符。

1.  ** 將組態新增至您的特定帳戶自訂資料夾 ** 

    您可以根據組態的格式，將組態新增至您的帳戶自訂資料夾。
   +  如果您的自訂組態採用 Python 程式或指令碼的形式，請將它們放在儲存庫中的 ***【account\$1customizations\$1name】*/api\$1helpers/python** 資料夾下。
   +  如果您的自訂組態是 Bash 指令碼的形式，請將它們放在儲存庫中的 ***【account\$1customizations\$1name】*/api\$1helpers** 資料夾下。
   +  如果您的自訂組態採用 Terraform 格式，請將它們放在儲存庫中的 ***【account\$1customizations\$1name】*/terraform** 資料夾下。

    如需建立自訂組態的詳細資訊，請參閱帳戶自訂 README 檔案。

1.  ** 請參閱帳戶請求檔案中的特定`account_customizations_name`參數 ** 

    AFT 帳戶請求檔案包含輸入參數 `account_customizations_name`。輸入您帳戶自訂的名稱做為此參數的值。

**注意**  
 您可以為環境中的帳戶提交多個帳戶請求。當您想要套用不同或類似的帳戶自訂時，請在帳戶請求中使用`account_customizations_name`輸入參數來指定帳戶自訂。如需詳細資訊，請參閱[提交多個帳戶請求](https://docs.aws.amazon.com/controltower/latest/userguide/aft-multiple-account-requests.html)。

## 重新叫用自訂
<a name="aft-re-invoke-customizations"></a>

AFT 提供在 AFT 管道中重新叫用自訂項目的方法。當您新增新的自訂步驟，或變更現有的自訂時，此方法非常有用。當您重新叫用 時，AFT 會啟動自訂管道，以對 AFT 佈建帳戶進行變更。event-source-based重新叫用可讓您將自訂套用至個別帳戶、所有帳戶、根據其 OU 的帳戶，或根據標籤選取的帳戶。

請依照這三個步驟，為 AFT 佈建的帳戶重新叫用自訂。

**步驟 1：將變更推送至全域或帳戶自訂`git`儲存庫**

您可以視需要更新全域和帳戶自訂，並將變更推回`git`儲存庫。此時，不會發生任何情況。自訂管道必須由事件來源調用，如接下來兩個步驟所述。

**步驟 2：啟動 AWS Step Function 執行以重新叫用自訂**

AFT 提供在 AFT 管理帳戶中呼叫`aft-invoke-customizations`的 AWS Step Function。該函數的目的是為 AFT 佈建的帳戶重新調用自訂管道。

以下是您可以建立以將輸入傳遞至 `aft-invoke-customizations` AWS Step Function 的事件結構描述 (JSON 格式） 範例。

```
{
  "include": [
    {
      "type": "all"
    },
    {
      "type": "ous",
      "target_value": [ "ou1","ou2"]
    },
    {
      "type": "tags",
      "target_value": [ {"key1": "value1"}, {"key2": "value2"}]
    },
    {
      "type": "accounts",
      "target_value": [ "acc1_ID","acc2_ID"]
    }
  ],

  "exclude": [
    {
      "type": "ous",
      "target_value": [ "ou1","ou2"]
    },
    {
      "type": "tags",
      "target_value": [ {"key1": "value1"}, {"key2": "value2"}]
    },
    {
      "type": "accounts",
      "target_value": [ "acc1_ID","acc2_ID"]
    }
  ]
}
```

 範例事件結構描述顯示您可以選擇要包含在重新叫用程序中或從中排除的帳戶。您可以依組織單位 (OU)、帳戶標籤和帳戶 ID 進行篩選。如果您未套用任何篩選條件並包含陳述式 `"type":"all"`，則會重新叫用所有 AFT 佈建帳戶的自訂。

**注意**  
 如果您的 AWS Control Tower Account Factory for Terraform (AFT) 版本為 1.6.5 或更新版本，您可以使用語法 鎖定巢狀 OUs`OU Name (ou-id-1234`)。如需詳細資訊，請參閱 [GitHub](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/issues/280) 上的下列主題。

 在您填寫事件參數之後，Step Functions 會執行並叫用對應的自訂。AFT 一次最多可以叫用 5 個自訂項目。Step Functions 會等待 和 迴圈，直到符合事件條件的所有帳戶都完成為止。

**步驟 3：監控 AWS Step Function 輸出並監看執行中的 AWS CodePipeline **
+ 產生的 Step Function 輸出包含符合 Step Function 輸入事件來源的帳戶 IDs。
+ 導覽至**開發人員工具**下的 AWS CodePipeline，並檢視帳戶 ID 對應的自訂管道。

## 使用 AFT 帳戶自訂請求追蹤進行故障診斷
<a name="aft-customization-request"></a>

 基於 AWS Lambda 的帳戶自訂工作流程會發出包含目標帳戶和自訂請求 IDs日誌。AFT 可讓您使用 Amazon CloudWatch Logs 追蹤和疑難排解自訂請求，方法是提供 CloudWatch Logs Insights 查詢，您可以使用這些查詢來依目標帳戶或自訂請求 ID 篩選與自訂請求相關的 CloudWatch Logs。如需詳細資訊，請參閱《[Amazon CloudWatch Logs 使用者指南》中的使用 Amazon CloudWatch Logs 分析日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AnalyzingLogData.html)。 *Amazon CloudWatch * 

**使用適用於 AFT 的 CloudWatch Logs Insights**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1.  從導覽窗格中，選擇**日誌**，然後選擇**日誌洞察**。

1.  選擇**查詢**。

1.  在**範例查詢**下，選擇**適用於 Terraform 的帳戶工廠**，然後選取下列其中一個查詢：
   +  **依帳戶 ID 的自訂日誌** 
**注意**  
 請務必將 *"YOUR-ACCOUNT-ID"* 取代為您的目標帳戶 ID。

     ```
     fields @timestamp, log_message.account_id as target_account_id, log_message.customization_request_id as customization_request_id, log_message.detail as detail, @logStream
     | sort @timestamp desc
     | filter log_message.account_id == "YOUR-ACCOUNT-ID" and @message like /customization_request_id/
     ```
   +  **依自訂請求 ID 的自訂日誌** 
**注意**  
 請務必使用自訂請求 ID 取代 *"YOUR-CUSTOMIZATION-REQUEST-ID"*。您可以在 AFT 帳戶佈建架構 AWS Step Functions 狀態機器的輸出中找到自訂請求 ID。如需 AFT 帳戶佈建架構的詳細資訊，請參閱 [AFT 帳戶佈建管道](https://docs.aws.amazon.com/controltower/latest/userguide/aft-provisioning-framework.html) 

     ```
     fields @timestamp, log_message.account_id as target_account_id, log_message.customization_request_id as customization_request_id, log_message.detail as detail, @logStream
     | sort @timestamp desc
     | filter log_message.customization_request_id == "YOUR-CUSTOMIZATION-REQUEST-ID"
     ```

1.  選取查詢之後，請務必選取時間間隔，然後選擇**執行查詢**。

# AFT 中原始程式碼版本控制的替代方案
<a name="aft-alternative-vcs"></a>

AFT AWS CodeCommit 用於原始程式碼版本控制系統 (VCS)，並允許其他 [CodeConnections](https://docs.aws.amazon.com//dtconsole/latest/userguide/supported-versions-connections.html) 符合您業務需求或現有架構。

如果您是第一次部署 AFT，而且沒有現有的 CodeCommit 儲存庫，則必須指定外部 VCS 供應商，做為 AFT 部署先決條件的一部分。

**AFT 支援下列原始程式碼控制替代方案：**
+ GitHub
+ GitHub Enterprise Server
+ BitBucket
+ GitLab
+ GitLab 自我管理

**注意**  
如果您將 指定 AWS CodeCommit 為 VCS，則不需要其他步驟。AFT 會在您的環境中使用預設名稱建立必要的`git`儲存庫。不過，您可以視需要覆寫 CodeCommit 的預設儲存庫名稱，以符合您的組織標準。

## 使用 AFT 設定替代原始程式碼版本控制系統 （自訂 VCS)
<a name="aft-alternate-vcs-steps"></a>

若要為您的 AFT 部署設定替代原始程式碼版本控制系統，請遵循下列步驟。

**步驟 1：在支援的第三方版本控制系統 (VCS) 中建立`git`儲存庫。**

如果您未使用 AWS CodeCommit，則必須在 AFT 支援的第三方 VCS 提供者環境中為下列項目建立`git`儲存庫。
+ **AFT 帳戶請求。**[可用的範本程式碼](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-account-request) 。如需 AFT 帳戶請求的詳細資訊，請參閱 [使用 AFT 佈建新帳戶](aft-provision-account.md)。
+ **AFT 帳戶佈建自訂。**[可用的範本程式碼](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-account-provisioning-customizations) 。如需 AFT 帳戶佈建自訂的詳細資訊，請參閱 [建立您的 AFT 帳戶佈建自訂狀態機器](aft-provisioning-framework.md#aft-create-customizations)。
+ **AFT 全域自訂。**[可用的範本程式碼](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-global-customizations) 。如需 AFT 全域自訂的詳細資訊，請參閱 [帳戶自訂](aft-account-customization-options.md)。
+ **AFT 帳戶自訂。**[可用的範本程式碼](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-account-customizations) 。如需 AFT 帳戶自訂的詳細資訊，請參閱 [帳戶自訂](aft-account-customization-options.md)。

**步驟 2：指定 AFT 部署所需的 VCS 組態參數**

需要下列輸入參數，才能將 VCS 提供者設定為 AFT 部署的一部分。
+ **vcs\$1provider**：如果您未使用 AWS CodeCommit，`"gitlab"`請根據您的使用案例將 VCS 提供者指定為 `"bitbucket"`、`"githubenterprise"`、 `"github"`或 。
+ **github\$1enterprise\$1url**：僅限 GitHub Enterprise 客戶，請指定 GitHub URL。
+ **account\$1request\$1repo\$1name**：對於 AWS CodeCommit 使用者，此值設定為 `aft-account-request`。在 AFT 支援的第三方 VCS 提供者環境中，使用實際儲存庫名稱更新此輸入值。對於 BitBucket、Github、GitHub Enterprise、GitLab 和 GitLab 自我管理，儲存庫名稱的格式必須是 `[Org]/[Repo]`。
+ **account\$1customizations\$1repo\$1name**：對於 AWS CodeCommit 使用者，此值設定為 `aft-account-customizations`。在 AFT 支援的第三方 VCS 提供者環境中，使用儲存庫名稱更新此輸入值。對於 BitBucket、Github、GitHub Enterprise、GitLab 和 GitLab 自我管理，儲存庫名稱的格式必須是 `[Org]/[Repo]`。
+ **account\$1provisioning\$1customizations\$1repo\$1name**：對於 AWS CodeCommit 使用者，此值設定為 `aft-account-provisioning-customizations`。在 AFT 支援的第三方 VCS 提供者環境中，使用儲存庫名稱更新此輸入值。對於 BitBucket、Github、GitHub Enterprise、GitLab 和 GitLab 自我管理，儲存庫名稱的格式必須是 `[Org]/[Repo]`。
+ **global\$1customizations\$1repo\$1name**：對於 AWS CodeCommit 使用者，此值設定為 `aft-global-customizations`。在 AFT 支援的第三方 VCS 提供者環境中，使用儲存庫名稱更新此輸入值。對於 BitBucket、Github、GitHub Enterprise、GitLab 和 GitLab 自我管理，儲存庫名稱的格式必須是 `[Org]/[Repo]`。
+ **account\$1request\$1repo\$1branch**：分支`main`預設為 ，但值可以覆寫。

根據預設，來自每個`git`儲存庫`main`分支的 AFT 來源。您可以使用額外的輸入參數覆寫分支名稱值。如需輸入參數的詳細資訊，請參閱 [AFT Terraform 模組](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/blob/main/README.md#inputs)中的 README 檔案。

**對於現有 AWS CodeCommit 客戶**  
 如果您使用 AFT 的新名稱建立 CodeCommit 儲存庫，您可以透過更新這些輸入參數的值來更新儲存庫名稱。

**步驟 3：完成第三方 VCS 提供者的 AWS CodeCommit 連線**

當您的部署執行時，AFT 會建立所需的 AWS CodeCommit 儲存庫，或者為您選擇的第三方 VCS 提供者建立 AWS CodeCommit 連線。如果是後者，您必須手動登入 AFT 管理帳戶的主控台，以完成待定的 CodeCommit 連線。如需[AWS CodeCommit 完成 CodeCommit 連線的進一步說明，請參閱 文件](https://docs.aws.amazon.com//dtconsole/latest/userguide/connections-update.html)。 CodeCommit 

# 將 AFT 從 AWS CodeCommit 移至另一個 VCS 供應商
<a name="move-a-vcs"></a>

本節提供如何將 AWS Control Tower Account Factory for Terraform (AFT) 從 AWS CodeCommit 做為版本控制系統 (VCS) 移至另一個 VCS 供應商的概觀。

**步驟 1. ** 在您選擇的 VCS 中設定新的儲存庫。

**步驟 2.** 在 中將這些儲存庫新增為新的遠端`git`。

**步驟 3.** 執行`git push`至新的 VCS 提供者。

**注意**  
您建立的儲存庫結構應與 in AWS CodeCommit 相同。變更結構會阻礙 AFT 執行所需程式碼的能力。  
aft-account-request
 aft-account-customizations
 aft-global-customizations
aft-account-provisioning-customizations

**步驟 4.** 在您的 AWS Control Tower 管理帳戶中，更新 Terraform 模組 （引導） 以指向您的 VCS 供應商，如下列範例所示：

**範例：**[GitLab 搭配 Terraform OSS](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/blob/main/examples/gitlab%2Btf_oss/main.tf)

– 執行 `terraform plan`以預覽變更，然後執行 `terraform apply`。

**步驟 5.** 完成步驟以完成 CodeConnection （先前稱為 CodeStar) 的設定：

1. 登入您的 AFT 管理帳戶

1. 找到並完成新 VCS 供應商的 pending AWS CodeConnections，如[更新待定連線](https://docs.aws.amazon.com/dtconsole/latest/userguide/connections-update.html)或 AWS 主控台 【`https://us-east-1.console.aws.amazon.com/codesuite/settings/connections`】 所述。

1. 參考：[部署後步驟](https://docs.aws.amazon.com//controltower/latest/userguide/aft-post-deployment.html)

**注意**  
帳戶管道會保留先前的來源，直到叫用 `aft-invoke-customizations` *Step Functions* 為止。此調用可以作為升級的一部分或作為下一次自訂調用的一部分來完成。

如需詳細資訊，請參閱此部落格：[如何將 AWS CodeCommit 儲存庫遷移至另一個 Git 供應商](https://aws.amazon.com/blogs/devops/how-to-migrate-your-aws-codecommit-repository-to-another-git-provider)。

# 資料保護
<a name="aft-data-protection"></a>

[AWS 共同責任模型](https://aws.amazon.com//compliance/shared-responsibility-model/)適用於 AFT 中的資料保護。基於資料保護目的，我們建議採用下列安全性最佳實務。
+ 遵循 AWS Control Tower 提供的資料保護指導方針。如需詳細資訊，請參閱[AWS Control Tower 中的資料保護](controltower-console-encryption.md)。
+ 保留在 AFT 部署時產生的 Terraform 狀態組態。如需詳細資訊，請參閱[部署適用於 Terraform (AFT) 的 AWS Control Tower 帳戶工廠](aft-getting-started.md)。
+ 根據您組織的安全政策，定期輪換敏感憑證。秘密的範例包括 Terraform 字符、`git`字符等。

 **靜態加密** 

AFT 會建立使用 AWS Key Management Service 金鑰靜態加密的 Amazon S3 儲存貯體、Amazon SNS 主題、Amazon SQS 佇列和 Amazon DynamoDB 資料庫。AFT 建立的 KMS 金鑰預設會啟用每年輪換。如果您選擇 Terraform 的 Terraform Cloud 或 Terraform Enterprise 分佈，AFT 會包含 AWS Systems Manager SecureString 參數來存放敏感的 Terraform 字符值。

AFT 使用中所述的服務，[元件服務](aft-components.md)該 AWS 服務預設為靜態加密。如需詳細資訊，請參閱每個 AFT 元件 AWS 服務 AWS 的文件，並了解每個服務後面的資料保護實務。

 **傳輸中加密** 

根據預設，AFT 倚賴 中所述[元件服務](aft-components.md)使用傳輸中加密 AWS 的服務。如需詳細資訊，請參閱每個 AFT 元件 AWS 服務 AWS 的文件，並了解每個服務後面的資料保護實務。

 對於 Terraform Cloud 或 Terraform Enterprise 分佈，AFT 會呼叫 HTTPS 端點 API 來存取您的 Terraform 組織。如果您選擇 AWS CodeStar 連線支援的第三方 VCS 提供者，AFT 會呼叫 HTTPS 端點 API 來存取您的 VCS 提供者組織。

# 從 AFT 移除帳戶
<a name="aft-remove-account"></a>

 本主題說明如何從 AFT 移除帳戶，因此 AFT 管道會停止部署和更新帳戶。

**重要**  
 從 AFT 管道移除帳戶是無法復原的，可能會導致狀態遺失。

 當您想要關閉已淘汰應用程式的帳戶、隔離遭入侵的帳戶，或將帳戶從一個組織移至另一個組織時，您可以從 AFT 中移除帳戶。

**注意**  
 從 AFT 移除帳戶不同於刪除 AWS Control Tower 帳戶或 AWS 帳戶。當您從 AFT 移除帳戶時，AWS Control Tower 仍會管理該帳戶。若要刪除 AWS Control Tower 帳戶或 AWS 帳戶，請參閱下列內容：  
 《*AWS Control Tower 使用者指南*》中的[取消管理帳戶](https://docs.aws.amazon.com/controltower/latest/userguide/unmanage-account.html)。
 *AWS Billing 《 使用者指南*》中的[關閉帳戶](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/close-account.html)。

**從 AFT 管道移除帳戶**

 下列程序說明如何從 AFT 移除帳戶。

1.  ** 從儲存帳戶請求的儲存`git`庫移除帳戶 ** 

    在您存放帳戶請求的儲存`git`庫中，刪除您要從 AFT 中移除之帳戶的 帳戶請求。

    當您從帳戶請求儲存庫移除帳戶請求時，AFT 會刪除自訂管道和帳戶中繼資料。如需詳細資訊，請參閱 GitHub 上 AFT 的 [1.8.0 版本備註](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/releases/tag/1.8.0)。

1.  ** 刪除 Terraform 工作區 （僅適用於 Terraform Cloud 和 Terraform Enterprise 客戶） ** 

    刪除您要從 AFT 中移除之帳戶的全域自訂和帳戶自訂工作區。

1.  ** 從 Amazon S3 後端刪除 Terraform 狀態 ** 

    在 AFT 管理帳戶中，刪除您要從 AFT 中移除之帳戶的 Amazon S3 儲存貯體內的所有相關資料夾。
**提示**  
 在下列範例中，將 取代`012345678901`為 AFT 管理帳戶 ID 號碼。

**範例：Terraform OSS**  
 當您選擇 Terraform OSS 時，您會在 `aft-backend-012345678901-primary-region`和 Amazon S3 儲存貯體中找到每個帳戶的 `aft-backend-012345678901-secondary-region` 3 個資料夾。 Amazon S3 這些資料夾與*帳戶自訂狀態*、*自訂管道狀態*和*全域自訂狀態*相關 

**範例：Terraform Cloud 或 Terraform Enterprise**  
 當您選擇 Terraform Cloud 或 Terraform Enterprise 時，您會在 `aft-backend-012345678901-primary-region`和 Amazon S3 `aft-backend-012345678901-secondary-region` 儲存貯體中找到每個帳戶的資料夾。這些資料夾與*自訂管道狀態*相關。

# 操作指標
<a name="aft-operational-metrics"></a>

根據預設，*Account Factory for Terraform (AFT)* 會傳送匿名操作指標至 AWS。我們使用此資料來了解客戶如何使用 AFT，以便改善解決方案的品質和功能。您可以在 AFT 部署期間變更參數，以選擇退出資料收集。啟用收集時，會將下列資料傳送至 AWS：
+ **解決方案：**AFT 特定的識別符
+ **版本：**AFT 的版本
+ **全域唯一識別符 (UUID)：**每個 AFT 部署隨機產生的唯一識別符
+ **時間戳記：**資料收集時間戳記
+ **資料：**客戶採取的 AFT 組態和動作

AWS 擁有收集的資料。資料收集受 [AWS 隱私權政策](https://aws.amazon.com/privacy/)的約束。

**注意**  
1.6.0 之前的 AFT 版本不會向 報告用量指標。 AWS

若要選擇退出報告指標：
+ `aft_metrics_reporting` `false` 將 Terraform 輸入組態檔案中的輸入值設定為 ，如以下範例所示，然後重新部署 AFT。如果您未明確設定，則此值`true`預設為 。

如果您複製範例，請記得以 取代字串中給定項目的實際 ID 和區域值`x`。

```
    module "control_tower_account_factory" {
    source = "aws-ia/control_tower_account_factory/aws"
    
    # Required Vars
    ct_management_account_id    = "xxxxxxxxxxx"
    log_archive_account_id      = "xxxxxxxxxxx"
    audit_account_id            = "xxxxxxxxxxx"
    aft_management_account_id   = "xxxxxxxxxxx"
    ct_home_region              = "xx-xxxx-x"
    tf_backend_secondary_region = "xx-xxxx-x"
    
    # Optional Vars
    aft_metrics_reporting = false    # to opt out, set this value to false 
    }
```

# Account Factory for Terraform (AFT) 疑難排解指南
<a name="account-troubleshooting-guide"></a>

 本節可協助您針對使用 Account Factory for Terraform (AFT) 時可能遇到的常見問題進行疑難排解。

**Topics**
+ [一般問題](#w2aac44c33c45b7)
+ [與帳戶佈建/註冊相關的問題](#w2aac44c33c45b9)
+ [與自訂調用相關的問題](#w2aac44c33c45c11)
+ [與帳戶自訂工作流程相關的問題](#w2aac44c33c45c13)

## 一般問題
<a name="w2aac44c33c45b7"></a>
+  **超過 AWS 資源配額** 

   如果您的日誌群組指出您超過 AWS 資源配額，請聯絡 [AWS Support](https://aws.amazon.com/premiumsupport/)。Account Factory 使用 AWS 服務 與包含 AWS CodeBuild AWS Organizations和 的資源配額 AWS Systems Manager。如需詳細資訊，請參閱下列內容：
  +  *CodeBuild 使用者指南*中的什麼[是 AWS CodeBuild？](https://docs.aws.amazon.com/codebuild/latest/userguide/welcome.html)。
  +  《 *Organizations 使用者指南*》中的[什麼是 AWS Organizations？](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html)。
  +  Systems *Manager 使用者指南*中的[什麼是 AWS Systems Manager？](https://docs.aws.amazon.com/systems-manager/latest/userguide/what-is-systems-manager.html)。
+  **Account Factory 的過時版本 ** 

   如果您遇到問題，且認為問題是錯誤，請確定您擁有最新版的 Account Factory。如需詳細資訊，請參閱[更新 Account Factory 版本](https://docs.aws.amazon.com/controltower/latest/userguide/update-aft-version.html)。
+  **已對 Account Factory 原始程式碼進行本機變更** 

   Account Factory 是開放原始碼專案。AWS Control Tower 支援 Account Factory 核心程式碼。如果您對 Account Factory 核心程式碼進行本機變更，AWS Control Tower 只會盡力支援您的 Account Factory 部署。
+ ** Account Factory 角色許可不足 ** 

   Account Factory 會建立 IAM 角色和政策來管理付費帳戶部署和自訂。如果您變更這些角色或政策，Account Factory 管道可能無法執行特定動作。如需詳細資訊，請參閱[必要角色](https://docs.aws.amazon.com/controltower/latest/userguide/aft-required-roles.html)。
+  **帳戶儲存庫未正確填入 ** 

   在佈建帳戶之前，請務必遵循[部署後步驟](https://docs.aws.amazon.com/controltower/latest/userguide/aft-post-deployment.html)。
+  **手動變更 OU 後未偵測偏離** 
**注意**  
 AWS Control Tower 會自動偵測漂移。如需解決偏離的資訊，請參閱[偵測和解決 AWS Control Tower 中的偏離](https://docs.aws.amazon.com/controltower/latest/userguide/drift.html#resolving-drift)。

   手動變更組織單位 (OU) 時，不會偵測到偏離。這是因為 Account Factory 的事件驅動性質所致。提交帳戶請求時，Terraform 管理的資源是 Amazon DynamoDB 項目，而不是直接帳戶。變更項目後，請求會放入佇列中，AWS Control Tower 會在佇列中透過 Service Catalog （管理帳戶詳細資訊的服務） 處理它們。如果您手動變更 OU，則不會偵測到偏離，因為帳戶請求未變更。

## 與帳戶佈建/註冊相關的問題
<a name="w2aac44c33c45b9"></a>
+  **帳戶請求 （電子郵件地址/名稱） 已存在** 

   此問題通常會在佈建期間或作為 時導致 Service Catalog 產品故障`ConditionalCheckFailedException`。

   您可以執行下列其中一項操作，找到有關問題的詳細資訊：
  +  檢閱您的 Terraform 或 CloudWatch Logs 日誌群組。
  +  檢閱傳送到 Amazon SNS 主題 的失敗`aft-failure-notifications`。
+  ** 格式不正確的帳戶請求 ** 

   請確定您的帳戶請求遵循預期的結構描述。如需範例，請參閱 GitHub 上的 [terraform-aws-control\$1tower\$1account\$1factory](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/tree/main/sources/aft-customizations-repos/aft-account-request/examples)。
+  ** 超過 AWS Organizations 資源配額** 

   請確定您的帳戶請求不超過 AWS Organizations 資源配額。如需詳細資訊，請參閱 [AWS Organizations 的配額](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_reference_limits.html)。

## 與自訂調用相關的問題
<a name="w2aac44c33c45c11"></a>
+  ** 未加入 Account Factory 的目標帳戶 ** 

   確定自訂請求中包含的所有帳戶都已加入 Account Factory。如需詳細資訊，請參閱[更新現有帳戶](https://docs.aws.amazon.com/controltower/latest/userguide/aft-update-account.html)。
+  **自訂請求目標的帳戶存在於 DynamoDB 資料表 中`aft-request-metadata`，但不存在於帳戶請求儲存庫中 ** 

   執行下列其中一項操作來格式化您的自訂調用請求，以排除違規帳戶：
  +  在 DynamoDB 資料表 中`aft-request-metadata`，刪除參考不再位於您帳戶請求儲存庫中帳戶的項目。
  +  不使用「全部」作為目標。
  +  未鎖定帳戶所屬的 OU。
  +  未直接鎖定帳戶。
+  ** 對 Terraform Cloud 使用不正確的字符 ** 

   請確定您已設定正確的字符。Terraform Cloud 僅支援以團隊為基礎的權杖，不支援以組織為基礎的權杖。
+  **無法在建立帳戶自訂管道之前建立帳戶；無法自訂帳戶** 

   變更帳戶請求儲存庫中的帳戶規格。當您進行變更，例如變更帳戶的標籤值時，即使管道不存在，Account Factory 仍會遵循嘗試建立管道的路徑。

## 與帳戶自訂工作流程相關的問題
<a name="w2aac44c33c45c13"></a>

 如果您遇到與帳戶自訂工作流程相關的問題，請確定您的 AFT 版本是 1.8.0 或更高版本，而且已從 DynamoDB 請求資料表刪除帳戶相關中繼資料的所有執行個體。

 如需 AFT 1.8.0 版的相關資訊，請參閱 GitHub 上的 [1.8.0 版](https://github.com/aws-ia/terraform-aws-control_tower_account_factory/releases/tag/1.8.0)。

 如需有關如何檢查和更新 AFT 版本的資訊，請參閱下列內容：
+  [檢查 AFT 版本](https://docs.aws.amazon.com/controltower/latest/userguide/check-aft-version.html) 
+  [更新 AFT 版本](https://docs.aws.amazon.com/controltower/latest/userguide/update-aft-version.html) 

 您也可以使用 Amazon CloudWatch Logs Insights 查詢來篩選包含目標帳戶和自訂請求 IDs日誌，以追蹤自訂請求並進行疑難排解。如需詳細資訊，請參閱[使用 AFT 帳戶自訂請求追蹤進行故障診斷](https://docs.aws.amazon.com/controltower/latest/userguide/aft-account-customization-options.html)。