ECS无法承担角色

Nat*_*eed 30 amazon-web-services aws-batch aws-ecs

从控制台,我正在调用一个提交批处理作业的lambda.批处理作业失败,表示ECS无法承担为执行作业定义而提供的角色.

对于角色,我添加了lambda和ECS服务.

错误消息:

"ECS无法承担为此任务提供的角色'arn:aws:iam :: 749340585813:role/golfnow-invoke-write-progress'.请验证传递的角色是否具有正确的信任关系和权限,以及你的IAM用户有权传递这个角色."

"TrainingJobRole": {
  "Type": "AWS::IAM::Role",
  "Properties": {
    "RoleName": "golfnow-invoke-write-progress",
    "AssumeRolePolicyDocument": {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "Service": [
              "lambda.amazonaws.com",
              "ecs.amazonaws.com"
            ]
          },
          "Action": [
            "sts:AssumeRole"
          ]
        }
      ]
    },
    "Path": "/"
  }
}
Run Code Online (Sandbox Code Playgroud)

批处理作业:

    "TrainingJob": {
  "Type": "AWS::Batch::JobDefinition",
  "Properties": {
    "Type": "container",
    "JobDefinitionName": {
      "Fn::Sub": "c12e-golfnow-${Environment}-job"
    },
    "ContainerProperties": {
      "Image": {
        "Fn::Join": [
          "",
          [
            "{{ image omitted }}",
            {
              "Ref": "AWS::Region"
            },
            ".amazonaws.com/amazonlinux:latest"
          ]
        ]
      },
      "Vcpus": 2,
      "Memory": 2000,
      "Command": [
        "while", "True", ";", "do", "echo", "'hello';", "done"
      ],
      "JobRoleArn": {
        "Fn::GetAtt": [
          "TrainingJobRole",
          "Arn"
        ]
      }
    },
    "RetryStrategy": {
      "Attempts": 1
    }
  }
},
"JobQueue": {
  "Type": "AWS::Batch::JobQueue",
  "Properties": {
    "Priority": 1,
    "ComputeEnvironmentOrder": [
      {
        "Order": 1,
        "ComputeEnvironment": {
          "Ref": "ComputeEnvironment"
        }
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是它被调用的问题吗?我的用户具有管理员权限,因此我不认为这是我的用户权限不足的问题.

Nat*_*eed 41

您必须将主体"ecs-tasks.amazonaws.com"添加到提交批处理作业(而不是"ecs.amazonaws.com")的角色的信任策略中.

修改后的角色:

"TrainingJobRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "RoleName": "golfnow-invoke-write-progress",
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": [
                  "lambda.amazonaws.com",
                  "ecs-tasks.amazonaws.com"
                ]
              },
              "Action": [
                "sts:AssumeRole"
              ]
            }
          ]
        },
        "Path": "/"
      }
    },
Run Code Online (Sandbox Code Playgroud)

  • 我发现的所有文档(包括AWS官方文档)都是将ecs.amazonaws.com添加到信任策略中,而不是ecs-tasks.amazonaws.com。这个答案帮助我解决了缺少校长的问题。 (4认同)
  • @balas,我同意。当我在控制台中查看正在运行的 ECS 角色的“信任关系”时,我注意到列出的实体是“ecs-tasks.amazonaws.com”(不幸的是,我在发现这个问题后才注意到它) (3认同)