Skip to content
IRC-CodingIRC-Coding
API Gateway безопасностьRate LimitingWAFmTLSOAuthJWTKongThreat ProtectionAPI Hardening

Безопасность API Gateway: аутентификация и защита

Безопасность API Gateway: OAuth, JWT, Rate Limiting, WAF, mTLS, IP-whitelisting и аудит логирования.

S

schutzgeist

12 min read
Безопасность API Gateway: аутентификация и защита

Безопасность API Gateway: аутентификация, защита от угроз и усиление

API Gateway — это центральный вход для всего трафика API. Если он небезопасен, небезопасны все сервисы позади него. Если он правильно настроен, он защищает всю инфраструктуру: от проверки аутентификации до защиты от ботов.

Что такое безопасность API Gateway?

Безопасность API Gateway включает все меры, защищающие сам Gateway и APIs, через него проходящие, от атак, злоупотреблений и неправильной конфигурации. Поскольку Gateway — единственная точка входа для внешнего трафика, это идеальное место для централизованного применения политик безопасности.

Слой безопасности API Gateway состоит из четырёх направлений:

  1. Контроль доступа: кто может вызвать API? (аутентификация и авторизация)
  2. Контроль трафика: сколько может запросить клиент? (rate limiting, quotas, throttling)
  3. Защита от угроз: какие атаки будут заблокированы? (WAF, защита от ботов, валидация схемы)
  4. Усиление безопасности: как защищен сам Gateway? (mTLS, IP-whitelisting, защита admin API, audit logs)

Кто использует безопасность API Gateway?

  • Platform Teams настраивают централизованные политики безопасности для всех APIs
  • Security Engineers определяют правила защиты от угроз и отслеживают атаки
  • API Teams задают требования аутентификации для каждого endpoint
  • DevOps Engineers усиливают инфраструктуру Gateway (TLS, admin access, secrets)

Почему это важно в IT и на экзаменах?

Безопасность API Gateway — основная тема в облачных сертификациях (AWS Certified Security, Azure Security Engineer) и в OWASP API Security Top 10. На IHK-экзаменах часто спрашивают о централизованной и децентрализованной аутентификации. Архитектурное решение централизовать безопасность на Gateway снижает сложность и источники ошибок, но становится единой точкой отказа, если её неправильно защитить.

Ключевые концепции в деталях

1. Централизованная аутентификация на Gateway

Gateway берёт на себя аутентификацию для всех APIs. Клиент отправляет на Gateway свой токен (JWT, API-Key, OAuth Access Token). Gateway валидирует токен, извлекает Claims и пересылает запрос в бэкенд с дополненными заголовками.

Поток:

  1. Клиент отправляет Authorization: Bearer <token>
  2. Gateway валидирует подпись токена и срок действия
  3. Gateway извлекает Claims (User-ID, роли, scopes)
  4. Gateway пересылает запрос с заголовками вроде X-User-Id, X-Roles
  5. Бэкенд доверяет этим заголовкам (они от Gateway) и выполняет логику авторизации

Важно: внутренняя сеть между Gateway и бэкендом должна быть надёжной. Заголовки не должны быть изменяемы извне. В облачных архитектурах это достигается через VPC-изоляцию или mTLS.

OAuth 2.0 Integration

Gateway может работать как OAuth Resource Server. Он валидирует Access Tokens против Authorization Server (через introspection или JWKS-верификацию). Для каждого endpoint определяется, какие scopes требуются:

  • /api/orders — scope orders:read для GET, orders:write для POST
  • /api/admin/users — scope admin:users

Управление API-Keys

Для B2B-клиентов без инфраструктуры OAuth Gateway управляет API-Keys. Каждый ключ привязан к потребителю и имеет специфические разрешения. Gateway может ротировать ключи, их отозвать и назначить quotas.

2. Rate Limiting и Quotas

Rate Limiting на Gateway — первая линия защиты от злоупотребления. Отличается от rate limiting в reverse proxy своей гранулярностью:

  • По потребителю: каждый API-Key имеет собственный лимит
  • По endpoint: критичные endpoints имеют более низкие лимиты
  • По комбинации: потребитель может иметь 100 req/min глобально, но только 10 req/min на /api/export
  • По уровням: Free-tier 100 req/h, Pro-tier 1000 req/min, Enterprise без ограничений

Алгоритмы:

  • Fixed Window: счёт за временное окно (например, 100 в минуту). Простой, но возможны всплески на границах окна.
  • Sliding Window: скользящее временное окно, более равномерное распределение.
  • Token Bucket: бакет наполняется токенами за единицу времени, каждый запрос потребляет токен. Позволяет всплески, пока бакет не пуст.

