Вступ
Джерело: Офіційний сайт AWS Serverless
10 років безсерверних обчислень, оскільки AWS святкує 10 років AWS Lambda та ECS, і оскільки мільйони користувачів щомісяця використовують AWS Lambda, все більше важливо знати, як забезпечити безпеку наших Lambda функцій, але перед тим, як це зробити, нам потрібно зрозуміти, що таке «Безсерверність» (Serverless).
Примітка: якщо ви нічого не знаєте про хмарні технології та AWS, я рекомендую прочитати цей блог
[
Посібник для перевантажених людей щодо AWS
Вступ до хмарних технологій і сервісів AWS
noureldinehab.medium.com
](/the-overwhelmed-persons-guide-to-aws-4f5dedcc6210?source=post_page-----0efa8d4dfecc--------------------------------)
Що таке безсерверність?
Ми всі знаємо, що керування серверами має великий інженерний навантаження, оскільки потрібно налаштовувати та підтримувати сервери, а також визначати, як масштабувати інфраструктуру тощо. Але з безсерверними технологіями (Serverless) вам не потрібно турбуватися про це, оскільки вони автоматично постачають всю інфраструктуру, яка потрібна для виконання вашого завдання, і автоматично масштабується. Крім того, за замовчуванням ця система є надлишковою, і коли справа доходить до оплати, ви платите тільки за ресурси, які були надані.
Деякі люди вважають, що безсерверність означає відсутність серверів, але це неправильне уявлення, оскільки це просто означає, що вам не потрібно турбуватися про управління серверами.
Тепер, коли ми знаємо, що таке безсерверність, давайте подивимося, що таке функції Lambda.
Що таке AWS Lambda?
AWS Lambda дозволяє вам запускати код без необхідності управляти сервером — ви просто пишете код, і все інше Lambda бере на себе.
Він підтримує багато середовищ виконання, таких як Node.js, Python, Java, C# (.NET Core).
Go
та Ruby, і ви можете використовувати власні середовища виконання за допомогою AWS Lambda Runtime API.
Функції Lambda можуть працювати до 900 секунд або 15 хвилин (максимум), мінімальний час — 1 секунда.
Ви платите тільки за час виконання та кількість запитів, існує м'яке обмеження в 1000 одночасних запитів на обліковий запис у регіоні, але ви можете збільшити це число, звернувшись до служби підтримки AWS.
Але ви, мабуть, запитаєте, в чому різниця між функціями Lambda і інстансами EC2?
AWS Lambda використовується для короткострокових завдань, оскільки максимальний час виконання складає 15 хвилин (900 секунд), тоді як EC2 краще підходить для довгострокових і сталих завдань, таких як хостинг вебсайтів. Якщо ви хочете дізнатися більше про різницю, я рекомендую прочитати цей блог
Тепер, коли ми знаємо, що таке безсерверні обчислення та AWS Lambda, давайте поглянемо на найкращі практики безпеки для AWS Lambda.
Найкращі практики безпеки AWS Lambda
Перед тим як розпочати обговорення найкращих практик безпеки AWS Lambda, нам потрібно познайомитися з Моделлю спільної відповідальності AWS.
Джерело: Модель спільної відповідальності AWS Lambda
Модель спільної відповідальності AWS:
Безпека в хмарі є спільною відповідальністю між AWS та клієнтом, де і AWS, і клієнт несуть відповідальність за захист робочих навантажень у хмарі.
AWS відповідає за забезпечення безпеки:
- Фізична безпека дата-центрів, де розміщено сервіси AWS.
- Базова інфраструктура, яка підтримує сервіси AWS, такі як операційна система, гіпервізор і мережі.
- Доступність сервісів AWS.
- Безпека платформи AWS Cloud, наприклад, запобігання несанкціонованому доступу до інфраструктури AWS та даних.
Клієнти відповідають за:
- Безпеку свого коду та AWS IAM для служби Lambda і в межах вашої функції.
- Налаштування сервісів AWS, таких як створення груп безпеки та використання шифрування.
- Моніторинг середовища AWS на наявність загроз безпеці.
- Відповідність робочих навантажень застосовним нормативним вимогам.
Тепер, коли ми дізналися про Модель спільної відповідальності AWS, давайте розглянемо кілька найкращих практик безпеки AWS Lambda, починаючи з безпеки коду.
Безпека коду функції AWS Lambda
Для безпеки коду існує багато інструментів безпеки, які можна використовувати в екосистемі AWS, таких як Amazon CodeGuru та Amazon Inspector, оскільки вони безшовно інтегруються з AWS Lambda, ви також можете звернутися до AWS Security Partner Companies, таких як Snyk
Amazon CodeGuru
Amazon CodeGuru Security — це інструмент статичного тестування безпеки додатків (SAST), який сканує ваш код за допомогою машинного навчання для виявлення вразливостей у вашому коді та надає рекомендації, як їх виправити.
Amazon Inspector
Amazon Inspector — це автоматизована служба управління вразливістю, яка сканує ваші робочі навантаження, такі як інстанси EC2, контейнери та функції Lambda, на наявність вразливостей у програмному забезпеченні та ненавмисного мережевого доступу і також дає рекомендації щодо виправлення цих вразливостей.
Нещодавно Amazon Inspector додав функцію сканування коду функцій Lambda, яку ви можете перевірити тут 👇🏻
AWS Identity and Access Management (IAM)
Як ми бачили в моделі спільної відповідальності AWS Lambda, ми несемо відповідальність за управління ідентифікацією та доступом (IAM), і коли ви думаєте про управління ідентифікацією та доступом (IAM), ви повинні пам'ятати дуже важливу концепцію, яка називається "Найменші привілеї" (Least Privilege). Це означає, що ваші функції Lambda повинні мати доступ лише до мінімальної кількості дозволів, необхідних для виконання завдання.
Давайте розглянемо приклад, щоб краще зрозуміти це, оскільки це справді важлива концепція безпеки в цілому, а не лише для безпеки AWS Lambda.
Уявімо, що у нас є функція AWS Lambda, яка повинна прочитати "Конкретний" Amazon S3 Bucket і записати дані в "Конкретну" таблицю DynamoDB. Давайте подивимося на IAM політику до та після застосування принципу найменших привілеїв.
❌ До застосування принципу найменших привілеїв (Не робіть цього👇🏻)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "dynamodb:*",
"Resource": "*"
}
]
}
Як ви бачите, "Action" і "Resource" мають символ "*", що означає, що функція AWS Lambda може виконувати всі дії з "S3" та "DynamoDB", наприклад, видалення, навіть якщо в цьому сценарії нам нічого не потрібно видаляти.
✅ Після застосування принципу найменших привілеїв (Робіть це👇🏻)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::example-bucket-name/*"
},
{
"Effect": "Allow",
"Action": [
"dynamodb:PutItem",
"dynamodb:UpdateItem"
],
"Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/example-table-name"
}
]
}
Тепер, якщо ми подивимося на цю IAM політику, ми побачимо, що дозволено лише "s3:GetObject", "dynamodb:PutItem" та "dynamodb:UpdateItem" дії з конкретними ресурсами, такими як "example-bucket-name" та "example-table-name", що набагато безпечніше.
Моніторинг і ведення журналів
Для моніторингу та ведення журналів ви можете використовувати Amazon CloudWatch та Amazon GuardDuty, і оскільки вони добре інтегруються з AWS Lambda, ви також можете звернутися до AWS Security Partner Companies, таких як Datadog
Amazon CloudWatch
Amazon CloudWatch дозволяє моніторити і вести журнали всіх ваших ресурсів і додатків на AWS, а також на локальних серверах.
Але чому це важливо для безпеки AWS Lambda?
- Ви можете отримати сповіщення, коли певні метрики перевищують встановлений поріг, наприклад, коли ви спостерігаєте різке збільшення навантаження або багато помилок, що може бути ознакою інциденту безпеки.
- Це також допомагає з управлінням і відповідністю, оскільки реєструється все.
Amazon GuardDuty
Amazon GuardDuty — це сервіс виявлення загроз, який моніторить ваші ресурси AWS на наявність підозрілої активності. Але як це допомагає в забезпеченні безпеки ваших функцій AWS Lambda?
AWS GuardDuty має захист для AWS Lambda, який виявляє підозрілий мережевий трафік і повідомляє вас, щоб ви могли вжити заходів. Якщо ви хочете дізнатися більше про це, рекомендую прочитати цей блог від AWS.
Управління секретами
Для управління секретами ви можете використовувати AWS Secrets Manager, оскільки він добре інтегрується з AWS Lambda. Ви також можете звернутися до AWS Security Partner Companies, таких як HashiCorp Vault.
AWS Secrets Manager
AWS Secrets Manager використовується для управління життєвим циклом секретів, але чому нам взагалі потрібно управляти секретами? Чому не можна просто помістити їх у код функції Lambda?
Тому що це дуже погано для безпеки, оскільки:
- Це може призвести до витоку секретів.
- Це ускладнює ротацію секретів.
- Коли ми використовуємо менеджер секретів, це допомагає реалізувати принцип найменших привілеїв, оскільки ми можемо контролювати, хто має доступ до секретів.
- Якщо ми не використовуємо менеджер секретів, ми не зможемо моніторити і реєструвати, хто і коли використовував секрети.
І це ще не все, тому дуже важливо використовувати менеджер секретів і пам'ятати, що шифрування — це не достатньо.
TL;DR
Цей TL;DR був створений за допомогою ChatGPT
Огляд AWS Lambda:
- AWS Lambda дозволяє запускати код без управління серверами, автоматично масштабується.
- Lambda підтримує кілька середовищ виконання, таких як Node.js, Python, Java, C#, Go, Ruby.
- Максимальний час виконання — 15 хвилин; ви платите за час виконання та запити.
Модель спільної відповідальності AWS:
- Обов'язки AWS: Фізична безпека, безпека інфраструктури, доступність сервісів та безпека платформи AWS Cloud.
- Обов'язки замовника: Захист коду, управління ролями IAM, конфігурація сервісів, моніторинг загроз безпеці та забезпечення відповідності.
Безпека коду Lambda:
- Використовуйте інструменти, такі як Amazon CodeGuru та Amazon Inspector, для сканування на наявність вразливостей.
- CodeGuru: Виявляє вразливості в коді за допомогою машинного навчання.
- Amazon Inspector: Сканує навантаження на наявність вразливостей та мережевих загроз.
Найкращі практики IAM:
- Застосовуйте принцип Найменших привілеїв до функцій Lambda.
Надавайте лише необхідні дозволи. - Приклад принципу найменших привілеїв:
- До: Широкі дозволи, такі як
s3:*
таdynamodb:*
. - Після: Специфічні дії, такі як
s3:GetObject
таdynamodb:PutItem
для конкретних ресурсів.
Моніторинг і реєстрація:
- Використовуйте Amazon CloudWatch для моніторингу та реєстрації функцій Lambda та ресурсів AWS.
- Використовуйте Amazon GuardDuty для виявлення загроз та моніторингу підозрілої активності, включаючи захист для Lambda.
Управління секретами:
- Використовуйте AWS Secrets Manager для безпечного управління секретами.
- Уникайте хардкодування секретів у коді Lambda, щоб знизити ризик їх витоку.
- Secrets Manager дозволяє краще контролювати доступ, ротацію та реєстрацію використання секретів.
Посилання
- Посібник для переповнених людей з AWS(Medium)
- 10 років без серверів з AWS Lambda та Amazon ECS (AWS)
- Вступ до AWS Lambda — безсерверні обчислення на Amazon Web Services (AWS)
- Огляд Amazon EC2 та AWS Lambda (Tech Target)
- Модель спільної відповідальності AWS Lambda (AWS)
- Огляд безпеки AWS Lambda — документ AWS (AWS)
- Безпека в AWS Lambda (AWS)
- Amazon CodeGuru (AWS)
- Amazon Inspector (AWS)
- Amazon Inspector: як використовувати сканування коду Lambda (AWS)
- Найкращі практики безпеки в IAM (AWS)
- Amazon CloudWatch (AWS)
- Amazon GuardDuty (AWS)
- GuardDuty захист для Lambda (AWS)
- AWS Secrets Manager (AWS)
⭐ Мені подобається спілкуватися з різними людьми, тому якщо ви хочете привітатися, я буду радий вас зустріти! 🙂
БІЛЬШЕ СТАТЕЙ, ЯКІ МОЖУТЬ ВАС ЗАЦІКАВИТИ:
[
Вступ до AWS Cloud Security Chaos Engineering
AWS Cloud Security Chaos Engineering проти симуляції/емуляції супротивника
noureldinehab.medium.com
](/introduction-to-aws-cloud-security-chaos-engineering-0a335f809f92?source=post_page-----0efa8d4dfecc--------------------------------)
[
Найкращі практики безпеки AWS для нефахівців
Спочатку потрібно зрозуміти, що робить систему безпечною.
noureldinehab.medium.com
](/aws-security-best-practices-for-non-security-professionals-def04ccb8e61?source=post_page-----0efa8d4dfecc--------------------------------)
[
Вступ до MITRE ATT&CK Framework
Що таке MITRE ATT&CK Framework?
noureldinehab.medium.com
](/introduction-to-the-mitre-att-ck-framework-e78224b330be?source=post_page-----0efa8d4dfecc--------------------------------)
Перекладено з: AWS Lambda Security Best Practices