Запуск лямбда-функции AWS под разными ролями IAM - PullRequest
0 голосов
/ 26 октября 2018

Я работаю над проектом 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 Ответ

0 голосов
/ 26 октября 2018

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

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

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

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

...