

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

# 使用帳戶工廠自訂 (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)

**注意**  
每個 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 將視需要支援客戶完成此產品類型轉換。請聯絡您的 帳戶代表以請求協助。