MidПрактика4 min

Облачная гигиена

MFA, IAM-пользователи, принцип наименьших привилегий, очистка ресурсов и тегирование

Зачем нужна "гигиена" в облаке

Облачная гигиена -- это набор практик безопасности и порядка, которые защищают ваш аккаунт от взлома и неожиданных расходов. Для новичков это особенно важно: утечка AWS-ключей на GitHub может привести к счёту в тысячи долларов за чужой майнинг криптовалюты.

Три главных принципа:

  1. Защитите доступ -- MFA, отдельные пользователи, сильные пароли
  2. Ограничьте привилегии -- каждый пользователь и сервис получает минимум необходимых прав
  3. Поддерживайте порядок -- теги, очистка, документирование

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

  1. Откройте portal.azure.com
  2. Azure Active Directory → Security → MFA
  3. Per-user MFA → выберите пользователя → Enable
  4. При следующем входе система запросит настройку MFA
  5. Установите Microsoft Authenticator
## IAM: пользователи и роли

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
  • Ничего больше

Безопасность ключей доступа

Правила работы с ключами

  1. Никогда не коммитьте ключи в Git -- это самая частая утечка
  2. Используйте переменные окружения -- не хардкодьте ключи в коде
  3. Ротируйте ключи каждые 90 дней
  4. Используйте роли вместо ключей где возможно

Защита от утечки в 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

> **Совет:** Azure имеет самый удобный механизм очистки -- удаление Resource Group удаляет ВСЕ ресурсы внутри. Это ещё одна причина группировать CRC-ресурсы в отдельную группу.

Проверь себя

Какое преимущество даёт тегирование облачных ресурсов?

Что такое принцип наименьших привилегий (Principle of Least Privilege)?

Какой способ очистки ресурсов в Azure самый удобный для CRC?

Какой самый распространённый способ утечки облачных ключей доступа?

Почему нельзя использовать root-аккаунт для повседневной работы в облаке?