При превышении: 429 Too Many Requests с заголовком Retry-After.

3. Web Application Firewall (WAF) на Gateway

WAF на Gateway фильтрует вредоносные запросы прежде, чем они достигнут бэкенда:

  • SQL Injection: блокирует паттерны вроде ' OR 1=1 -- в параметрах запроса
  • XSS: обнаруживает и блокирует <script> теги во входных данных
  • Path Traversal: блокирует ../../etc/passwd в URL-путях
  • Command Injection: обнаруживает ; rm -rf / в параметрах
  • Anomaly Detection: необычные размеры запроса, комбинации заголовков

Правила WAF могут быть позитивными (whitelist: только известные хорошие запросы) или негативными (blacklist: известные атаки блокируются). Лучшая практика — комбинация: whitelist для критичных endpoints, blacklist для общего трафика.

4. Schema Validation

Gateway валидирует каждый запрос по OpenAPI-схеме:

  • все ли обязательные поля присутствуют?
  • правильны ли типы данных?
  • строки в допустимой длине?
  • значения enum валидны?

Невалидные запросы отклоняются с 400 Bad Request до того, как достигнут бэкенда. Это защищает бэкенд от ошибок на некорректных входных данных и снижает нагрузку.

5. Защита от ботов и обнаружение аномалий

  • Bot Detection: анализ User-Agent, обнаружение headless-браузеров, CAPTCHA-challenge
  • Behavioral Analysis: необычные паттерны доступа (например, 1000 логинов за 1 секунду с одного IP)
  • Geo-Blocking: блокировка запросов из определённых стран
  • IP-Reputation: блокировка известных вредоносных IPs (Threat Intelligence Feeds)

6. mTLS (Mutual TLS)

При mTLS аутентифицируют друг друга не только клиент на сервере, но и сервер на клиенте. Обе стороны предъявляют сертификаты. Gateway может требовать и валидировать клиентские сертификаты — это безопаснее, чем API-Keys, так как сертификаты сложнее украсть и автоматически истекают.

Применение: B2B-APIs, внутренняя Service-to-Service коммуникация, высокорегулируемые отрасли (банки, здравоохранение).

7. Audit Logging и Security Monitoring

Gateway логирует каждый запрос:

  • кто (Consumer-ID, IP)
  • когда (timestamp)
  • что (endpoint, метод)
  • как (statuscode, latency)
  • почему отклонён (какое правило безопасности сработало)

Эти логи питают Security Monitoring (SIEM), alerting и compliance-audits.

Почему безопасность API Gateway важна на практике?

Сценарий 1: Credential Stuffing

Злоумышленник пробует 10.000 украденных пар password/email против endpoint логина. Без rate limiting на Gateway все 10.000 запросов проходят. С rate limiting по потребителям (5 попыток логина в минуту с одного IP) блокируются 9.995.

Сценарий 2: API Scraping

Конкурент пишет бота, который часто запрашивает endpoint /api/products, чтобы скрепить весь каталог. Без quotas и bot detection он получает все данные. С token bucket limiting (100 req/min) и bot detection (headless-browser detection) бот блокируется.

Сценарий 3: утечка внутреннего сервиса

Backend-сервис случайно реализовал Admin-эндпоинт без проверки аутентификации. Без обязательной проверки Auth на уровне Gateway для всех эндпоинтов он становится общедоступным. Когда аутентификация централизована в Gateway, каждый запрос проходит проверку, включая забытый эндпоинт.

Практический пример: конфигурация безопасности Kong API Gateway

Этот пример демонстрирует комплексную конфигурацию безопасности Kong: JWT-аутентификация, Rate Limiting для каждого Consumer, CORS, IP-ограничения, лимиты размера запросов и audit logging. Он выбран потому, что объединяет четыре области безопасности (контроль доступа, управление трафиком, защита от угроз, усиление защиты) в одну декларативную конфигурацию.

# kong-security.yml
# Полная конфигурация безопасности для Kong API Gateway

services:
  - name: payment-api
    url: http://payment-service.internal:3000
    routes:
      - name: payment-route
        paths:
          - /api/payments
        methods:
          - GET
          - POST
          - DELETE
        strip_path: false

  - name: user-api
    url: http://user-service.internal:3001
    routes:
      - name: user-route
        paths:
          - /api/users
        methods:
          - GET
          - POST
          - PUT
        strip_path: false

