Почему AWS Lambda должна передать ecsTaskExecutionRole в задачу ECS
Я пишу лямбда-функцию AWS для запуска задачи ECS Fargate. Я следую примеру, приведенному в разделе Выполнение задач с AWS Fargate и Lambda. Хотя моя настройка работает, есть одна из частей, связанных с ролями IAM, которые я не понимаю.
Одним из шагов является создание задачи ECS. Я создаю эту задачу с ее "ролью выполнения задачи IAM", оставленной в ecsTaskExecutionRole
, Согласно информации на странице настройки задачи ECS, "роль IAM выполнения задачи"
Роль, которая разрешает Amazon ECS извлекать личные изображения и публиковать журналы для вашей задачи. Это заменяет роль экземпляра EC2 при выполнении задач.
Далее я создаю лямбда-функцию. Частью этой настройки лямбда-функции является создание другой роли IAM, поскольку, согласно странице "Выполнение задач с помощью AWS Fargate and 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" ]
}
]
}
Я не понимаю, почему лямбда-функция должна иметь iam:PassRole
разрешение. Почему лямбда-функция должна "передавать ecsTaskExecutionRole в задачу"? Разве задаче ECS не назначается эта роль автоматически при запуске из-за того, что я установил "Роль IAM выполнения задачи" в ecsTaskExecutionRole
? Если нет, то в чем смысл настройки "Роль IAM в выполнении задач"?
0 ответов
Чтобы процитировать документацию 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, чтобы, возможно, предоставить вам доступ к большему, чем хочет администратор.