Как дать задаче Fargate права на загрузку в S3 - PullRequest
0 голосов
/ 10 июля 2020

Я хочу загрузить на S3 из задачи Fargate. Можно ли этого достичь, указав только ExecutionRoleArn, а не указав как ExecutionRoleArn, так и TaskRoleArn? 1005 *

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::example_bucket/*"
        }
    ]
}

AmazonECSTaskExecutionRolePolicy:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken",
                "ecr:BatchCheckLayerAvailability",
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

Со следующими доверительными отношениями:

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

Достаточно ли этого, чтобы разрешить загрузку задачи на S3? Или мне нужно определить TaskRoleArn?

Ответы [ 3 ]

0 голосов
/ 10 июля 2020

Ваши политики не включают никаких s3 разрешений. Таким образом, вы должны определить свои разрешения s3 в роли задачи :

С ролями IAM для задач Amazon ECS вы можете указать роль IAM, которую может использовать контейнеров в задаче .

0 голосов
/ 10 июля 2020

В случае Fargate обе роли IAM имеют разные роли

  • Роль исполнения

Это роль является обязательной и вы не можете запустить задачу без этой роли , даже если вы добавите политику ExecuationRole в Task Role

Чтобы вызвать эту ошибку, просто установите Execution role = None , вы не сможете запустить задачу.

enter image description here

AWS Форумы (невозможно создать новую версию определения задачи)

  • Роль задачи

Эта роль необязательная , и вы можете добавить в эту роль разрешение, связанное с s3,

Необязательная роль IAM, которую задачи могут использовать для выполнения Запросы API к авторизованным AWS службам .

Кажется, ваша полиция в порядке,

  • Создать ecs_s3_upload_role
  • Добавить политику ниже
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::example_bucket/*"
        }
    ]
}

Теперь Fargate Task сможет загружать в корзину S3.

0 голосов
/ 10 июля 2020

ExecutionRoleArn используется службой для правильной настройки задачи, включая извлечение любых изображений из ECR.

TaskRoleArn используется задачей для предоставления ей необходимых разрешений. взаимодействовать с другими AWS Сервисами (такими как S3).

Технически оба Arns могут быть одинаковыми, однако я бы предложил разделить их на разные роли, чтобы избежать путаницы с разрешениями, необходимыми для обоих сценариев ios, для которой используется роль.

Кроме того, у вас должна быть конечная точка для ecs.amazonaws.com. Фактически, полный список услуг в зависимости от того, как вы используете ECS, приведен ниже (хотя большинство из них можно удалить, например, спот, если вы не используете спот, или автомасштабирование, если вы не используете автомасштабирование).

"ecs.amazonaws.com",
"ecs-tasks.amazonaws.com",
"spot.amazonaws.com",
"spotfleet.amazonaws.com",
"ecs.application-autoscaling.amazonaws.com",
"autoscaling.amazonaws.com"
...