plugins:
  # --- 1. КОНТРОЛЬ ДОСТУПА ---

  # JWT аутентификация для всех маршрутов
  - name: jwt
    config:
      secret_is_base64: false
      run_on_preflight: true
      maximum_expiration: 3600
      header_names:
        - Authorization

  # ACL для ролевого контроля доступа
  - name: acl
    config:
      allow:
        - admin
        - user
      hide_groups_header: false

  # --- 2. УПРАВЛЕНИЕ ТРАФИКОМ ---

  # Rate Limiting: 100 req/min на Consumer, 1000 req/h
  - name: rate-limiting
    config:
      minute: 100
      hour: 1000
      policy: redis
      redis_host: redis.internal
      redis_port: 6379
      limit_by: consumer
      fault_tolerant: true
      retry_after: true

  # Ограничение размера запроса: макс 1MB тело
  - name: request-size-limiting
    config:
      allowed_size: 1000000
      size_unit: bytes

  # --- 3. ЗАЩИТА ОТ УГРОЗ ---

  # CORS: только разрешённые Origins
  - name: cors
    config:
      origins:
        - https://app.example.com
        - https://admin.example.com
      methods:
        - GET
        - POST
        - PUT
        - DELETE
      headers:
        - Authorization
        - Content-Type
        - X-Request-ID
      credentials: true
      max_age: 3600

  # IP-ограничение: только известные IP-диапазоны
  - name: ip-restriction
    config:
      allow:
        - 10.0.0.0/8
        - 192.168.0.0/16
        - 203.0.113.0/24

  # Request Transformer: добавляет Security Headers
  - name: response-transformer
    config:
      add:
        headers:
          - Strict-Transport-Security:max-age=31536000; includeSubDomains
          - X-Content-Type-Options:nosniff
          - X-Frame-Options:DENY
          - Cache-Control:no-store

  # --- 4. УСИЛЕНИЕ ЗАЩИТЫ ---

  # Prometheus метрики для мониторинга безопасности
  - name: prometheus
    config:
      per_consumer: true
      status_code_metrics: true
      latency_metrics: true

  # Audit logging через HTTP Log Plugin
  - name: http-log
    config:
      http_endpoint: https://siem.internal/api/logs
      method: POST
      timeout: 5000
      keepalive: 30000
      retry_count: 3

consumers:
  - username: web-app
    acls:
      - group: user
    jwt_secrets:
      - key: web-app-key
        secret: ${WEB_APP_SECRET}

  - username: admin-panel
    acls:
      - group: admin
    jwt_secrets:
      - key: admin-key
        secret: ${ADMIN_SECRET}
// jwt-validation.js
// Пример: JWT-валидация с проверкой scope (Node.js)
// Так дополняют валидацию custom-плагин или backend

const jwt = require('jsonwebtoken');
const jwksClient = require('jwks-rsa');

// JWKS Client для ротации ключей
const client = jwksClient({
  jwksUri: 'https://auth.example.com/.well-known/jwks.json',
  cache: true,
  cacheMaxEntries: 10,
  cacheMaxAge: 36000000
});

function getKey(header, callback) {
  client.getSigningKey(header.kid, (err, key) => {
    if (err) return callback(err);
    callback(null, key.getPublicKey());
  });
}

function validateToken(token, requiredScopes) {
  return new Promise((resolve, reject) => {
    jwt.verify(token, getKey, {
      algorithms: ['RS256'],
      audience: 'api.example.com',
      issuer: 'https://auth.example.com'
    }, (err, decoded) => {
      if (err) {
        reject({ code: 'INVALID_TOKEN', message: err.message });
        return;
      }

      // Проверка scope: токен должен содержать все requiredScopes
      const tokenScopes = decoded.scope ? decoded.scope.split(' ') : [];
      const hasAllScopes = requiredScopes.every(s => tokenScopes.includes(s));

      if (!hasAllScopes) {
        reject({
          code: 'INSUFFICIENT_SCOPES',
          message: `Требуемые scopes: ${requiredScopes.join(', ')}`
        });
        return;
      }

      // Токен валиден и содержит все scopes
      resolve(decoded);
    });
  });
}

// Middleware для Express
function requireScopes(...scopes) {
  return async (req, res, next) => {
    const authHeader = req.headers.authorization;
    if (!authHeader || !authHeader.startsWith('Bearer ')) {
      return res.status(401).json({
        error: 'UNAUTHORIZED',
        message: 'Bearer Token erforderlich'
      });
    }

    try {
      const decoded = await validateToken(authHeader.split(' ')[1], scopes);
      req.user = decoded;
      next();
    } catch (err) {
      const status = err.code === 'INSUFFICIENT_SCOPES' ? 403 : 401;
      res.status(status).json({
        error: err.code,
        message: err.message
      });
    }
  };
}

