

# 排查将 Amazon ECS Service Connect 与共享的 Amazon Cloud Map 命名空间结合使用时出现的问题
<a name="service-connect-shared-namespaces-troubleshooting"></a>

请使用以下信息排查共享 Amazon Cloud Map 命名空间和 Service Connect 的问题。有关查找错误消息的更多信息，请参阅 [Amazon ECS 故障排除](https://docs.amazonaws.cn/AmazonECS/latest/developerguide/troubleshooting.html)。

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

**重要**  
您必须使用 `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 操作（例如 `CreateCluster` 或 `UpdateCluster`）因缺少 Amazon Cloud Map 权限而失败时，就会出现这些问题。这些操作需要以下 Amazon Cloud Map 操作的权限：  
+ `servicediscovery:GetNamespace`
确保使用者账户已接受资源共享邀请，并且在 Service Connect 配置中使用正确的命名空间 ARN。

**服务创建或更新失败**  
当 Amazon ECS 操作（例如 `CreateService` 或 `UpdateService`）因缺少 Amazon Cloud Map 权限而失败时，就会出现这些问题。这些操作需要以下 Amazon Cloud Map 操作的权限：  
+ `servicediscovery:CreateService`
+ `servicediscovery:GetNamespace`
+ `servicediscovery:GetOperation`（用于创建新的 Amazon Cloud Map 服务）
+ `servicediscovery:GetService`（当 Amazon Cloud Map 服务已存在时）
确保使用者账户已接受资源共享邀请，并且在 Service Connect 配置中使用正确的命名空间 ARN。

**`ListServicesByNamespace` 操作失败**  
当 Amazon ECS `ListServicesByNamespace` 操作失败时，会出现此问题。此操作需要以下 Amazon 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 已停止任务错误](resolve-stopped-errors.md)。  
运行任务需要以下 Amazon Cloud Map 操作：  
+ `servicediscovery:GetOperation`
+ `servicediscovery:RegisterInstance`
确保使用者账户拥有所需的权限，并且可以访问共享命名空间。

**任务无法干净地停止或者停滞在 `DEACTIVATING` 或 `DEPROVISIONING` 状态**  
当任务在关闭期间因缺少权限而无法从 Amazon Cloud Map 服务注销时，会出现此问题。错误作为 `statusReason` 显示在任务附加中，可以使用 `DescribeTasks` API 进行检索。有关更多信息，请参阅《Amazon Elastic Container Service API 参考》**中的 [DescribeTasks](https://docs.amazonaws.cn/AmazonECS/latest/APIReference/API_DescribeTasks.html)。  
停止任务需要以下 Amazon Cloud Map 操作：  
+ `servicediscovery:DeregisterInstance`
+ `servicediscovery:GetOperation`
如果对共享命名空间的访问被撤销，则任务可能会保持 `DEACTIVATING` 或 `DEPROVISIONING` 状态，直到命名空间访问恢复。请请求命名空间所有者恢复对命名空间的访问。