排查将 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 操作(例如
CreateCluster或UpdateCluster)因缺少 AWS Cloud Map 权限而失败时,就会出现这些问题。这些操作需要以下 AWS Cloud Map 操作的权限:-
servicediscovery:GetNamespace
确保使用者账户已接受资源共享邀请,并且在 Service Connect 配置中使用正确的命名空间 ARN。
-
- 服务创建或更新失败
-
当 Amazon ECS 操作(例如
CreateService或UpdateService)因缺少 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
确保使用者账户拥有所需的权限,并且可以访问共享命名空间。
-
- 任务无法干净地停止或者停滞在
DEACTIVATING或DEPROVISIONING状态 -
当任务在关闭期间因缺少权限而无法从 AWS Cloud Map 服务注销时,会出现此问题。错误作为
statusReason显示在任务附加中,可以使用DescribeTasksAPI 进行检索。有关更多信息,请参阅《Amazon Elastic Container Service API 参考》中的 DescribeTasks。停止任务需要以下 AWS Cloud Map 操作:
-
servicediscovery:DeregisterInstance -
servicediscovery:GetOperation
如果对共享命名空间的访问被撤销,则任务可能会保持
DEACTIVATING或DEPROVISIONING状态,直到命名空间访问恢复。请请求命名空间所有者恢复对命名空间的访问。 -