Модуль 1.9: Управління секретами та конфігурацією
Складність: [MEDIUM] | Час на виконання: 1.5 години | Трек: Основи AWS DevOps
Передумови
Розділ «Передумови»Перед початком цього модуля переконайтеся, що ви:
- Завершили Модуль 1.1: IAM та управління доступом
- Маєте акаунт AWS з правами адміністратора
- Встановили та налаштували AWS CLI v2
- Маєте базове розуміння концепцій шифрування (симетричні та асиметричні ключі)
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»У грудні 2022 року розробник фінтех-компанії випадково завантажив рядок підключення до бази даних у публічний репозиторій GitHub. Рядок містив логін, пароль та адресу продуктової бази PostgreSQL. Боти, що сканують GitHub на наявність витоків, знайшли його за 14 хвилин. Протягом години зловмисники викрали 2.3 мільйона записів клієнтів. Витік коштував компанії $4.1 мільйона у вигляді штрафів та витрат на ліквідацію наслідків, не рахуючи репутаційних збитків.
Цьому можна було повністю запобігти. AWS надає спеціалізовані сервіси для зберігання, ротації та передачі секретів у ваші додатки. У цьому модулі ви дізнаєтеся, як AWS підходить до управління секретами: від низькорівневого шифрування в KMS до практичних патернів використання SSM Parameter Store та Secrets Manager.
Чи знали ви?
Розділ «Чи знали ви?»-
AWS Secrets Manager ротує понад 100 мільйонів секретів на місяць. Сервіс був запущений у 2018 році саме тому, що AWS побачила, як багато клієнтів зберігають паролі відкритим текстом в S3 або змінних оточення.
-
KMS обробляє понад 1 трильйон API-викликів на рік, що робить його одним із найбільш затребуваних сервісів AWS. Кожен раз, коли ви читаєте секрет, KMS працює “за лаштунками”.
-
SSM Parameter Store безкоштовно дозволяє зберігати до 10 000 параметрів, тоді як Secrets Manager бере $0.40 за кожен секрет на місяць. Через це команди часто використовують Parameter Store для звичайних налаштувань, а Secrets Manager — тільки для паролів, що потребують автоматичної ротації.
KMS: Фундамент шифрування
Розділ «KMS: Фундамент шифрування»AWS Key Management Service (KMS) — це сервіс, на якому тримається вся безпека даних в AWS.
Ключові поняття
Розділ «Ключові поняття»- AWS Managed Keys: Створюються автоматично (напр.,
aws/ssm). Вони безкоштовні, але ви не можете ними керувати або ділитися між акаунтами. - Customer Managed Keys (CMKs): Ключі, які створюєте ви. Ви контролюєте, хто може ними користуватися, і можете ділитися ними з іншими акаунтами. Коштують $1/міс за ключ.
SSM Parameter Store: Універсальна конфігурація
Розділ «SSM Parameter Store: Універсальна конфігурація»Parameter Store — це “швейцарський ніж” для зберігання налаштувань. Він підтримує три типи даних:
- String: Звичайний текст.
- StringList: Список значень через кому.
- SecureString: Текст, зашифрований за допомогою KMS.
Ієрархічне іменування
Розділ «Ієрархічне іменування»Найкраща практика — структурувати параметри як файлову систему:
# Створення параметраaws ssm put-parameter \ --name "/myapp/prod/db/host" \ --value "db.production.internal" \ --type String
# Створення секретного параметраaws ssm put-parameter \ --name "/myapp/prod/db/password" \ --value "SuperSecret123" \ --type SecureString \ --key-id alias/aws/ssm
# Отримання всіх параметрів за шляхомaws ssm get-parameters-by-path \ --path "/myapp/prod/" \ --recursive \ --with-decryptionSecrets Manager: Створений для паролів
Розділ «Secrets Manager: Створений для паролів»Secrets Manager схожий на Parameter Store, але він має одну кілер-фічу: автоматичну ротацію.
Чим він відрізняється:
Розділ «Чим він відрізняється:»- Ротація: Може автоматично змінювати пароль у вашій базі даних (RDS) кожні 30 днів через Lambda-функцію.
- Версійність: Зберігає
AWSCURRENT(активний) таAWSPREVIOUS(попередній) паролі одночасно, щоб додатки не ламалися під час зміни. - Вартість: $0.40 за секрет на місяць (дорожче за SSM).
# Створення секрету (JSON формат)aws secretsmanager create-secret \ --name "myapp/prod/db-creds" \ --secret-string '{"user":"admin","pass":"complex-password"}'Впровадження секретів у додатки
Розділ «Впровадження секретів у додатки»Головна мета — щоб пароль ніколи не з’являвся у вашому коді або Docker-образі.
ECS / Fargate
Розділ «ECS / Fargate»Ви вказуєте секрет прямо в Task Definition. Агент ECS сам дістане його і передасть у контейнер як змінну оточення:
"secrets": [ { "name": "DB_PASSWORD", "valueFrom": "arn:aws:secretsmanager:region:account:secret:my-secret:password::" }]Lambda
Розділ «Lambda»Найкраще використовувати AWS Parameters and Secrets Lambda Extension. Це шар (layer), який кешує секрети локально, щоб Lambda не робила дорогі виклики API при кожному запуску.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це стається | Як виправити |
|---|---|---|
| Паролі у змінних оточення в коді | Це звична практика для локальної розробки | Використовуйте блок secrets в ECS або SDK в коді для отримання значень під час виконання |
Забули права kms:Decrypt | Ви надали доступ до секрету, але забули про ключ, яким він зашифрований | Завжди додавайте дозвіл на Decrypt для відповідного KMS ключа в IAM ролі |
| Використання одного секрету для всіх середовищ | ”Зробимо окремі потім” | Використовуйте ієрархію шляхів (/dev/, /prod/) з першого дня |
| Жорстке прописання ARN секрету з суфіксом | Secrets Manager додає 6 випадкових символів в кінець ARN | В IAM політиках використовуйте маску * або ?????? в кінці ARN |
Практична вправа: Створення та читання секрету
Розділ «Практична вправа: Створення та читання секрету»- Створіть секрет у Secrets Manager через CLI:
Terminal window aws secretsmanager create-secret --name "dojo/lab-secret" --secret-string "MySecretValue" - Спробуйте прочитати його:
Terminal window aws secretsmanager get-secret-value --secret-id "dojo/lab-secret" - Видаліть секрет (зверніть увагу, що AWS за замовчуванням видаляє їх через 7-30 днів, використовуйте
--force-delete-without-recoveryтільки для тестів):Terminal window aws secretsmanager delete-secret --secret-id "dojo/lab-secret" --force-delete-without-recovery
Наступний модуль
Розділ «Наступний модуль»Переходьте до Модуля 1.10: CloudWatch та спостережуваність — навчіться моніторити все, що ви побудували. Управління секретами каже вам, що потрібно додатку; спостережуваність каже, як він поводиться.