Думаете о переходе на бессерверную версию? Вот что вам нужно знать о безопасности
Крупные компании восприняли эту новую инновацию, которая является бессерверной, и полностью изменили свое представление о том, что такое серверная часть. Но среди всех этих модных словечек возникает очень важная проблема: как я могу быть уверен, что использую безсерверные технологии безопасным образом?
Бессерверный или Функция как услуга (FaaS) имеет много преимуществ, и одним из них является тот факт, что безопасность инфраструктуры, на которой работают приложения, была передана поставщикам платформ, таким как AWS Lambda, Azure Functions, IBM Cloud Functions, Google Cloud Functions и т. д., и отказ от услуга больше не будет результатом попыток хакера, а скорее проблемой выставления счетов. Это приводит к тому, что внимание злоумышленников смещается с инфраструктуры, как это было в прошлом, на приложение.
Бессерверные приложения структурированы как комбинация небольших функций, которые выполняют ваш код и возвращают простой результат. В зависимости от количества репозиториев с открытым исходным кодом такая архитектура расширяет зону покрытия и вероятность кибератак, что делает планирование и создание безопасных бессерверных приложений важным пунктом в верхней части вашего списка задач.
Вот несколько шагов или рекомендаций, которые следует учитывать при создании безопасного бессерверного приложения.
Безопасность на функциональном уровне
Первым в списке передовых методов обеспечения безопасности для бессерверных систем является реализация безопасности на функциональном уровне. Поскольку бессерверные приложения позволяют запускать приложения с помощью ряда функций, которые могут быть активированы, важно реализовать безопасность на функциональном уровне. Хорошей практикой является записывать все ваши функции и проверять, что каждая функция предназначена (или разрешена) для того, что она делает в данный момент.
Эмпирическое правило согласно Хиллель Соллоу заключается в определении отдельных ролей для каждой функции, что не позволяет вам предоставлять определенным функциям доступ к данным, которые им не нужны, или выполнять ненужные действия, тем самым устраняя лазейки безопасности в вашем коде, которые могут быть использованы злоумышленниками.
AWS Lambda позволяет сделать это двумя разными способами:
Через политики на основе удостоверений — при таком подходе вы можете либо прикрепить политики с разрешениями к пользователю или группе в своей учетной записи, либо привязать политику к определенной роли IAM, тем самым предоставив доступ к вашей функции Lambda между учетными записями.
Через политики Lambda Function — этот подход позволяет предоставлять разрешения между учетными записями для ваших лямбда-функций без использования политик на основе удостоверений с ролями IAM.
Аудит безопасности для всех зависимостей
Большинство бессерверных приложений используют множество зависимостей от Node.js, Python и многих других репозиториев с открытым исходным кодом. Чтобы убедиться, что ваше приложение не оставляет лазейки для злоумышленников, вам необходимо проверить все зависимости на наличие уязвимостей.
Это может оказаться очень сложной задачей в сценарии, когда вы запускаете бессерверные приложения с множеством функций, но не беспокойтесь, существуют различные решения, такие как:
Выйти на пенсиюJS — средство проверки уязвимостей с открытым исходным кодом, где разработчики могут проверить наличие известных уязвимостей в библиотеке Javascript с помощью службы проверки сайта.
Npm — реестр Javascript с открытым исходным кодом, который приобрел Node Security Project. Npm выполняет проверку уязвимостей с помощью команды аудита npm, доступной в npm@6.
Сник — коммерческая программа проверки уязвимостей с собственной базой данных уязвимостей (ВД). Сник работает с .NET, PHP, GoLang, Java, Python, Scala, Ruby и Node.js.
Гринкипер — коммерческий инструмент управления зависимостями, который автоматически управляет, обновляет и тестирует зависимости npm.
Существуют и другие решения с возможностью проверки зависимостей, многие из которых полагаются на НИСТ Национальная база данных уязвимостей (NVD), другие полагаются как на NIST NVD, так и на свои базы данных уязвимостей, поэтому вы окажете себе большую услугу, найдя их и эффективно используя.
Устранить все «мертвые» функции
В бессерверных версиях «мертвые» функции — это функции, которые не вызывались в течение очень долгого времени. Как мы все знаем, бессерверность дает место для неиспользуемых функций, тем самым увеличивая беспорядок (помните, что вы не платите, если функция не вызывается). Существует очень большая вероятность того, что у вас будет лежать множество неиспользуемых функций с различными разрешениями и привилегиями.
Теперь это может стать очень серьезной проблемой для разработчика, поскольку вы не можете знать, какие функции не используются, если они не запущены, а с точки зрения безопасности, функции, которые не использовались в течение длительного времени, работают. риск наличия устаревших библиотек и зависимостей.
Вам нужно понимание
Ну, помимо хорошо продуманного плана с самого начала, вам нужно будет использовать надлежащий инструмент мониторинга для вашего приложения. Обойти его невозможно. Хотя новая технология предлагает свободу от управления вашим собственным сервером, она добавляет уровень неясности, поскольку вы не можете фактически возиться с сервером в какой-либо форме или форме. Журналов ошибок нет. Никаких аппаратных мониторов. Нет наблюдаемости. Вы загружаете код, и он работает. Когда это сделано, это ушло, и это все.
Как вы можете себе представить, разработка приложений без возможности знать, что происходит под капотом, будет сложной задачей, поэтому вам придется найти способы отслеживать и добавлять наблюдаемость в ваше приложение. я бы рекомендовал использовать Dashbird.io. Он прост в использовании, не увеличивает время выполнения и очень безопасен, поскольку подключается напрямую к вашей учетной записи AWS.
Не пишите плохой код
Это действительно не может быть подчеркнуто достаточно. Даже при наличии всех передовых практик, упомянутых ранее, если вы напишете плохой код, вы откроете свое приложение для эксплуатации злоумышленниками. Поэтому, как правило, убедитесь, что ваши разработчики постоянно обучаются передовым методам кодирования, а все инструменты и библиотеки постоянно обновляются.
Кроме того, убедитесь, что ваш код проходит тщательную проверку кода и много-много тестов, так как небольшая ошибка в одной функции может привести к тому, что злоумышленники смогут проникнуть в ваше приложение.
Вывод
Как и в случае со всеми приложениями (бессерверными или нет), безопасность всегда была и будет очень важным фактором, который следует учитывать.
Несмотря на то, что бессерверность усложняет работу кибер-злоумышленников, поскольку серверная инфраструктура, назначенная функции, почти всегда сбрасывается после того, как функция больше не активна, по-прежнему очень важно, чтобы ваши отдельные функции были достаточно укреплены, чтобы избежать незаконного проникновения.