Разработчики изучают современные языки программирования и облачные технологии в стремлении повысить продуктивность и ускорить работу. Учитывая гибкость нативных облачных экосистем, возникает все больше вопросов, связанных с безопасностью вообще и управлением доступом в частности. Многие организации внедряют Kubernetes (K8s) как основной инструмент развертывания и администрирования контейнеризированных приложений, но задаются вопросом, как реализовать управление доступом, особенно аутентификацию, в контексте K8s. В этой статье мы ответим на этот вопрос, рассмотрев несколько тем:

  1. Распространенные методы аутентификации.

  2. Интеграция этих методов с Kubernetes.

Распространенные подходы к аутентификации

LDAP

Многие организации уже используют сервис каталогов, например Active Directory (AD), для хранения информации о пользователе и организации. Большинство этих систем поддерживают протокол LDAP. С помощью протокола LDAP пользователи в организации могут проходить аутентификацию на основе имеющейся информации, которой управляет ИТ-отдел. Более того, LDAP позволяет приложениям использовать для управления доступом дополнительную информацию, например, о группах и политиках. Это оптимальный вариант для бизнес-приложений и внутренних рабочих нагрузок.

OAuth 2.0

При использовании сторонних веб-приложений пользователям часто приходится проходить аутентификацию во множество разрозненных систем, для которых центральный сервис идентификации недоступен. Конечно, можно создавать уникальные аккаунты для каждого сервиса, но масштабирование при таком подходе невозможно. Протокол OAuth 2.0 призван решить эту задачу. Обычно он используется в реализациях методов  аутентификации (потоков), например в стандарте  OpenID Connect. Главное преимущество OAuth 2.0 — возможность утверждать уровень доступа для приложений. Это позволяет использовать существующий идентификатор (например, аккаунт Google), чтобы проходить аутентификацию и контролировать доступ к информации в сторонних приложениях.

JSON Web Token (JWT)

JSON Web Token все чаще используются для аутентификации, особенно для API. Эти токены состоят из объектов JSON в кодировке Base64URL: заголовок, полезная нагрузка и подпись. Криптографическая подпись рассчитывается с помощью общего секрета и пары открытого и закрытого ключей. С ее помощью можно проверить источник объекта. Например, при наличии общего секрета подпись JWT можно вычислить с помощью алгоритма HS256 (HMAC с SHA-256):

signature = HS256(
    Base64URLEncoding(header) + '.' + Base64URLEncoding(payload),
    secret
)

Итоговый JWT состоит из трех компонентов:

Base64URLEncoding(header) + '.' + Base64URLEncoding(payload) + '.' + signature

Эти токены не обеспечивают безопасность данных, поскольку не зашифрованы, но этот простой подход можно использовать в API для идентификации вызывающих объектов. JWT — это хороший вариант для интеграции провайдеров аутентификации с пользовательскими API и взаимодействием между сервисами. Часто он реализуется с помощью потоков OAuth 2.0.

HMAC

В примере выше используется HMAC с алгоритмом SHA-256 для вычисления подписи заголовка токена и полезной нагрузки. HMAC можно использовать для полезной нагрузки с самыми разными спецификациями. В JWT, например, это объект JSON, но тот же механизм можно использовать и с другими данными, чтобы выполнить аутентификацию подписанного сообщения.

Двусторонний TLS или Mutual TLS (mTLS)

Аутентификация TLS сегодня используется почти во всех веб-приложениях. Этот механизм использует сертификаты для аутентификации веб-сайта или веб-сервиса, чтобы клиент был уверен в надежности сервера. Двусторонний TLS обеспечивает аутентификацию обеих сторон: клиент проверяет сервер, а сервер проверяет клиента, чтобы применить политики управления доступом и авторизации. Двусторонний TLS обычно используется для взаимодействия между службами и компаниями, где существует ограниченное и известное число клиентов, у которых есть доступ к общим конечным точкам.

Интеграция приложений с аутентификацией и Kubernetes

Мы рассмотрели распространенные подходы к аутентификации, а теперь поговорим о том, как использовать их, если приложения развернуты в Kubernetes. K8s дает гибкие возможности для реализации решений, отвечающих индивидуальным потребностям организаций. Рассмотрим несколько методов, которые подойдут почти для любого сценария.

Ingress-контроллер

Ingress-контроллеры — это самый популярный механизм для связи пользователей с приложениями в Kubernetes. При выборе контроллера нужно учесть много факторов, поскольку у каждого контроллера свои технологии и методы реализации. Среди критериев выбора, например, поддержка подходов к аутентификации, о которых мы говорили.

Traefik  содержит промежуточный слой ForwardAuth, с помощью которого можно делегировать аутентификацию внешнему сервису. Если использовать эту возможности в стратегии K8s Ingress, все сервисы для входящего потока трафика получают преимущества управления аутентификацией без лишних сложностей на уровне отдельного сервиса. TraefikEE упрощает управление поставщиками аутентификации, интегрируя поддержку LDAP, OAuth 2.0, JWT и HMAC в виде единого решения.

Серверы аутентификации

Возможности аутентификации с помощью Ingress-контроллера можно дополнить выделенными серверами аутентификации. Authelia — это пример сервера аутентификации и авторизации с открытым кодом, который работает с K8s и легко интегрируется с технологиями Ingress, например Traefik. Помимо описанных ранее механизмов, эти сервисы предоставляют расширенные возможности аутентификации, например двухфакторную аутентификацию (2FA)  и единый вход (SSO).

Заключение

Наладить управление доступом к приложениям с помощью аутентификации важно в любой инфраструктуре, а в Kubernetes особенно. Тщательно выбирая архитектурные шаблоны и технологии, можно реализовать оптимальные подходы к аутентификации без лишних усилий.

Traefik — это отличный вариант для Kubernetes. Traefik с открытым исходным кодом и поддержкой большого и активного сообщества доступен бесплатно и совместим с большинством новейших улучшений в Kubernetes Ingress.

Краткое описание решения на русском языке

Запросить Демо или задать вопрос вы можете через нашу форму.

P.S. 18 ноября компания Traefik проводит вебинар, посвященный сложностям, связанным с управлением приложениями в разных типах контейнеров, а также рассказывают, как можно упростить эту задачу.

Регистрация доступна по ссылке.

Комментарии (0)