故障排除 - AWS Control Tower

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

故障排除

如果您在使用 AWS Control Tower 时遇到问题,可以根据我们的最佳实践使用以下信息来解决这些问题。如果您遇到的问题超出了以下信息的范围,或者在您尝试解决这些问题后仍然存在,请联系 Su AWS pport

登录区启动失败

登录区启动失败的常见原因:

  • 缺少对确认电子邮件的回复。

  • AWS CloudFormation StackSet 失败。

确认电子邮件:如果您的管理账户使用时间不到一小时,则在创建其他账户时可能会遇到问题。

要采取的操作

如果您遇到此问题,请查收电子邮件。您可能已经收到了一封等待回应的确认电子邮件。或者,我们建议您等待一个小时,然后重试。如果问题仍然存在,请联系 Supp AWS ort

失败 StackSets:landing zone 启动失败的另一个可能原因是 AWS CloudFormation StackSet 失败。 AWS 必须在 AWS Control Tower 管理的所有 AWS 区域的管理账户中启用安全令牌服务 (STS) 区域,这样配置才能成功;否则,堆栈集将无法启动。

要采取的操作

在启动 AWS Control Tower 之前,请务必启用所有必需 AWS 的安全令牌服务 (STS) 终端节点区域

要查看 AWS Con AWS 区域 trol Tower 支持的列表,请参阅AWS 区域如何与 AWS Control Tower 配合使用

着陆区不是最新的错误

如果您最近没有更新着陆区,则在尝试重新获得 AWS Control Tower 访问权限时可能会收到错误消息。您可能会看到类似于以下内容的错误消息:

Unable to access Control Tower

您的账户已经停用了太长时间。由于处于非活动状态,您必须更新着陆区才能访问 AWS Control Tower。

但是,您的 landing zone 更新可能会失败。

要采取的步骤

登录您组织的管理帐户,然后以 root 用户身份登录。您的 IAM 用户或在 IAM 身份中心的用户必须拥有 AWS Control Tower 管理员权限并且是该AWSControlTowerAdmins群组的一员。然后再次尝试更新。

新账户预置失败

如果遇到此问题,请检查以下常见原因。

当填写账户预置表单时,您可能已经:
  • 指定 tagOption

  • 启用 SNS 通知,

  • 启用预置产品通知。

请在不指定上述任何选项的情况下重新尝试预置账户。有关更多信息,请参阅 使用 Account Factory 配置 AWS Service Catalog 账户

失败的其他常见原因:
  • 如果您创建了预置产品计划(以查看资源更改),则您的账户预置可能会无限期地保持 In progress (正在进行) 状态。

  • 当其他 AWS Control Tower 配置更改正在进行时,在 Account Factory 中创建新账户将失败。例如,在运行向 OU 添加控件的流程时,如果您尝试配置帐户,Account Factory 将显示一条错误消息。

在 AWS Control Tower 中查看先前操作的状态
  • 导航到 AWS CloudFormation > StackSets

  • 检查与 AWS Control Tower 相关的每个堆栈集(前缀:AWSControlTower“”)

  • 查找仍在运行的 AWS CloudFormation StackSets 操作。

如果您的账户预置用时超过一小时,最好终止预置过程并重试。

无法注册现有账户

如果您尝试注册现有 AWS 账户但注册失败,则再次尝试时,错误消息可能会告诉您堆栈集存在。要继续操作,您必须在账户工厂中删除预置的产品。

如果首次注册失败的原因是您忘了提前在账户中创建 AWSControlTowerExecution 角色,您将收到的错误消息会正确地告诉您创建此角色。但是,当您尝试创建角色时,您可能会收到另一条错误消息,指出 AWS Control Tower 无法创建该角色。出现此错误的原因是该过程已部分完成。

在这种情况下,您必须执行两个恢复步骤,然后才能继续注册现有账户。首先,您必须通过 AWS Service Catalog 控制台终止 Account Factory 配置的产品。接下来,您必须使用 AWS Organizations 控制台手动将账户移出 OU 并移回根目录。完成此操作后,在账户中创建 AWSControlTowerExecution 角色,然后再次填写 Enroll account (注册账户) 表单。

注册失败的另一个可能原因是该账户拥有现有 AWS Config 资源。在这种情况下,请参阅注册拥有现有 AWS Config 资源的账户,了解如何修改现有资源的说明。

无法更新账户工厂账户

当账户处于不一致状态时,无法从 Account Factory 或 Account Factory 成功更新该账户 AWS Service Catalog。

案例 1:您可能会遇到类似以下错误消息:

AWS Control Tower could not baseline VPC in the managed account because of existing resource dependencies.