Детальнее

Усиление защиты самого Gateway

Gateway сам по себе является поверхностью атаки. Вот меры по его защите:

  • Защита Admin API: управленческий API Gateway (например, Kong Admin API на порту 8001) не должен быть доступен из интернета. Доступ только через VPN, VPC или localhost.
  • Управление секретами: секреты (JWT-ключи, API-ключи, TLS-ключи) не в открытом виде в конфигах, а в Vault, AWS Secrets Manager или Kubernetes Secrets.
  • TLS-усиление: только TLS 1.2 и 1.3, без старых cipher suites, заголовок HSTS.
  • DDoS-защита: Cloudflare или AWS Shield перед Gateway для защиты от объёмных DDoS-атак.
  • Конфигурация как код: настройки Gateway в Git, изменения через CI/CD, без ручного редактирования в production.

Zero Trust на API Gateway

В Zero Trust модели Gateway не верит никому. Каждый запрос аутентифицируется, включая внутренние. Каждое соединение зашифровано (mTLS). Каждый запрос логируется. Gateway не входит в круг доверия внутренней сети, а является частью защитной линии.

Ротация API ключей

API-ключи должны быть ротируемы. Best practice:

  • ключи имеют срок действия
  • ротация каждые 90 дней или при подозрении на компрометацию
  • grace period: старый и новый ключи действуют параллельно во время миграции
  • автоматическое уведомление Consumer перед истечением срока

Security Headers на Gateway

Gateway устанавливает базовые Security Headers для всех ответов:

HeaderЗначениеЦель
Strict-Transport-Securitymax-age=31536000; includeSubDomainsПринудительно HTTPS
X-Content-Type-OptionsnosniffПредотвращает MIME-sniffing
X-Frame-OptionsDENYПредотвращает clickjacking
Cache-Controlno-storeЗапрет на кеширование чувствительных данных
X-Rate-Limit-Limit100Прозрачная информация о лимите
X-Rate-Limit-Remaining87Оставшиеся запросы

Мониторинг и оповещения

Gateway должен генерировать оповещения в следующих случаях:

  • Резкий рост ответов 401/403 (возможная атака)
  • Превышение rate limit (возможное злоупотребление)
  • Необычный трафик с конкретного IP или от конкретного consumer
  • Уровень ошибок backend выше порога
  • Доступ к Admin API

FAQ: Безопасность API Gateway

1. Зачем аутентификация должна быть на API Gateway, а не в backend?

Централизованная аутентификация на gateway гарантирует, что все API соответствуют одному стандарту безопасности. Backend разгружается и может сосредоточиться на бизнес-логике. Неаутентифицированные запросы вообще не достигают backend. Это снижает количество ошибок, так как пропущенные auth-проверки в backend автоматически перехватываются gateway.

2. Чем rate limiting отличается от quotas?

Rate limiting ограничивает количество запросов за временное окно (например, 100 в минуту). Quotas ограничивают общее количество за более длительный период (например, 10 000 в месяц). Rate limiting защищает от перегрузки в реальном времени, quotas контролируют общее использование и позволяют монетизировать API (Free-tier против Pro-tier).

3. Что такое mTLS и когда его использовать?

mTLS (Mutual TLS) означает, что и клиент, и сервер предоставляют и валидируют сертификаты. Его применяют при B2B API, service-to-service коммуникации и в строго регулируемых отраслях. mTLS безопаснее API-ключей, так как сертификаты сложнее украсть и они автоматически истекают.

4. Как работает валидация схемы на API Gateway?

Gateway валидирует каждый запрос относительно OpenAPI-схемы. Проверяет наличие обязательных полей, правильность типов данных, допустимую длину строк и валидность значений перечислений. Невалидные запросы отклоняются с кодом 400 Bad Request до того, как достигнут backend. Это защищает backend и снижает нагрузку на него.

5. Что такое WAF и чем она отличается от валидации схемы?

WAF (Web Application Firewall) распознает и блокирует паттерны атак, такие как SQL Injection, XSS и Path Traversal. Валидация схемы проверяет структуру запроса по схеме. WAF защищает от атак в содержимом, валидация схемы защищает от структурно некорректных запросов. Оба механизма дополняют друг друга и должны применяться совместно.

6. Как защитить Admin API самого API Gateway?

