Почему 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" ]
        }
    ]
}

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

2
задан 17 December 2018 в 03:30
1 ответ

Процитируем документацию 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, чтобы, возможно, предоставить вам доступ к большему, чем хочет администратор.

0
ответ дан 29 July 2020 в 10:53

Теги

Похожие вопросы