常见原因:AWS Control Tower 在初始配置期间总是删除 AWS 默认 VPC。要在账户中拥有 AWS 默认 VPC,您必须在创建账户后添加该默认 VPC。AWS Control Tower 有自己的默认 VPC,可以取代 AWS 默认 VPC,除非你按照演练中显示的方式设置 Account Factory,这样 AWS Control Tower 就不会预置 VPC,这样 AWS Control Tower 就根本不会配置 VPC。这样,该账户没有 VPC。如果您想使用 AWS 默认 VPC,则必须重新添加该默认 VPC。

但是,AWS Control Tower 不支持 AWS 默认 VPC。部署一个此 VPC 会导致账户进入 Tainted 状态。当账户处于该状态时,您无法通过更新账户 AWS Service Catalog。

要执行的操作:您必须删除您添加的默认 VPC,然后才能更新账户。

注意

Tainted状态会导致后续问题:未更新的账户可能会阻止对其所属的 OU 启用控制。

案例 2:您可能会看到类似以下错误消息:

AWS Control Tower detects that your enrolled account has been moved to a new organizational unit.

常见原因:您试图将账户从一个注册的 OU 转移到另一个 OU,但旧的 AWS Config 规则仍然存在。该账户处于不一致的状态。

要采取的行动:

如果有意转移账户:
  • 在 Service Catalog 中终止账户。

  • 再次注册。

  • 上下文/影响:已部署的 AWS Config 规则与目标 OU 规定的配置不匹配。

  • AWS Config 规则可能会保留之前的 OU,从而导致意外支出。

  • 由于资源命名冲突,重新注册或更新账户的尝试将失败。

如果账户转移是意外的:
  • 将账户恢复到其原来的 OU。

  • 从 Service Catalog 更新账户。

  • 在启动参数中,输入账户最初所在的 OU。

  • 上下文/影响:如果账户未返回其原始 OU,则其状态将与其所在的新 OU 所规定的控制不一致。

  • 更新账户不是有效的补救措施,因为它不会删除与其先前的 OU 关联的 AWS Config 规则。

无法更新着陆区

如果更新失败,AWS Control Tower 不会回滚到之前的着陆区版本。你可能会发现你的着陆区处于不确定状态。如果是,请联系 AWS 支持人员。

着陆区更新可能由于多种原因而失败。

  • 未满足先决条件

  • AWS Config 某些账户中存在资源

  • 存在已关闭的账户

未满足先决条件

着陆区更新必须满足与着陆区设置相同的先决条件。在更新之前,请查看发布前检查

AWS Config 资源存在于安全 OU 账户中

请勿在您的审核日志存档账户中添加 AWS Config 资源。如果存在这些资源,则无法完成 landing zone 更新过程。这些限制与首次注册账号或设置 landing zone 的限制类似。有关更多信息,请参阅注册拥有现有 AWS Config 资源的账户

存在已关闭的账户

当账户处于 “已关闭” 或 “已暂停” 状态时,您在尝试更新 landing zone 时可能会遇到问题。在对 landing zone 进行更新之前,您必须删除每个已关闭账户上的预配置产品。

在 AWS Service Catalog 预配置产品页面上,您可能会看到类似于以下内容的错误消息:

AWSControlTowerExecution role can't be assumed on the account.

常见原因:您在未删除预配置产品的情况下暂停了账户。

要采取的措施:如果您看到此错误,则有两种选择:

  1. 联系 S AWS upport 并重新打开账户,删除预配置的产品,然后再次关闭该账户。

  2. 从中移除因账户关闭而成为孤立的资源。 StackSets (此选项仅在您未移除的 StackSets 实例处于 “当前” 状态时才可用。)

要从中移除资源 StackSets,请对每个已关闭的账户执行以下操作:
  • 进入每个 AWS Control Tower, StackSets 然后 StackInstances 从每个区域中删除已关闭的账户。

  • 重要:选择 “保留堆栈” 选项,以便仅 StackSet 删除堆栈实例。 StackSet 无法从已关闭的账户中担任角色,因此如果它尝试代入该AWSControlTowerExecution角色,它将失败,这会导致您收到错误消息。

提及的失败错误 AWS Config

如果 AWS Config 在 AWS Control Tower 支持的任何 AWS 区域中启用,则由于预检查失败,您可能会收到一条错误消息。由于某些潜在的行为,该消息似乎无法充分解释问题 AWS Config。

您可能会收到一条错误消息,类似于以下内容之一:
  • AWS Control Tower cannot create an AWS Config delivery channel because one already exists. To continue, delete the existing delivery channel and try again
.

  • AWS Control Tower cannot create an AWS Config configuration recorder because one already exists. To continue, delete the existing delivery channel and try again
.