Admin API не должна быть доступна публично. Она должна быть доступна только через VPN, VPC-Internal или localhost. Кроме того, она должна требовать собственную аутентификацию (отдельные admin-токены, mTLS). Изменения конфигурации должны происходить через CI/CD из версионируемого кода, а не через ручные вызовы Admin API.

7. Что такое Bot Protection на API Gateway?

Bot Protection включает анализ User-Agent, распознание headless-браузеров, CAPTCHA-челленджи и поведенческий анализ. Gateway распознает автоматизированных ботов, которые скребут API или проводят credential stuffing, и блокирует или вызывает челленжи. Дополняется это проверкой IP-репутации и geo-блокированием.

8. Как безопасно ротировать API-ключи?

API-ключи должны иметь срок истечения и регулярно ротироваться (например, каждые 90 дней). Во время ротации старый и новый ключи действительны параллельно (Grace Period), что дает клиенту время на адаптацию. До истечения потребителю отправляется уведомление. При подозрении на компрометацию выполняется немедленная ротация с отзывом старого ключа.

9. Что такое Zero Trust в контексте API Gateway?

В модели Zero Trust gateway никому не доверяет, даже внутренним сервисам. Каждый запрос аутентифицируется и авторизируется, каждое соединение зашифровано (mTLS), каждый запрос логируется. Нет доверенной внутренней сети. Gateway является частью линии защиты, а не частью доверенной зоны.

10. Какие Security Headers должен устанавливать API Gateway?

Strict-Transport-Security (HSTS) для принудительного использования HTTPS, X-Content-Type-Options: nosniff против MIME-sniffing, X-Frame-Options: DENY против clickjacking, Cache-Control: no-store против кеширования чувствительных данных. Также rate-limit-заголовки (X-Rate-Limit-Limit, X-Rate-Limit-Remaining) для прозрачности перед клиентом.

11. Чем безопасность gateway отличается от безопасности backend?

Gateway берет на себя сетевую безопасность (аутентификация, rate limiting, WAF, TLS). Backend отвечает за специфичную для приложения безопасность (проверки владения, бизнес-валидация, безопасность БД). Gateway блокирует несанкционированные запросы до того, как они достигнут backend. Backend проверяет, может ли аутентифицированный пользователь получить доступ к конкретному ресурсу.

12. Что происходит при отказе gateway?

При отказе gateway весь API становится недоступным (Single Point of Failure). Защита: несколько экземпляров gateway за load balancer, автоматический failover, health checks и auto-scaling. Конфигурация gateway должна храниться в БД или в Git, чтобы новые экземпляры могли быстро загрузить конфигурацию.

13. Как интегрировать OAuth 2.0 в API Gateway?

Gateway выступает как OAuth Resource Server. Он валидирует Access Token либо через Introspection (отправляя token на Authorization Server), либо через JWKS-верификацию (проверяя подпись с помощью публичного ключа Authorization Server). Для каждого endpoinта определяются требуемые scopes. Gateway передает claims в backend в виде заголовков.

14. Что такое IP-whitelisting на API Gateway?

IP-whitelisting разрешает запросы только с известных IP-адресов или IP-диапазонов. Применяется для B2B API (только IP партнеров), внутренних API (только VPC-IP) и admin-endpointов. В сочетании с аутентификацией это обеспечивает Defense in Depth: даже при компрометации токена злоумышленник не сможет получить доступ с чужого IP.

15. Как реализовать Audit Logging на API Gateway?

Gateway логирует каждый запрос с ID consumer, IP, timestamp, endpoint, методом, кодом статуса, latency и при отклонении срабатывающим правилом безопасности. Логи отправляются в SIEM-систему (Security Information and Event Management). Оповещения генерируются при аномальных паттернах, например резком росте 401-ответов.

Продолжение пути изучения API

Следующая статья посвящена API Gateway Patterns — архитектурным паттернам вроде Backend for Frontend, API Composition, Protocol Translation и Aggregation, которые реализуются на уровне шлюза.

Источники и дополнительные материалы

  1. https://docs.konghq.com/hub/
  2. https://owasp.org/API-Security/
  3. https://learn.microsoft.com/en-us/azure/api-management/api-management-howto-policies
  4. https://docs.aws.amazon.com/apigateway/latest/developerguide/
  5. https://www.cloudflare.com/learning/ddos/glossary/web-application-firewall-waf/

Рекомендуемые книги по разработке API

Keine Bücher für Kategorie "api-development" gefunden.

Назад к блогу
Share:

Похожие статьи