Запуск лямбда-функции AWS под разными ролями IAM

Я работаю над проектом Node.js, в котором есть лямбда-функция AWS. Мы назовем это funcA, Оно может getObject() а также putObject() на конкретном ведре s3.

У нас есть среда разработки с Node.js, работающим на экземпляре Elastic Beanstalk. Экземпляр работает с ролью IAM, специально предназначенной для dev. Эта роль IAM позволяет ему вызывать функцию Lambda и получать доступ к корзине dev S3. Вот где это сложно...

Нам также необходимо иметь отдельные промежуточные и производственные среды, которые также будут на Elastic Beanstalk. Эти среды также должны использовать эту лямбда-функции. Однако это разные экземпляры EB, работающие под разными ролями IAM. Эти роли должны иметь доступ только к промежуточной и рабочей корзинам соответственно.

Наша инфраструктурная команда говорит мне, что это означает, что у меня должно быть три отдельных лямбда-функции для конкретной среды: funcA_dev, funcA_staging, funcA_prod. Это буквально тот же самый точный код, выполняющий ту же самую вещь, но, поскольку он будет играть другую роль, мне нужно иметь три копии.

Я понимаю, что лямбда должна иметь роль. Тем не менее, это выглядит как очень нестандартный рабочий процесс. Есть ли лучший способ справиться с этим? Ключевыми критериями являются использование ролей IAM (без постоянных или жестко закодированных ключей) и жесткое распределение ролей, чтобы, например, если учетные данные разработчика были каким-либо образом скомпрометированы, это не повлияло бы на производственный сегмент и стек.

1 ответ

Решение

Наличие лямбда-развертывания для каждой среды довольно распространено (и я бы сказал, стандартный способ достижения того, чего вы хотите)- конечно, сейчас они могут быть точно такими же, но вам может понадобиться добавить новые функциональные возможности к лямбда, которую вы ' Я только хочу проверить в разработке &c.

По мере роста вашего проекта даже становится обычным оказаться в ваших средах dev/stage/prod в отдельных учетных записях AWS (особенно с учетом ограничений по всей учетной записи, обсуждаемых AWS).

Если вы действительно хотите избежать трех лямбд, ваш лучший путь - взять на себя обязанность взять на себя роль. Механизм, который лямбда использует для получения своей временной роли IAM, - это STS ( https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html). Это означает, что вы можете передать своим лямбда-разным временные учетные данные, которые вы можете указать и выделить в экземпляре Elastic Beanstalk.

Однако я действительно призываю вас иметь копию вашей лямбды для всех трех сред.

Другие вопросы по тегам