常见原因:在 AWS 账户上启用该 AWS Config 服务时,它会使用默认命名创建配置记录器和传送渠道。如果您通过控制台禁用该 AWS Config 服务,它不会删除配置记录器或传送渠道。您必须通过 CLI 将其删除,或者对其进行修改以供 AWS Control Tower 使用。如果在 AWS Control Tower 支持的任何一个区域启用了该 AWS Config 服务,则可能会导致此故障。

如果该账户已有 AWS Config 资源,请参阅注册拥有现有 AWS Config 资源的账户,了解如何修改现有资源的说明。

要执行的操作:删除所有受支持区域中的配置记录器和传递通道。仅仅禁用 AWS Config 是不够的,必须通过 CLI 删除配置记录器和传送渠道。从 CLI 中删除配置记录器和交付渠道后,您可以再次尝试启动 AWS Control Tower 并注册账户。

如果您正在部署预配置产品,则必须先删除预配置产品,然后再重试。否则,您可能会看到类似以下错误消息:

  • An error occurred (InvalidParametersException) when calling the ProvisionProduct operation: A stack named Stackname already exists.

在消息中,Stackname指定堆栈的名称。

以下是一些用于确定配置记录器和传送渠道状态的 AWS Config CLI 命令示例。

查看命令:

  • aws configservice describe-delivery-channels

  • aws configservice describe-delivery-channel-status

  • aws configservice describe-configuration-recorders

  • The normal response is something like "name": "default"

删除命令:

  • aws configservice stop-configuration-recorder --configuration-recorder-name NAME-FROM-DESCRIBE-OUTPUT

  • aws configservice delete-delivery-channel --delivery-channel-name NAME-FROM-DESCRIBE-OUTPUT

  • aws configservice delete-configuration-recorder --configuration-recorder-name NAME-FROM-DESCRIBE-OUTPUT

有关更多信息,请参阅 AWS Config 文档

未找到启动路径错误

当您尝试创建新账户时,您可能会看到类似以下内容的错误消息:

No launch paths found for resource: prod-dpqqfywxxxx

此错误消息由生成 AWS Service Catalog,这是一项帮助在 AWS Control Tower 中配置账户的集成服务。

常见原因:

  • 您可能以 root 用户身份登录。AWS Control Tower 不支持在您以根用户身份登录时创建账户。

  • 您的 IAM Identity Center 用户尚未添加到相应的权限组。您可能需要将您的 IAM Identity Center 用户添加到以下权限组之一:AWSAccountFactory(用于最终用户访问)或 AWSServiceCatalogAdmins(用于管理员访问权限)。

  • 如果您以 IAM 用户身份通过身份验证,则必须将其添加到 AWS Service Catalog 产品组合中,这样它才具有正确的权限。

  • 如果您拥有正确的权限,但检测到 AWS Control Tower 偏差,因此需要进行漂移修复,也会出现此问题。要修复大多数类型的漂移,请在着陆区域设置页面上选择重置

收到权限不足错误

在某些情况下,您的账户可能不具备执行某些工作的必要权限 AWS Organizations。如果您遇到以下类型的错误,请检查所有权限区域,例如 IAM 或 IAM Identity Center 权限,以确保这些地方没有拒绝您的权限:

You have insufficient permissions to perform AWS Organizations API actions.

如果您认为自己的工作需要您正在尝试的操作,但找不到任何相关的限制,请联系您的系统管理员或 Su AWS pport

Detective 控制未对账户生效

如果您最近将 AWS Control Tower 部署扩展到一个新 AWS 区域,则在更新受 AWS Control Tower 管理的 OU 中的个人账户之前,新应用的侦探控制不会对您在任何地区创建的新账户生效。对现有账户的现有侦查控制措施仍然有效。

如果您在更新帐户之前尝试启用侦探控件,则可能会看到类似以下错误消息:

AWS Control Tower can't enable the selected control on this OU. AWS Control Tower cannot apply the control on the OU ou-xxx-xxxxxxxx, because child accounts have dependencies that are missing. Update all child accounts under the OU, then try again.

要采取的操作:更新账户。

要通过 AWS Control Tower 控制台更新您的账户,请参阅何时更新 AWS Control Tower 业务单元和账户

要以编程方式更新多个个人账户,您可以使用中的 API AWS Service Catalog 和 AWS CLI 来自动更新。有关如何处理更新过程的更多信息,请参阅此视频演练。 你可以用 UpdateProvisionedProductAPI 代替视频中显示的 ProvisionProductAPI。

如果您在为账户启用侦探控制方面遇到更多困难,请联系 Su AWS pport

AWS Organizations API 返回的超出速率错误

可能的原因

您的工作负载正在运行,而 AWS Control Tower 正在运行每日扫描以检查您的 SCP 是否存在偏差。

