Назад | Перейти на главную страницу

Почему AWS Lambda нужно передавать ecsTaskExecutionRole в задачу ECS

Я пишу функцию AWS Lambda для запуска задачи ECS Fargate. Я следую примеру, приведенному на Запускайте задачи с помощью AWS Fargate и Lambda. Пока моя установка работает, есть одна часть, включающая роли IAM, которую я не понимаю.

Один из шагов - создать задачу ECS. Я создаю эту задачу, оставив ее «IAM-роль выполнения задачи» в ecsTaskExecutionRole. Согласно информации на странице настройки задачи ECS, «Роль выполнения задачи IAM» является

Роль, которая разрешает Amazon ECS извлекать частные образы и публиковать журналы для вашей задачи. Он заменяет роль инстанса EC2 при выполнении задач.

Затем я создаю лямбда-функцию. Частью настройки этой функции Lambda является создание другой роли IAM, поскольку, согласно странице «Запуск задач с помощью AWS Fargate и Lambda»,

Lambda потребуется роль IAM с двумя политиками: одна для выполнения задачи, а вторая для передачи задачи ecsTaskExecutionRole.

Роль выглядит так (я сжал пробел, чтобы сэкономить место):

{   "Version": "2012-10-17",
    "Statement": [
        {   "Sid": "Stmt1512361420000",
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask"
                 ],
            "Resource": [ "*" ]
        },
        {   "Sid": "Stmt1512361593000",
            "Effect": "Allow",
            "Action": [ "iam:PassRole" ],
            "Resource": [ "arn:aws:iam::************:role/ecsTaskExecutionRole" ]
        }
    ]
}

Я не понимаю, почему функция Lambda должна иметь это iam:PassRole разрешение. Почему функция Lambda должна «передавать ecsTaskExecutionRole задаче»? Разве задача ECS не получает эту роль автоматически при запуске из-за того, что я установил для параметра «Роль IAM выполнения задачи» значение ecsTaskExecutionRole? Если нет, то в чем смысл настройки «Роль IAM для выполнения задачи»?

Чтобы процитировать документацию AWS (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html):

Чтобы настроить многие сервисы AWS, вы должны передать сервису роль IAM. Это позволяет службе позже взять на себя роль и выполнять действия от вашего имени. Вам нужно передать роль службе только один раз во время настройки, а не каждый раз, когда служба принимает на себя роль. Например, предположим, что у вас есть приложение, работающее в инстансе Amazon EC2. Этому приложению требуются временные учетные данные для аутентификации и разрешения для авторизации приложения для выполнения действий в AWS. При настройке приложения необходимо передать роль EC2 для использования с экземпляром, который предоставляет эти учетные данные. Вы определяете разрешения для приложений, запущенных в экземпляре, прикрепляя к роли политику IAM. Приложение принимает роль каждый раз, когда ему необходимо выполнить действия, разрешенные этой ролью.

В ecsTaskExecutionRole Параметр определяет разрешения IAM, которые вы хотите предоставить задаче Fargate. В большинстве случаев пользователи будут просто использовать управляемую роль AWS «role / ecsTaskExecutionRole», которая позволяет загружать любое изображение из ECR.

Но представьте, что у вас другая политика, которая разрешает загрузку только определенного изображения.

Ваш администратор только хочет, чтобы вы могли использовать эту политику, поэтому он использует привилегию iam: PassRole в вашей Lambda, чтобы сказать, что вы можете передать только эту роль. Теперь он запретил вам использовать любую другую роль IAM, которая могла бы дать вам доступ к большему количеству изображений ECR.

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