

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

# 使用帳戶工廠自訂 (AFC) 自訂帳戶
<a name="af-customization-page"></a>

**注意**  
單一帳戶佈建、更新和自訂必須以啟用 AWSControlTowerBaseline 的組織單位 (OU) 為目標。如果 OU 未啟用 AWSControlTowerBaseline，您可以啟用帳戶自動註冊，或在 EnabledBaselines 上使用 ResetEnabledBaseline 和 ResetEnabledControl APIs並在該 OU 上使用 EnabledControls 來註冊帳戶。如需 AWSControlTowerBaseline 的詳細資訊，請參閱：[在 OU 層級套用的基準類型](types-of-baselines.md#ou-baseline-types)。

當您從 AWS Control Tower 主控台佈建資源 AWS 帳戶 時，AWS Control Tower 可讓您自訂新的和現有的資源。設定 Account Factory 自訂後，AWS Control Tower 會自動執行此程序以供未來佈建，因此您不需要維護任何管道。自訂帳戶可在佈建資源後立即使用。

**使用藍圖佈建新帳戶**

您的自訂帳戶是在 AWS Control Tower 帳戶工廠、透過 CloudFormation 範本或使用 Terraform 佈建。您將定義做為自訂帳戶*藍圖*的範本。您的藍圖說明您在佈建帳戶時所需的特定資源和組態。也提供由 AWS 合作夥伴建置和管理的預先定義藍圖。如需合作夥伴管理藍圖的詳細資訊，請參閱 [AWS Service Catalog 入門程式庫](https://docs.aws.amazon.com//servicecatalog/latest/adminguide/getting-started-library.html)。

**將藍圖套用至現有帳戶**

您也可以遵循 AWS Control Tower 主控台中的**更新帳戶**步驟，將自訂藍圖套用至現有帳戶。如需詳細資訊，請參閱[在 主控台中更新帳戶](updating-account-factory-accounts.md#update-account-in-console)。

**定義：您的中樞帳戶**

您的帳戶藍圖會存放在 中 AWS 帳戶，基於我們的目的稱為*中樞帳戶*。藍圖會以 Service Catalog 產品的形式儲存。我們將此產品稱為藍圖，以區分它與任何其他 Service Catalog 產品。若要進一步了解如何建立 Service Catalog 產品，請參閱《 *AWS Service Catalog 管理員指南*》中的[建立產品](https://docs.aws.amazon.com//servicecatalog/latest/adminguide/productmgmt-cloudresource.html)。

**注意**  
AWS Control Tower 包含*主動控制*，可監控 AWS Control Tower 中的 CloudFormation 資源。或者，您可以在登陸區域中啟用這些控制項。當您套用主動控制時，他們會檢查以確保您要部署到帳戶的資源符合組織的政策和程序。如需主動控制的詳細資訊，請參閱[主動控制](https://docs.aws.amazon.com//controltower/latest/userguide/proactive-controls.html)。

如需使用 AFC 的詳細資訊，請參閱[使用 AWS Control Tower 中的帳戶工廠自訂自動化帳戶自訂](https://aws.amazon.com//blogs/mt/automate-account-customization-using-account-factory-customization-in-aws-control-tower/)。

**先決條件**  
開始使用 AWS Control Tower 帳戶工廠建立自訂帳戶之前，您必須部署 AWS Control Tower 登陸區域環境，而且必須擁有向 AWS Control Tower 註冊的組織單位 (OU)，其中將放置新建立的帳戶。

**自訂的準備**
+ *指定中樞帳戶：*您可以建立新的帳戶做為中樞帳戶，也可以使用現有的 AWS 帳戶。我們強烈建議您不要使用 AWS Control Tower 管理帳戶做為藍圖中樞帳戶。
+ *新增必要的角色：*如果您計劃 AWS 帳戶 註冊 AWS Control Tower 並自訂這些角色，您必須先將`AWSControlTowerExecution`角色新增至這些帳戶，就像註冊 AWS Control Tower 的任何其他帳戶一樣。
+ *設定合作夥伴藍圖 （選用）：*如果您計劃使用具有市場訂閱需求的合作夥伴藍圖，您必須先從 AWS Control Tower 管理帳戶設定這些藍圖，才能將合作夥伴藍圖部署為帳戶原廠自訂藍圖。

**Topics**
+ [設定自訂](afc-setup-steps.md)
+ [從藍圖建立自訂帳戶](create-afc-customized-account.md)
+ [在您註冊帳戶時，使用 AFC 自訂帳戶](enroll-and-customize.md)
+ [將藍圖新增至 AWS Control Tower 帳戶](add-blueprint-to-account.md)
+ [更新藍圖](update-a-blueprint.md)
+ [從帳戶移除藍圖](remove-a-blueprint.md)
+ [合作夥伴藍圖](partner-blueprints.md)
+ [Account Factory Customizations (AFC) 的考量事項](#af-limitations)
+ [如果發生藍圖錯誤](#af-error)
+ [根據 CloudFormation 自訂 AFC 藍圖的政策文件](#custom-policy-document)
+ [建立 Terraform 型 Service Catalog 產品所需的其他許可](#custom-policy-document-tf)
+ [轉換為 AWS Service Catalog 外部產品類型](#service-catalog-external-product-type)

# 設定自訂
<a name="afc-setup-steps"></a>

下一節提供為自訂程序設定 Account Factory 的步驟。建議您在開始這些步驟之前，先設定中樞帳戶的[委派管理員](https://docs.aws.amazon.com//accounts/latest/reference/using-orgs-delegated-admin.html)。

**摘要**
+ **步驟 1. 建立必要的角色。**建立 IAM 角色，授予 AWS Control Tower 存取 （中樞） 帳戶的許可，其中存放 Service Catalog 產品，也稱為藍圖。
+ **步驟 2. 建立 AWS Service Catalog 產品。**建立自訂帳戶基礎所需的 AWS Service Catalog 產品 （也稱為「藍圖產品」)。
+ **步驟 3. 檢閱您的自訂藍圖。**檢查您建立 AWS Service Catalog 的產品 （藍圖）。
+ **步驟 4. 呼叫您的藍圖以建立自訂帳戶。**在建立帳戶時，在 AWS Control Tower 主控台的 Account Factory 中的適當欄位中輸入藍圖產品資訊和角色資訊。

# 步驟 1. 建立必要的角色
<a name="step-1-create-blueprint-access-role"></a>

開始自訂帳戶之前，您必須設定包含 AWS Control Tower 與中樞帳戶之間信任關係的角色。擔任 時，該角色會授予 AWS Control Tower 管理中樞帳戶中資源的存取權。角色必須命名為 **AWSControlTowerBlueprintAccess**。

AWS Control Tower 會擔任此角色來代表您在 中建立產品組合資源 AWS Service Catalog，然後將您的藍圖做為服務型錄產品新增至此產品組合，然後在帳戶佈建期間與成員帳戶共用此產品組合和藍圖。

您將建立`AWSControlTowerBlueprintAccess`角色，如以下各節所述。您可以在已註冊或未註冊帳戶中設定角色。

**導覽至 IAM 主控台以設定所需的角色。**  


**在已註冊的 AWS Control Tower 帳戶中設定 AWSControlTowerBlueprintAccess 角色**

1. 聯合或以 AWS Control Tower 管理帳戶中的委託人身分登入。

1. 從管理帳戶中的聯合委託人，擔任或切換角色到您選擇做為藍圖中樞帳戶的已註冊 AWS Control Tower 帳戶中`AWSControlTowerExecution`的角色。

1. 從已註冊 AWS Control Tower 帳戶中`AWSControlTowerExecution`的角色，建立具有適當許可和信任關係`AWSControlTowerBlueprintAccess`的角色。

**重要**  
為了遵循 AWS 最佳實務指引，請務必在建立`AWSControlTowerExecution`角色後立即登出`AWSControlTowerBlueprintAccess`角色。  
為避免意外變更資源，此`AWSControlTowerExecution`角色僅供 AWS Control Tower 使用。

如果您的藍圖中樞帳戶未在 AWS Control Tower 中註冊，則該`AWSControlTowerExecution`角色將不會存在於帳戶中，而且在您繼續設定角色之前，不需要擔任該`AWSControlTowerBlueprintAccess`角色。

**在未註冊的成員帳戶中設定 AWSControlTowerBlueprintAccess 角色**

1. 透過您偏好的方法，聯合或登入為您要指定為中樞帳戶之帳戶中的委託人。

1. 以帳戶中的委託人身分登入時，請建立具有適當許可和信任關係`AWSControlTowerBlueprintAccess`的角色。

必須設定 **AWSControlTowerBlueprintAccess** 角色，才能將信任授予兩個委託人：
+ 在 AWS Control Tower 管理帳戶中執行 AWS Control Tower 的委託人 （使用者）。
+ AWS Control Tower 管理帳戶中名為 `AWSControlTowerAdmin` 的角色。

以下是信任政策範例，類似於您需要為角色包含的政策。此政策示範授予最低權限存取權的最佳實務。當您制定自己的政策時，請將該術語取代為 AWS Control Tower 管理帳戶*YourManagementAccountId*的實際帳戶 ID，並將該術語取代*YourControlTowerUserRole*為管理帳戶的 IAM 角色識別符。

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

****  

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

------

**必要的許可政策**

AWS Control Tower 要求名為 的受管政策`AWSServiceCatalogAdminFullAccess`必須連接到`AWSControlTowerBlueprintAccess`角色。此政策提供許可，在允許 AWS Control Tower 管理您的產品組合和 AWS Service Catalog 產品資源 AWS Service Catalog 時尋找 。您可以在 IAM 主控台中建立角色時連接此政策。

**可能需要其他許可**  
如果您在 Amazon S3 中存放藍圖，AWS Control Tower 也需要該`AWSControlTowerBlueprintAccess`角色的`AmazonS3ReadOnlyAccess`許可政策。
如果您不使用預設的**管理員**政策， AWS Service Catalog Terraform 產品類型會要求您將一些額外的許可新增至 AFC 自訂 IAM 政策。除了建立您在 terraform 範本中定義的資源所需的許可之外，還需要這些許可。

# 步驟 2. 建立 AWS Service Catalog 產品
<a name="step-2-create-blueprint-product"></a>

若要建立 AWS Service Catalog 產品，請遵循 *AWS Service Catalog 管理員指南*中[建立產品](https://docs.aws.amazon.com//servicecatalog/latest/adminguide/productmgmt-cloudresource.html)的步驟。建立 AWS Service Catalog 產品時，您會將帳戶藍圖新增為範本。

**重要**  
由於 HashiCorp 更新的 Terraform 授權，將對 *Terraform Open Source* 產品和佈建產品的支援 AWS Service Catalog 變更為新的產品類型，稱為 *External*。若要進一步了解此變更如何影響 AFC，包括如何將現有帳戶藍圖更新為外部產品類型，請檢閱[轉換為外部產品類型](af-customization-page.md#service-catalog-external-product-type)。

**建立藍圖的步驟摘要**
+ 建立或下載將成為您帳戶藍圖的 CloudFormation 範本或 Terraform tar.gz 組態檔案。本節稍後會提供一些範本範例。
+ 登入您存放 Account Factory 藍圖的 AWS 帳戶 （有時稱為中樞帳戶）。
+ 導覽至 AWS Service Catalog 主控台。選擇**產品清單**，然後選擇**上傳新產品**。
+ 在**產品詳細資訊**窗格中，輸入藍圖產品的詳細資訊，例如名稱和描述。
+ 選取**使用範本檔案**，然後選取**選擇檔案**。選取或貼上您開發或下載以用作藍圖的範本或組態檔案。
+ 選擇主控台頁面底部的**建立產品**。

 您可以從 AWS Service Catalog 參考架構儲存庫下載 CloudFormation 範本。[該儲存庫的一個範例有助於為您的 資源設定備份計劃](https://github.com/aws-samples/aws-service-catalog-reference-architectures/blob/master/backup/backup-tagoptions.yml)。

以下是一個範例範本，適用於名為 **Best Pets** 的虛構公司。它有助於設定與其寵物資料庫的連線。

```
Resources:
  ConnectionStringGeneratorLambdaRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: "2012-10-17"		 	 	 
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action:
              - "sts:AssumeRole"
  ConnectionStringGeneratorLambda:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: !Join ['-', ['ConnectionStringGenerator', !Select [4, !Split ['-', !Select [2, !Split ['/', !Ref AWS::StackId]]]]]]
      Description: Retrieves the connection string for this account to access the Pet Database
      Role: !GetAtt ConnectionStringGeneratorLambdaRole.Arn
      Runtime: nodejs22.x
      Handler: index.handler
      Timeout: 5
      Code:
        ZipFile: >
           export const handler = async (event, context) => {
             const awsAccountId = context.invokedFunctionArn.split(“:”)[4]
             const connectionString= “fake connection for account ” + awsAccountId;
             const response = {
               statusCode: 200,
               body: connectionString
             };
           return response;
          };

  ConnectionString:
    Type: Custom::ConnectionStringGenerator
    Properties:
      ServiceToken: !GetAtt ConnectionStringGeneratorLambda.Arn

  PetDatabaseConnectionString:
    DependsOn: ConnectionString
    # For example purposes we're using SSM parameter store.
    # In your template, use secure alternatives to store
    # sensitive values such as connection strings.
    Type: AWS::SSM::Parameter
    Properties: 
      Name: pet-database-connection-string
      Description: Connection information for the BestPets pet database
      Type: String
      Value: !GetAtt ConnectionString.Value
```

# 步驟 3。檢閱您的自訂藍圖
<a name="step-3-review-blueprint"></a>

您可以在 AWS Service Catalog 主控台中檢視您的藍圖。如需詳細資訊，請參閱 *Service Catalog 管理員指南*中的[管理產品](https://docs.aws.amazon.com//servicecatalog/latest/adminguide/catalogs_products.html#productmgmt-menu)。

# 步驟 4. 呼叫您的藍圖以建立自訂帳戶
<a name="step-4-call-the-blueprint"></a>

當您遵循 AWS Control Tower 主控台中的**建立帳戶**工作流程時，您會看到一個選用區段，您可以在其中輸入要用於自訂帳戶之藍圖的相關資訊。

**先決條件**  
您必須設定自訂中樞帳戶並新增至少一個藍圖 (Service Catalog 產品），才能將該資訊輸入 AWS Control Tower 主控台並開始佈建自訂帳戶。

**在 AWS Control Tower 主控台中建立或更新自訂帳戶。**

1. 輸入包含您的藍圖之帳戶的帳戶 ID。

1. 從該帳戶選取現有的 Service Catalog 產品 （現有的藍圖）。

1. 如果您有多個版本，請選取藍圖的正確版本 (Service Catalog 產品）。

1. （選用） 您可以在程序的這個時間點新增或變更藍圖佈建政策。藍圖佈建政策是以 JSON 撰寫並連接到 IAM 角色，因此可以佈建藍圖範本中指定的資源。AWS Control Tower 會在成員帳戶中建立此角色，以便 Service Catalog 可以使用 CloudFormation 堆疊集部署資源。角色已命名 `AWSControlTower-BlueprintExecution-bp-xxxx`。根據預設，`AdministratorAccess`政策會在此處套用。

1. 根據此藍圖，選擇您要在其中部署帳戶的 AWS 區域 或 區域。

1. 如果您的藍圖包含參數，您可以將參數的值輸入 AWS Control Tower 工作流程中的其他欄位。其他值可能包括：GitHub 儲存庫名稱、GitHub 分支、Amazon ECS 叢集名稱，以及儲存庫擁有者的 GitHub 身分。

1. 如果您的中樞帳戶或藍圖尚未準備好，您可以稍後遵循**帳戶更新**程序來自訂帳戶。

如需詳細資訊，請參閱[從藍圖建立自訂帳戶](create-afc-customized-account.md)。

# 從藍圖建立自訂帳戶
<a name="create-afc-customized-account"></a>

建立自訂藍圖後，您可以在 AWS Control Tower 帳戶工廠中開始建立自訂帳戶。

**當您建立新 AWS 帳戶時，請依照下列步驟部署自訂藍圖：**

1. 前往 中的 AWS Control Tower AWS 管理主控台。

1. 選取**帳戶工廠**和**建立帳戶**。

1. 輸入帳戶詳細資訊，例如帳戶名稱和電子郵件地址。

1. 使用電子郵件地址和使用者名稱設定 IAM Identity Center 詳細資訊。

1. 選取將新增您帳戶的已註冊 OU。

1. 展開**帳戶原廠自訂**區段。

1. 輸入包含 Service Catalog 產品的藍圖中樞帳戶的帳戶 ID，然後選擇**驗證**。如需藍圖中樞帳戶的詳細資訊，請參閱 [使用帳戶工廠自訂 (AFC) 自訂帳戶](af-customization-page.md)。

1. 從 Service Catalog 產品清單中選取包含所有藍圖的下拉式選單 （所有自訂和合作夥伴藍圖）。選擇要部署的藍圖和對應的版本。

1. 如果您的藍圖包含參數，則會顯示這些欄位供您填入。預設值會預先填入。

1. 最後，選取您要部署藍圖的位置，無論是**主區域**或**所有受管區域**。Route 53 或 IAM 等全域資源可能只需要部署到單一區域。區域資源，例如 Amazon EC2 執行個體或 Amazon S3 儲存貯體，可以部署到所有受管區域

1. 完成所有欄位後，選取**建立帳戶**。

**注意**  
使用 Terraform 建立的藍圖只能部署到一個區域，不能部署到多個區域。

您可以在**組織**頁面上檢視帳戶佈建的進度。當您的帳戶佈建完成時，藍圖指定的資源已在其中部署。若要檢視帳戶的詳細資訊和藍圖，請前往**帳戶詳細資訊**頁面。

# 在您註冊帳戶時，使用 AFC 自訂帳戶
<a name="enroll-and-customize"></a>

在 AWS Control Tower 主控台中註冊和自訂帳戶。

1. 導覽至 AWS Control Tower 主控台，然後從左側導覽中選取**組織**。

1. 您將看到可用帳戶的清單。識別您想要使用自訂藍圖註冊的帳戶。該帳戶**的狀態**欄應反映為**未註冊**狀態的帳戶。

1. 選取帳戶左側的選項按鈕，然後選擇畫面右上角**的動作**下拉式功能表。在這裡，您將選取**註冊**選項。

1. 使用帳戶的 IAM Identity Center 資訊完成**存取組態**區段。

1. 選取您的帳戶將成為成員的已註冊 OU。

1. 使用與**建立****帳戶程序 7-12 相同的步驟，完成帳戶原廠自訂**區段。如需詳細資訊，請參閱[使用佈建帳戶工廠帳戶 AWS Service Catalog](https://docs.aws.amazon.com/controltower/latest/userguide/provision-as-end-user.html)。

您可以在**組織**頁面上檢視帳戶進度的狀態。當您的帳戶註冊完成時，藍圖指定的資源已在其中部署。

# 將藍圖新增至 AWS Control Tower 帳戶
<a name="add-blueprint-to-account"></a>

 若要將藍圖新增至現有的 AWS Control Tower 成員帳戶，請遵循 AWS Control Tower 主控台中的**更新帳戶**工作流程，然後選擇要新增至帳戶的新藍圖。如需詳細資訊，請參閱[使用 AWS Control Tower 或使用 更新和移動帳戶工廠帳戶 AWS Service Catalog](https://docs.aws.amazon.com/controltower/latest/userguide/updating-account-factory-accounts.html#update-account-in-console)。

**注意**  
 如果您將新的藍圖新增至帳戶，則會覆寫現有的藍圖。

**注意**  
每個 AWS Control Tower 帳戶可以部署一個藍圖。

# 更新藍圖
<a name="update-a-blueprint"></a>

下列程序說明如何更新自訂藍圖，以及如何部署這些藍圖。

**更新您的自訂藍圖**

1. 使用新組態更新您的 CloudFormation 範本或 Terraform tar.gz 檔案 （藍圖）。

1. 將更新的藍圖儲存為新的版本 AWS Service Catalog。

**部署更新的藍圖**

1. 導覽至 AWS Control Tower 主控台中的**組織**頁面。

1. 依藍圖名稱和版本篩選**組織**頁面。

1. 遵循**更新帳戶**程序，並在您的帳戶中部署最新的藍圖版本。

**如果藍圖更新失敗**

當佈建產品處於 `AVAILABLE` 狀態時，AWS Control Tower 允許藍圖更新。如果您的佈建產品處於 `TAINTED` 狀態，更新將會失敗。我們建議採取以下解決方法：

1. 在 AWS Service Catalog 主控台中，手動更新`TAINTED`佈建的產品，將狀態變更為 `AVAILABLE`。如需詳細資訊，請參閱[更新佈建的產品](https://docs.aws.amazon.com//servicecatalog/latest/userguide/enduser-update.html)。

1. 然後，遵循 AWS Control Tower 的更新帳戶程序來修正藍圖部署錯誤。

*我們建議您使用此手動步驟，因為：*當您移除藍圖時，可能會導致移除成員帳戶中的資源。移除資源可能會影響您現有的工作負載。因此，我們建議您使用此方法，而不是更新藍圖的替代方式，特別是如果您正在執行生產工作負載，即移除和取代原始藍圖。

# 從帳戶移除藍圖
<a name="remove-a-blueprint"></a>

若要從帳戶移除藍圖，請遵循**更新帳戶**工作流程移除藍圖，並將帳戶傳回 AWS Control Tower 預設組態。

當您在主控台中輸入**更新帳戶**工作流程時，您會看到所有帳戶詳細資訊都會填入，而且自訂詳細資訊也不會填入。如果您將這些 AFC 詳細資訊保留空白，AWS Control Tower 會從帳戶移除藍圖。您會在動作開始之前看到警告訊息。

**注意**  
只有當您在**建立**帳戶或**更新帳戶程序期間選取藍圖時，AWS Control Tower 才會將藍圖新增至帳戶**。

# 合作夥伴藍圖
<a name="partner-blueprints"></a>

AWS Control Tower 帳戶工廠自訂 (AFC) 可讓您存取由 AWS 合作夥伴建置和管理的預先定義自訂藍圖。這些合作夥伴藍圖可協助您針對特定使用案例自訂帳戶。每個合作夥伴的藍圖都可協助您建置自訂帳戶，這些帳戶已預先設定為與該特定合作夥伴的產品方案搭配使用。

 若要檢視 AWS Control Tower 合作夥伴藍圖的完整清單，請導覽至主控台中的 Service Catalog **入門程式庫**。搜尋來源類型 **AWS Control Tower 藍圖**。

## Account Factory Customizations (AFC) 的考量事項
<a name="af-limitations"></a>
+ AFC 僅支援使用單一 AWS Service Catalog 藍圖產品的自訂。
+  AWS Service Catalog 藍圖產品必須在中樞帳戶中建立，並在與 AWS Control Tower 登陸區域主區域相同的區域中建立。
+ IAM `AWSControlTowerBlueprintAccess` 角色必須以適當的名稱、許可和信任政策建立。
+ AWS Control Tower 支援兩種藍圖部署選項：僅部署到主區域，或部署到由 AWS Control Tower 管理的所有區域。區域選擇不可用。
+ 當您更新成員帳戶中的藍圖時，藍圖中樞帳戶 ID 和 AWS Service Catalog 藍圖產品無法變更。
+ AWS Control Tower 不支援移除現有的藍圖，並在單一藍圖更新操作中新增新的藍圖。您可以移除藍圖，然後在個別操作中新增藍圖。
+ AWS Control Tower 會根據您是建立還是註冊自訂帳戶或非自訂帳戶，來變更行為。如果您不是使用藍圖建立或註冊自訂帳戶，AWS Control Tower 會在 AWS Control Tower 管理帳戶中建立 Account Factory 佈建產品 （透過 Service Catalog)。如果您在使用藍圖建立或註冊帳戶時指定自訂，AWS Control Tower 不會在 AWS Control Tower 管理帳戶中建立 Account Factory 佈建的產品。

## 如果發生藍圖錯誤
<a name="af-error"></a>

**套用藍圖時發生錯誤**

如果在將藍圖套用至帳戶的過程中發生錯誤，無論是新帳戶或您註冊 AWS Control Tower 的現有帳戶，復原程序都相同。帳戶將存在，但不會自訂，也不會註冊到 AWS Control Tower。若要繼續，請依照步驟將帳戶註冊到 AWS Control Tower，並在註冊時新增藍圖。

**建立`AWSControlTowerBlueprintAccess`角色時發生錯誤，以及解決方法**

當您從 AWS Control Tower 帳戶建立`AWSControlTowerBlueprintAccess`角色時，您必須使用該`AWSControlTowerExecution`角色以委託人身分登入。如果您以任何其他身分登入，SCP 會阻止`CreateRole`操作，如以下成品所示：

```
{
            "Condition": {
                "ArnNotLike": {
                    "aws:PrincipalArn": [
                        "arn:aws:iam::*:role/AWSControlTowerExecution",
                        "arn:aws:iam::*:role/stacksets-exec-*"
                    ]
                }
            },
            "Action": [
                "iam:AttachRolePolicy",
                "iam:CreateRole",
                "iam:DeleteRole",
                "iam:DeleteRolePermissionsBoundary",
                "iam:DeleteRolePolicy",
                "iam:DetachRolePolicy",
                "iam:PutRolePermissionsBoundary",
                "iam:PutRolePolicy",
                "iam:UpdateAssumeRolePolicy",
                "iam:UpdateRole",
                "iam:UpdateRoleDescription"
            ],
            "Resource": [
                "arn:aws:iam::*:role/aws-controltower-*",
                "arn:aws:iam::*:role/*AWSControlTower*",
                "arn:aws:iam::*:role/stacksets-exec-*"
            ],
            "Effect": "Deny",
            "Sid": "GRIAMROLEPOLICY"
        }
```

可用的解決方法如下：
+ （最佳建議） 擔任`AWSControlTowerExecution`角色並建立`AWSControlTowerBlueprintAccess`角色。如果您選擇此解決方法，請務必在之後立即登出該`AWSControlTowerExecution`角色，以防止意外變更資源。
+ 登入未在 AWS Control Tower 註冊的帳戶，因此不受此 SCP 約束。
+ 暫時編輯此 SCP 以允許 操作。
+ （強烈建議不要） 使用您的 AWS Control Tower 管理帳戶做為您的中樞帳戶，因此不受 SCP 約束。

## 根據 CloudFormation 自訂 AFC 藍圖的政策文件
<a name="custom-policy-document"></a>

當您透過帳戶工廠啟用藍圖時，AWS Control Tower CloudFormation 會指示 代表您建立 StackSet。 CloudFormation 需要存取您的受管帳戶，才能在 StackSet 中建立 CloudFormation 堆疊。雖然 CloudFormation 已透過 `AWSControlTowerExecution`角色在受管帳戶中具有管理員權限，但此角色無法擔任 CloudFormation。

在啟用藍圖的過程中，AWS Control Tower 會在成員帳戶中建立角色， CloudFormation 可能擔任該角色來完成 StackSet 管理任務。透過帳戶工廠啟用自訂藍圖的最簡單方法是使用*全部允許*政策，因為這些政策與任何藍圖範本相容。

不過，最佳實務建議您必須限制 CloudFormation 目標帳戶中的 許可。您可以提供自訂政策，AWS Control Tower 會套用到其建立 CloudFormation 供 使用的角色。例如，如果您的藍圖建立稱為*重要事項*的 SSM 參數，您可以提供下列政策：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCloudFormationActionsOnStacks",
            "Effect": "Allow",
            "Action": "cloudformation:*",
            "Resource": "arn:aws:cloudformation:*:*:stack/*"
        },
        {
            "Sid": "AllowSsmParameterActions",
            "Effect": "Allow",
            "Action": [
                "ssm:PutParameter",
                 "ssm:DeleteParameter",
                 "ssm:GetParameter",
                 "ssm:GetParameters"
            ],
            "Resource": "arn:*:ssm:*:*:parameter/something-important"
        }
    ]
}
```

------

所有 AFC 自訂政策都需要 `AllowCloudFormationActionsOnStacks`陳述式； CloudFormation 使用此角色來建立堆疊執行個體，因此需要在堆疊上執行 CloudFormation 動作的許可。`AllowSsmParameterActions` 區段專屬於要啟用的範本。

**解決許可問題**

當您啟用具有限制政策的藍圖時，您可能會發現沒有足夠的許可來啟用藍圖。若要解決這些問題，請修訂您的政策文件，並更新成員帳戶的藍圖偏好設定，以使用更正的政策。若要檢查政策是否足以啟用藍圖，請確定已授予 CloudFormation 許可，而且您可以直接使用該角色建立堆疊。

## 建立 Terraform 型 Service Catalog 產品所需的其他許可
<a name="custom-policy-document-tf"></a>

當您使用適用於 AFC 的 Terraform 組態檔案建立 AWS Service Catalog 外部產品時，除了建立範本中定義資源所需的許可之外， AWS Service Catalog 還需要將特定許可新增至您的 AFC 自訂 IAM 政策。如果您選擇預設的完整**管理員**政策，則不需要新增這些額外的許可。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "resource-groups:CreateGroup",
                "resource-groups:ListGroupResources",
                "resource-groups:DeleteGroup",
                "resource-groups:Tag"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": [
                "tag:GetResources",
                "tag:GetTagKeys",
                "tag:GetTagValues",
                "tag:TagResources",
                "tag:UntagResources"
            ],
            "Resource": "*",
            "Effect": "Allow"
        },
        {
            "Action": "s3:GetObject",
            "Effect": "Allow",
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/servicecatalog:provisioning": "true"
                }
            }
        }
    ]
}
```

------

如需使用 中的外部產品類型建立 Terraform 產品的詳細資訊 AWS Service Catalog，請參閱 Service Catalog 管理員指南中的[步驟 5：建立啟動角色](https://docs.aws.amazon.com//servicecatalog/latest/adminguide/getstarted-launchrole-Terraform.html)。

## 轉換為 AWS Service Catalog 外部產品類型
<a name="service-catalog-external-product-type"></a>

AWS Service Catalog 將 *Terraform Open Source* 產品和佈建產品的支援變更為新的產品類型，稱為*外部*。若要進一步了解此轉換，請參閱 *AWS Service Catalog 管理員指南*中的[將現有的 Terraform Open Source 產品和佈建產品更新為外部產品類型](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/update_terraform_open_source_to_external.html)。

此變更會影響您透過 AWS Control Tower 帳戶原廠自訂建立或註冊的現有帳戶。若要將這些帳戶轉換為*外部*產品類型，您需要在 AWS Service Catalog 和 AWS Control Tower 中進行變更。

**轉換為外部產品類型**

1. 升級您現有的 Terraform 參考引擎， AWS Service Catalog 以包含對*外部*和 *Terraform 開放原始碼*產品類型的支援。如需有關更新 Terraform 參考引擎的說明，請檢閱 [AWS Service Catalog GitHub 儲存庫](https://github.com/aws-samples/service-catalog-engine-for-terraform-os)。

1. 在 中 AWS Service Catalog，使用新的*外部*產品類型複製任何現有的 *Terraform Open Source* 產品 （藍圖） 和複本。**請勿終止現有的 Terraform 開放原始碼藍圖**。

1. 在 AWS Control Tower 中，使用 *Terraform 開放原始碼*藍圖更新每個帳戶，以使用新的*外部*藍圖。

   1. 若要更新藍圖，您必須先完全移除 *Terraform 開放原始碼*藍圖。如需詳細資訊，請參閱[從帳戶移除藍圖](https://docs.aws.amazon.com/controltower/latest/userguide/remove-a-blueprint.html)。

   1. 將新的*外部*藍圖新增至相同的帳戶。如需詳細資訊，請參閱[將藍圖新增至 AWS Control Tower 帳戶](https://docs.aws.amazon.com/controltower/latest/userguide/add-blueprint-to-account.html)。

1. 使用 *Terraform Open Source* 藍圖的所有帳戶更新為*外部*藍圖後，請返回 AWS Service Catalog 並終止使用 *Terraform Open Source* 作為產品類型的任何產品。

1. 接下來，使用 AWS Control Tower 帳戶原廠自訂建立或註冊的所有帳戶，都必須使用 *CloudFormation*或 *外部*產品類型參考藍圖。

   對於使用*外部*產品類型建立的藍圖，AWS Control Tower 僅支援使用 Terraform 範本和 Terraform 參考引擎的帳戶自訂。若要進一步了解，請檢閱[設定以進行自訂](https://docs.aws.amazon.com/controltower/latest/userguide/afc-setup-steps.html)。

**注意**  
建立新帳戶時，AWS Control Tower 不支援 *Terraform Open Source* 做為產品類型。若要進一步了解這些變更，請參閱《 *AWS Service Catalog 管理員指南*》中的[將現有的 Terraform 開放原始碼產品和佈建產品更新為*外部*產品類型](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/update_terraform_open_source_to_external.html)。 AWS Service Catalog 將視需要支援客戶完成此產品類型轉換。請聯絡您的 帳戶代表以請求協助。