Зачем нужна "гигиена" в облаке
Облачная гигиена -- это набор практик безопасности и порядка, которые защищают ваш аккаунт от взлома и неожиданных расходов. Для новичков это особенно важно: утечка AWS-ключей на GitHub может привести к счёту в тысячи долларов за чужой майнинг криптовалюты.
Три главных принципа:
- Защитите доступ -- MFA, отдельные пользователи, сильные пароли
- Ограничьте привилегии -- каждый пользователь и сервис получает минимум необходимых прав
- Поддерживайте порядок -- теги, очистка, документирование
MFA: многофакторная аутентификация
Что такое MFA
MFA (Multi-Factor Authentication) требует два или более фактора для входа:
- Фактор знания -- пароль
- Фактор владения -- код из приложения-аутентификатора или физический ключ
- Фактор свойства -- биометрия (не используется в облачных консолях)
Настройка MFA на AWS
# Шаг 1: Войдите как root
# Шаг 2: Перейдите в IAM → Security credentials
# Шаг 3: Нажмите "Assign MFA device"
# Рекомендуемые приложения-аутентификаторы:
# - Google Authenticator (iOS/Android)
# - Authy (iOS/Android/Desktop)
# - Microsoft Authenticator (iOS/Android)
# Для максимальной безопасности используйте hardware key:
# - YubiKey 5 Series
# - Titan Security Key (Google)
Критически важно: Настройте MFA на root-аккаунте в первую очередь. Root-аккаунт имеет неограниченные права и является главной целью для атакующих.
Настройка MFA на Azure и GCP
- Откройте portal.azure.com
- Azure Active Directory → Security → MFA
- Per-user MFA → выберите пользователя → Enable
- При следующем входе система запросит настройку MFA
- Установите Microsoft Authenticator
Root vs IAM User
| Характеристика | Root | IAM User |
|---|---|---|
| Создаётся при | Регистрации аккаунта | Вручную |
| Права | Неограниченные | Настраиваемые |
| MFA | Обязательно | Рекомендуется |
| Повседневное использование | Нет | Да |
| Может закрыть аккаунт | Да | Нет |
Золотое правило: Никогда не используйте root-аккаунт для повседневной работы. Создайте IAM-пользователя с необходимыми правами.
Создание IAM-пользователя для CRC
Создание IAM-пользователя
aws iam create-user --user-name crc-developer
Создание группы с нужными политиками
aws iam create-group --group-name crc-developers
Прикрепление политик к группе
aws iam attach-group-policy
--group-name crc-developers
--policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess
aws iam attach-group-policy
--group-name crc-developers
--policy-arn arn:aws:iam::aws:policy/AmazonDynamoDBFullAccess
aws iam attach-group-policy
--group-name crc-developers
--policy-arn arn:aws:iam::aws:policy/AWSLambda_FullAccess
aws iam attach-group-policy
--group-name crc-developers
--policy-arn arn:aws:iam::aws:policy/AmazonAPIGatewayAdministrator
aws iam attach-group-policy
--group-name crc-developers
--policy-arn arn:aws:iam::aws:policy/CloudFrontFullAccess
Добавление пользователя в группу
aws iam add-user-to-group
--user-name crc-developer
--group-name crc-developers
Создание консольного доступа
aws iam create-login-profile
--user-name crc-developer
--password 'SecureP@ssw0rd!'
--password-reset-required
Создание access keys для CLI
aws iam create-access-key --user-name crc-developer
Концепция
Principle of Least Privilege (PoLP) -- каждый пользователь, сервис и процесс получает только те права, которые необходимы для выполнения своей задачи, и ничего более.
Примеры для CRC
| Компонент | Нужно | Не нужно |
|---|---|---|
| Lambda-функция | Чтение/запись DynamoDB | Доступ к S3, EC2, RDS |
| CI/CD pipeline | Деплой в S3 | Создание IAM-пользователей |
| CloudFront | Чтение из S3 | Запись в S3 |
| API Gateway | Вызов Lambda | Доступ к DynamoDB напрямую |
Кастомная IAM-политика для Lambda
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem"
],
"Resource": "arn:aws:dynamodb:us-east-1:123456789012:table/visitor-counter"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:us-east-1:123456789012:*"
}
]
}
Эта политика даёт Lambda-функции:
- Чтение, запись и обновление только в таблице
visitor-counter - Запись логов в CloudWatch
- Ничего больше
Безопасность ключей доступа
Правила работы с ключами
- Никогда не коммитьте ключи в Git -- это самая частая утечка
- Используйте переменные окружения -- не хардкодьте ключи в коде
- Ротируйте ключи каждые 90 дней
- Используйте роли вместо ключей где возможно
Защита от утечки в Git
# Добавьте в .gitignore
echo ".env" >> .gitignore
echo "*.pem" >> .gitignore
echo ".aws/" >> .gitignore
# Используйте git-secrets для предотвращения коммитов с ключами
# Установка
brew install git-secrets # macOS
# или
pip install detect-secrets
# Настройка для AWS
git secrets --register-aws
git secrets --install
Хранение секретов
# Используйте AWS CLI profiles вместо переменных окружения
aws configure --profile crc
# AWS Access Key ID: AKIA...
# AWS Secret Access Key: ...
# Default region name: us-east-1
# Default output format: json
# Используйте профиль
export AWS_PROFILE=crc
# или
aws s3 ls --profile crc
Тегирование ресурсов
Зачем нужны теги
Теги -- это пары ключ-значение, которые помогают:
- Отслеживать расходы по проектам
- Находить ресурсы быстро
- Автоматизировать управление (например, удаление по расписанию)
- Соответствовать политикам организации
Рекомендуемые теги для CRC
# Обязательные теги для каждого ресурса CRC
project=cloud-resume-challenge
environment=dev
owner=your-name
auto-delete=2026-06-01
Применение тегов
Тегирование S3-бакета
aws s3api put-bucket-tagging --bucket my-crc-site --tagging '{ "TagSet": [ {"Key": "project", "Value": "cloud-resume-challenge"}, {"Key": "environment", "Value": "dev"}, {"Key": "owner", "Value": "your-name"} ] }'
Тегирование Lambda-функции
aws lambda tag-resource
--resource arn:aws:lambda:us-east-1:123456789012:function:visitor-counter
--tags project=cloud-resume-challenge,environment=dev
Когда удалять
- После завершения сессии обучения -- если не будете работать несколько дней
- После завершения CRC -- сохраните код, удалите облачные ресурсы
- При неожиданных расходах -- немедленно
Чек-лист очистки
1. Проверить активные ресурсы
aws resourcegroupstaggingapi get-resources
--tag-filters Key=project,Values=cloud-resume-challenge
2. Удалить в правильном порядке:
- CloudFront distribution (disable first, then delete)
- Route53 records
- API Gateway
- Lambda functions
- DynamoDB tables
- S3 buckets (сначала очистить содержимое)
aws s3 rm s3://my-crc-site --recursive aws s3 rb s3://my-crc-site