Перейти до вмісту

Модуль 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.

  1. AWS Managed Keys: Створюються автоматично (напр., aws/ssm). Вони безкоштовні, але ви не можете ними керувати або ділитися між акаунтами.
  2. Customer Managed Keys (CMKs): Ключі, які створюєте ви. Ви контролюєте, хто може ними користуватися, і можете ділитися ними з іншими акаунтами. Коштують $1/міс за ключ.

SSM Parameter Store: Універсальна конфігурація

Розділ «SSM Parameter Store: Універсальна конфігурація»

Parameter Store — це “швейцарський ніж” для зберігання налаштувань. Він підтримує три типи даних:

  • String: Звичайний текст.
  • StringList: Список значень через кому.
  • SecureString: Текст, зашифрований за допомогою KMS.

Ієрархічне іменування

Розділ «Ієрархічне іменування»

Найкраща практика — структурувати параметри як файлову систему:

Terminal window
# Створення параметра
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-decryption

Secrets Manager: Створений для паролів

Розділ «Secrets Manager: Створений для паролів»

Secrets Manager схожий на Parameter Store, але він має одну кілер-фічу: автоматичну ротацію.

Чим він відрізняється:

Розділ «Чим він відрізняється:»
  • Ротація: Може автоматично змінювати пароль у вашій базі даних (RDS) кожні 30 днів через Lambda-функцію.
  • Версійність: Зберігає AWSCURRENT (активний) та AWSPREVIOUS (попередній) паролі одночасно, щоб додатки не ламалися під час зміни.
  • Вартість: $0.40 за секрет на місяць (дорожче за SSM).
Terminal window
# Створення секрету (JSON формат)
aws secretsmanager create-secret \
--name "myapp/prod/db-creds" \
--secret-string '{"user":"admin","pass":"complex-password"}'

Впровадження секретів у додатки

Розділ «Впровадження секретів у додатки»

Головна мета — щоб пароль ніколи не з’являвся у вашому коді або Docker-образі.

Ви вказуєте секрет прямо в Task Definition. Агент ECS сам дістане його і передасть у контейнер як змінну оточення:

"secrets": [
{
"name": "DB_PASSWORD",
"valueFrom": "arn:aws:secretsmanager:region:account:secret:my-secret:password::"
}
]

Найкраще використовувати 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

Практична вправа: Створення та читання секрету

Розділ «Практична вправа: Створення та читання секрету»
  1. Створіть секрет у Secrets Manager через CLI:
    Terminal window
    aws secretsmanager create-secret --name "dojo/lab-secret" --secret-string "MySecretValue"
  2. Спробуйте прочитати його:
    Terminal window
    aws secretsmanager get-secret-value --secret-id "dojo/lab-secret"
  3. Видаліть секрет (зверніть увагу, що 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 та спостережуваність — навчіться моніторити все, що ви побудували. Управління секретами каже вам, що потрібно додатку; спостережуваність каже, як він поводиться.