要遵循的步骤

如果您遇到 API 限制或rate exceeded错误,请尝试以下步骤:

  • 在不同的时间运行您的工作负载。(请参阅按地区划分的 AWS Control Tower SCP 不变性扫描时间表,了解 AWS Control Tower 何时运行审计扫描。)

  • 如果您直接通过 HTTP 调用 API:请使用 AWS SDK,它会自动重试失败的操作

  • 通过 Service Quotas 和 Su AWS pport 申请提高限

可以在此处找到 Elastic Beanstalk 中 API 限制的疑难解答说明示例:https://aws.amazon.com/premiumsupport/knowledge-center/elastic-beanstalk-api-throttling-errors/

无法将 Account Factory 账户直接从一个 AWS Control Tower 着陆区转移到另一个 AWS Control Tower 着陆区

警告

这种做法不符合注册合格账户的先决条件,因为符合条件的账户必须属于同一个整体 AWS 组织,而且每个组织可能只有一个 landing zone。如果您尝试执行此操作,但发现自己收到了多条错误消息,那么以下信息可能会有所帮助。

要将您通过 Account Factory 配置的账户转移到另一个由 AWS Control Tower 管理的着陆区,在另一个管理账户下,您必须从原始 OU 中移除所有 IAM 角色和与该账户关联的堆栈。从部署账户的每个区域中移除这些资源。

注意

移除资源的最佳方法是,在尝试移动账户之前,先取消其原始 OU 中的账户配置。

如果你不移除资源,那么注册新 OU 就会失败,这有点惊人。您可能会遇到一条或多条错误消息,并且会一直收到类似的错误消息,直到剩余的角色和堆栈从部署账户的每个区域中移除。

每次收到错误消息时,都必须将该账户从新 OU 中移除,删除作为错误消息主题的旧资源,然后尝试将该账户移回新 OU。对于部署账户的每个区域, removing-and-deleting 必须对所有剩余资源重复此过程,可能是 10 或 20 次。之所以出现这些反复出现的错误,是因为该账户被配置到具有防止 IAM 角色删除的 SCP 的 OU。在重试之前,您可以删除账户的所有资源,从而缩短恢复过程。

以下示例显示了如果仍有未删除的角色和堆栈,您可能会收到的失败消息类型。只要保留旧资源,每次尝试注册账户时,您很可能会一次看到其中一条消息。

已针对示例修改了资源 ID 字符串的值。在您可能收到的错误消息中,它们的值将不相同。您可能会看到一条类似于以下示例的消息:

  • AWS Control Tower cannot create the IAM role aws-controltower-AdministratorExecutionRole because the role already exists. To continue, delete the existing IAM role and try again.

  • AWS Control Tower cannot create the IAM role aws-controltower-ConfigRecorderRole because the role already exists. To continue, delete the existing IAM role and try again.

  • AWS Control Tower cannot create the IAM role aws-controltower-ForwardSnsNotificationRole because the role already exists. To continue, delete the existing IAM role and try again.

或者你可能会看到一条关于堆栈集失败的错误消息,类似于以下内容:

  "Error\":\"StackSetFailState\", \"Cause\":\"StackSetOperation on AWSControlTowerBP-BASELINE-CLOUDWATCH with id 8aXXXXf5-e0XX-4XXa-bc4XX-dXXXXXee31 has reached SUCCEEDED state but has 1 NON-CURRENT stack instances; here is the summary :{ StackSet Id: AWSControlTowerBP-BASELINE-CLOUDWATCH:40XXXbf2-Xead-46a1-XXXa-eXXXXecb2ee2, Stack instance Id: arn:aws:cloudformation:eu-west-1:1X23456789XX: stack/StackSet-AWSControlTowerBP-BASELINE-CLOUDWATCH-4feXXXXXX-ecXX-XXc6-bXXX-4ae678/4feXXXXXX-ecX-4ae123458, Status: OUTDATED, Status Reason: ResourceLogicalId:ForwardSnsNotification, ResourceType:AWS::Lambda::Function, ResourceStatusReason:aws-controltower-NotificationForwarder already exists in stack arn:aws:cloudformation:eu-west-1:1X23456789XX: stack/StackSet-AWSControlTowerBP-BASELINE-CLOUDWATCH-4feXXXXXX-ecXX-XXc6-bXXX-4ae678/4feXXXXXX-ecX-4ae123458.

从第一个 OU 中移除所有剩余资源后,您将能够成功邀请、配置账户或将该账户注册到新 OU。

AWS Support

如果要将现有成员账户移动到其他支持计划中,您可以使用根账户凭证登录各个账户,比较计划,然后根据您的意愿设置支持级别。

我们建议您在更改支持计划时更新 MFA 和账户安全联系人。