如何排查运行 Amazon ECS 任务时出现的错误 "ECS was unable to assume the role"?

上次更新日期:2022 年 3 月 4 日

我在运行 Amazon Elastic Container Service (Amazon ECS)/AWS Fargate 任务时收到以下错误:

ECS was unable to assume the role 'arn:aws:iam::xxxxxxxxxxxx:role/yyyyyyyy' that was provided for this task.请验证传递的角色是否具有适当的信任关系和权限,以及您的 IAM 用户是否有权传递此角色。

解决方法

您收到此错误是由于以下一个或多个原因造成的:

  • 任务定义中指定的任务执行 AWS Identity and Access Management (IAM) 角色或任务角色不存在。
  • 任务定义中指定的任务执行 IAM 角色或任务角色没有正确的信任关系策略。

验证任务执行角色或任务角色是否存在

要使用控制台检查任务定义中定义的任务执行角色或任务角色是否存在,请执行以下操作:

  1. 打开 IAM console(IAM 控制台)。
  2. 选择 Roles(角色)。
  3. 在角色列表中搜索任务执行角色或任务定义中包含的任务角色。

要使用 AWS Command Line Interface (AWS CLI) 检查任务执行角色或任务角色是否存在,请运行以下命令:

注意:此命令检索有关指定 IAM 角色的信息。

aws iam get-role --role-name example-task-execution-role

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

如果角色不存在,则会出现以下错误:

An error occurred (NoSuchEntity) when calling the GetRole operation: The role with name example-task-execution-role cannot be found.

如果角色不存在,请考虑执行以下任一操作:

验证任务定义中的任务执行角色或任务角色是否具有正确的信任关系策略

确保角色的可信关系策略允许服务 ecs-tasks.amazonaws.com。这就要求 Amazon ECS 任务承担指定的 IAM 角色。

要检查信任关系策略并根据需要进行更新,请执行以下操作:

1.    打开 IAM console(IAM 控制台)。

2.    在导航窗格中,选择角色

3.    搜索任务执行角色或任务定义中包含的任务角色列表。

4.    选择角色。

5.    选择 Trust relationships(信任关系)。

6.    验证角色的信任关系是否包含以下策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

7.    如果信任关系与策略匹配,请选择 Cancel(取消)。否则,请选择 Edit trust relationship(编辑信任关系)。

8.    将上述策略复制到 Policy Document(策略文档)窗口中,然后选择 Update Trust Policy(更新信任策略)。