排查将 Amazon ECS Service Connect 与共享的 AWS Cloud Map 命名空间结合使用时出现的问题 - Amazon Elastic Container Service

排查将 Amazon ECS Service Connect 与共享的 AWS Cloud Map 命名空间结合使用时出现的问题

请使用以下信息排查共享 AWS Cloud Map 命名空间和 Service Connect 的问题。有关查找错误消息的更多信息,请参阅 Amazon ECS 故障排除

由于缺少权限或者如果命名空间的访问被撤销,会出现与权限问题相关的错误消息。

重要

您必须使用 AWSRAMPermissionCloudMapECSFullPermission 托管权限来共享命名空间,Service Connect 才能与命名空间正常协作。

错误消息会以以下格式之一显示:

An error occurred (ClientException) when calling the <OperationName> operation: User: arn:aws:iam::<account-id>:user/<user-name> is not authorized to perform: <ActionName> on resource: <ResourceArn> because no resource-based policy allows the <ActionName> action(调用 <OperationName> 操作时发生错误 (ClientException):用户 arn:aws:iam::<account-id>:user/<user-name> 无权对资源 <ResourceArn> 执行 <ActionName>,因为没有任何基于资源的策略允许执行 <ActionName> 操作)

以下情况可能会导致出现此格式的错误消息:

集群创建或更新失败

当 Amazon ECS 操作(例如 CreateClusterUpdateCluster)因缺少 AWS Cloud Map 权限而失败时,就会出现这些问题。这些操作需要以下 AWS Cloud Map 操作的权限:

  • servicediscovery:GetNamespace

确保使用者账户已接受资源共享邀请,并且在 Service Connect 配置中使用正确的命名空间 ARN。

服务创建或更新失败

当 Amazon ECS 操作(例如 CreateServiceUpdateService)因缺少 AWS Cloud Map 权限而失败时,就会出现这些问题。这些操作需要以下 AWS Cloud Map 操作的权限:

  • servicediscovery:CreateService

  • servicediscovery:GetNamespace

  • servicediscovery:GetOperation(用于创建新的 AWS Cloud Map 服务)

  • servicediscovery:GetService(当 AWS Cloud Map 服务已存在时)

确保使用者账户已接受资源共享邀请,并且在 Service Connect 配置中使用正确的命名空间 ARN。

ListServicesByNamespace 操作失败

当 Amazon ECS ListServicesByNamespace 操作失败时,会出现此问题。此操作需要以下 AWS Cloud Map 操作的权限:

  • servicediscovery:GetNamespace

要解决此问题,请执行以下操作:

  • 验证使用者账户是否具有 servicediscovery:GetNamespace 权限。

  • 调用 API 时使用命名空间 ARN,而不是名称。

  • 确保资源共享处于活动状态并且已接受邀请。

User: <iam-user> is not authorized to perform: <ActionName> on resource: <ResourceArn> with an explicit deny in an identity-based policy.(用户 <iam-user> 无权对资源 <ResourceArn> 执行 <ActionName>,因为基于身份的策略中存在明确拒绝。)

以下情况可能会导致出现此格式的错误消息:

服务删除失败并停滞在 DRAINING 状态

如果对命名空间的访问被撤销,则当 Amazon ECS DeleteService 操作因缺少 servicediscovery:DeleteService 权限而失败时,会出现此问题。该服务最初可能看似已成功删除,但会停滞在 DRAINING 状态。错误消息会显示为 Amazon ECS 服务事件。

要解决此问题,命名空间所有者必须与使用者账户共享命名空间,以允许完成服务删除。

服务中的任务运行失败

当任务因缺少权限而启动失败时,会出现此问题。错误消息显示为任务停止错误。有关更多信息,请参阅 解决 Amazon ECS 已停止任务错误

运行任务需要以下 AWS Cloud Map 操作:

  • servicediscovery:GetOperation

  • servicediscovery:RegisterInstance

确保使用者账户拥有所需的权限,并且可以访问共享命名空间。

任务无法干净地停止或者停滞在 DEACTIVATINGDEPROVISIONING 状态

当任务在关闭期间因缺少权限而无法从 AWS Cloud Map 服务注销时,会出现此问题。错误作为 statusReason 显示在任务附加中,可以使用 DescribeTasks API 进行检索。有关更多信息,请参阅《Amazon Elastic Container Service API 参考》中的 DescribeTasks

停止任务需要以下 AWS Cloud Map 操作:

  • servicediscovery:DeregisterInstance

  • servicediscovery:GetOperation

如果对共享命名空间的访问被撤销,则任务可能会保持 DEACTIVATINGDEPROVISIONING 状态,直到命名空间访问恢复。请请求命名空间所有者恢复对命名空间的访问。