

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Account Factory Customization（AFC）功能自定义账户
<a name="af-customization-page"></a>

**注意**  
单个账户的配置、更新和自定义必须针对 AWSControlTowerBaseline 已启用的组织单位 (OU)。如果 OU 未 AWSControlTowerBaseline 启用，则可以激活账户自动注册功能，也可以使用该 OU ResetEnabledControl APIs 上的 an ResetEnabledBaseline d on an EnabledBaselines d EnabledControls and and 来注册账户。有关详细信息 AWSControlTowerBaseline，请参阅：[适用于 OU 级别的基准类型](types-of-baselines.md#ou-baseline-types)。

AWS Control Tower 允许您在从 AWS Control Tower 控制台配置新资源和现有资源 AWS 账户 时对其进行自定义。在您设置 Account Factory Customization 后，AWS Control Tower 会在将来进行预置时自动执行此流程，因此您无需维护任何管线。资源预置完成后，自定义账户就立即可供使用。

**为新账户预置蓝图**

您的自定义账户是在 AWS Control Tower Account Factory 中通过 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 的更多信息，请参阅 [Automate account customization using Account Factory Customization in AWS Control Tower](https://aws.amazon.com//blogs/mt/automate-account-customization-using-account-factory-customization-in-aws-control-tower/)。

**先决条件**  
在开始使用 AWS Control Tower Account Factory 创建自定义账户之前，您必须部署一个 AWS Control Tower 登录区环境，并且必须使用 AWS Control Tower 注册一个组织单元（OU），新创建的账户将存放在该单位中。

**自定义准备工作**
+ *指定中心账户：*您可以创建一个新账户作为中心账户，也可以使用现有账户 AWS 账户。强烈建议您不要使用 AWS Control Tower 管理账户作为蓝图中心账户。
+ *添加必要的角色：*如果您计划注册 AWS 账户 AWS Control Tower 并对其进行自定义，则必须先将该`AWSControlTowerExecution`角色添加到这些账户，就像您注册到 AWS Control Tower 的任何其他账户一样。
+ *配置合作伙伴蓝图（可选）：*如果您计划使用具有市场订阅要求的合作伙伴蓝图，则必须先从 AWS Control Tower 管理账户配置这些蓝图，然后再将合作伙伴蓝图部署为 Account Factory 自定义蓝图。

**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 Customization（AFC）的注意事项](#af-limitations)
+ [如果出现蓝图错误](#af-error)
+ [根据以下内容为亚足联蓝图定制您的政策文件 CloudFormation](#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` 的角色。

下面是一个信任策略示例，与您需要为自己的角色添加的策略类似。此策略展示了授予最低访问权限的最佳实践。当您制定自己的策略时，请将 *YourManagementAccountId* 替换为您的 AWS Control Tower 管理账户的实际账户 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 许可，将对 Terrafor *m 开源产品和预配置产品的支持 AWS Service Catalog 更改为一种名为 Exter* nal 的新产品类型。*要详细了解此更改对 AFC 的影响，包括如何将现有账户蓝图更新为 External 产品类型，请查看 [Transition to External product type](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 Account Factory 中创建自定义账户。

**创建新 AWS 账户时，请按照以下步骤部署自定义蓝图：**

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

1. 选择 **Account Factory**，然后选择**创建账户**。

1. 输入账户详细信息，例如账户名称和电子邮件地址。

1. 使用电子邮件地址和用户名配置 IAM Identity Center 详细信息。

1. 选择将要在其中添加账户的已注册 OU。

1. 展开 **Account Factory 自定义**部分。

1. 输入包含您的 Service Catalog 产品的蓝图中心账户的账户 ID，然后选择**验证**。有关蓝图中心账户的更多信息，请参阅[使用 Account Factory Customization（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 步，使用相同的步骤填写 **Account Factory 自定义**部分。有关更多信息，请参阅 Provision A [ccount Factory 账户使用](https://docs.aws.amazon.com/controltower/latest/userguide/provision-as-end-user.html)于 AWS Service Catalog。

您可以在**组织**页面上查看账户进度状态。账户注册完成后，蓝图中指定的资源就已部署在账户中。

# 向 AWS Control Tower 账户添加蓝图
<a name="add-blueprint-to-account"></a>

 要向现有的 AWS Control Tower 成员账户添加蓝图，请按照 AWS Control Tower 控制台中的**更新账户**工作流操作，然后选择要添加到账户的新蓝图。有关更多信息，请参阅[使用 AWS Control Tower 或 AWS Service Catalog更新和移动 Account Factory 账户](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 Customization（AFC）的注意事项
<a name="af-limitations"></a>
+ AFC 仅支持使用单个 AWS Service Catalog 蓝图产品进行自定义。
+  AWS Service Catalog 蓝图产品必须在中心账户中创建，并且必须与 AWS Control Tower 着陆区主区域位于同一区域。
+ 必须使用正确的名称、权限和信任策略创建 `AWSControlTowerBlueprintAccess` IAM 角色。
+ 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` 角色以主体身份登录。如果您以任何其他身份登录，则 `CreateRole` 操作会被 SCP 阻止，如以下构件所示：

```
{
            "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
<a name="custom-policy-document"></a>

当您通过账户工厂启用蓝图时，AWS Control Tower 会指示 CloudFormation 您 StackSet 代表您创建蓝图。 CloudFormation 需要访问您的托管账户才能在中创建 CloudFormation 堆栈。 StackSet尽管 CloudFormation 已通过该`AWSControlTowerExecution`角色在托管账户中拥有管理员权限，但该角色不能由 CloudFormation担任。

作为启用蓝图的一部分，AWS Control Tower 在成员账户中创建一个角色，该角色 CloudFormation 可以假设该角色完成 StackSet 管理任务。通过 Account Factory 启用自定义蓝图的最简单方法是使用 *allow-all* 策略，因为这些策略与任何蓝图模板兼容。

但是，最佳实践建议您必须限制目标账户 CloudFormation 中的权限。您可以提供自定义策略，AWS Control Tower 将其应用于其创建的角色 CloudFormation 以供使用。例如，如果蓝图创建了一个名为 *something-important* 的 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 策略添加某些权限。如果您选择默认的完整 **Admin** 策略，则无需添加这些额外权限。

------
#### [ 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 开源*产品的支持更改为一种名为 External 的新产品类型。*要了解有关此过渡的更多信息，请查看《AWS Service Catalog 管理员指南》**中的 [Updating existing Terraform Open Source products and provisioned products to the External product type](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/update_terraform_open_source_to_external.html)。

此更改会影响您通过 AWS Control Tower Account Factory 自定义创建或注册的现有账户。要将这些账户过渡到*外部*产品类型，您需要同时在 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 开源*产品（蓝图），副本使用新的外部产品类型。***不要终止现有的 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 开源*蓝图的账户更新为*外部*蓝图后，返回 AWS Service Catalog 并终止所有使用 *Terraform 开*源作为产品类型的产品。

1. 今后，所有使用 AWS Control Tower Account Factory 自定义创建或注册的账户都必须使用 *CloudFormation* 或*外部*产品类型引用蓝图。

   对于使用*外部*产品类型创建的蓝图，AWS Control Tower 仅支持使用 Terraform 模板和 Terraform 参考引擎进行的账户自定义。要了解更多信息，请查看[设置以进行自定义](https://docs.aws.amazon.com/controltower/latest/userguide/afc-setup-steps.html)。

**注意**  
在创建新账户时，AWS Control Tower 不支持将 *Terraform 开源*作为一种产品类型。*要了解有关这些变更的更多信息，请查看[管理员指南中的将现有 Terraform 开源产品和预配置产品更新为*外部*产品类型](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/update_terraform_open_source_to_external.html)。AWS Service Catalog * AWS Service Catalog 将根据需要支持客户完成此产品类型过渡。如需帮助，请联系您的客户代表。