web-dev-qa-db-fra.com

ECS incapable d'assumer le rôle

À partir de la console, j'appelle un lambda qui soumet un travail par lots. Le travail par lots échoue, indiquant qu'ECS est incapable d'assumer le rôle fourni pour exécuter la définition du travail.

Pour le rôle, j'ai ajouté les services lambda et ECS.

Le message d'erreur:

"ECS n'a pas pu assumer le rôle 'Arn: aws: iam :: 749340585813: role/golfnow-invoke-write-progress' qui A été fourni pour cette tâche. Vérifiez que le rôle a bien été transmis a la relation de confiance et les autorisations appropriées et que votre utilisateur IAM possède les autorisations nécessaires pour passer ce rôle. "

"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": "/"
  }
}

Le travail par lots:

    "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"
        }
      }
    ]
  }
}

Le problème avec la façon dont il est invoqué? Mon utilisateur a des privilèges d'administrateur. Je ne pense donc pas que cela pose un problème, car il ne dispose pas d'autorisations suffisantes.

9
Nate Reed

Vous devez ajouter le principal "ecs-tasks.amazonaws.com" à la règle de confiance pour le rôle qui soumet un travail batch (et non "ecs.amazonaws.com").

Rôle révisé:

"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": "/"
      }
    },
14
Nate Reed

Vous devez ajouter une stratégie de confiance à ECS pour appeler le service Batch.

   "Principal": {
      "Service":  [
            "batch.amazonaws.com"
      ]
    },
0