Kube-rbac-proxy#
Kube-rbac-proxy — это HTTP-прокси для одного исходящего потока, который может выполнять авторизацию RBAC для DropApp API с помощью SubjectAccessReview.
В кластерах DropApp без применения сетевой политики любой pod может выполнять запросы к любому другому pod в кластере. Используйте Kube-rbac-proxy для ограничения запросов только теми модулями, которые предоставляют действительный и авторизованный RBAC токен или клиентский TLS-сертификат.
Преимущества использования Kube-rbac-proxy:
разгружает API DropApp, чтобы он мог обрабатывать фактические запросы, связанные с компонентами кластера, а не запросы от клиентов;
принимает входящие HTTP-запросы, это позволяет гарантировать, что запрос авторизован и имеет право доступа к приложению, а не просто имеет сетевой доступ к объекту.
При входящем запросе Kube-rbac-proxy выясняет, какой пользователь выполняет запрос. Kube-rbac-proxy поддерживает использование клиентских TLS-сертификатов, а также токенов. В случае использования сертификата, он проверяется настроенным центром сертификации.
После того как пользователь прошел аутентификацию, снова используется authentication.k8s.io для выполнения SubjectAccessReview, чтобы авторизовать соответствующий запрос и убедиться, что аутентифицированный пользователь имеет необходимые роли RBAC.
У Kube-rbac-proxy есть все glog флаги для ведения журнала. Чтобы использовать Kube-rbac-proxy, установите несколько флагов:
--upstream:- исходящий поток проксирования;--config-file:- файл, в котором указаны сведения о SubjectAccessReview, их необходимо выполнить по запросу. Например, можно указать, что объекту, выполняющему запрос, должно быть разрешено выполнять развертываниеget podс названиемmy-frontend-app.
Все флаги командной строки Kube-rbac-proxy представлены в таблице ниже.
Синтаксис флага |
Значение |
|---|---|
|
Список путей, разделенных запятыми, по которым шаблон Kube-rbac-proxy сопоставляет входящий запрос. Если запрос не совпадает, Kube-rbac-proxy отвечает кодом состояния 404. Если этот параметр опущен, путь входящего запроса не проверяется. Нельзя использовать с параметром |
|
Значение |
|
Имя поля в заголовке запроса HTTP/2, чтобы сообщить вышестоящему серверу о группах пользователя (по умолчанию |
|
Разделитель, используемый для объединения нескольких имен групп в значении поля заголовка группы (по умолчанию |
|
Имя поля в заголовке запроса HTTP(2), сообщающее вышестоящему серверу об имени пользователя (по умолчанию |
|
Список аудиторий токенов, которые необходимо принять, разделенный запятыми. По умолчанию токен не должен иметь какой-либо конкретной аудитории. Рекомендуется установить конкретную аудиторию |
|
Любой запрос, представляющий сертификат клиента, подписанный одним из уполномоченных в файле |
|
Файл конфигурации для настройки Kube-rbac-proxy |
|
Список путей, разделенных запятыми, по которым шаблон Kube-rbac-proxy сопоставляет входящий запрос. Если запрос совпадает, он перенаправляет запрос без выполнения аутентификации или проверки авторизации. Нельзя использовать с флагом |
|
Путь к файлу kubeconfig*, указывающий, как подключиться к серверу API. Если значение |
|
Сертификат сервера OpenID будет проверен в файле oidc-ca при установке флага, в противном случае будет использоваться корневой набор CA хоста |
|
Идентификатор клиента для клиента OpenID Connect должен быть установлен, если установлен |
|
Идентификатор групп в заявке JWT |
|
Флаг, при установке которого все группы будут иметь префикс с этим значением, чтобы предотвратить конфликты с другими стратегиями аутентификации |
|
URL-адрес издателя OpenID, должен быть указан только в формате HTTPS. Если он установлен, он будет использоваться для проверки веб-токена OIDC JSON (JWT) |
|
Поддерживаемые алгоритмы подписи, по умолчанию |
|
Идентификатор пользователя в заявлении JWT, по умолчанию установлено значение «электронная почта» |
|
Порт для безопасного обслуживания конечных точек, специфичных для прокси-сервера (например, |
|
Адрес, который должен прослушивать HTTP-сервер Kube-rbac-proxy |
|
Файл, содержащий сертификат x509 по умолчанию для HTTPS. Сертификат ЦС, если таковой имеется, объединенный после сертификата сервера |
|
Список наборов шифров для сервера, разделенный запятыми. Если этот параметр не указан, будут использоваться наборы шифров Go по умолчанию |
|
Минимальная поддерживаемая версия TLS 1.2. По умолчанию |
|
Файл, содержащий закрытый ключ x509 по умолчанию, соответствующий |
|
Интервал, с которым следует отслеживать изменения сертификата TLS 1.2, по умолчанию равен одной минуте |
|
Исходящий URL-адрес для прокси-сервера после успешной аутентификации и авторизации запросов |
|
ЦС, который исходящий поток использует для TLS 1.2-соединения. Это необходимо, когда исходящий поток использует TLS 1.2 и собственный сертификат ЦС |
|
Флаг, при установке которого клиент будет использоваться для аутентификации прокси-сервера в исходящем направлении. Также требуется установить |
|
Флаг, соответствующий сертификату из |
|
Флаг, заставляющий h2c взаимодействовать с исходящим потоком. Это необходимо, когда исходящий поток использует только h2c (открытый текст HTTP/2 — небезопасный вариант HTTP/2). Например, сервер go-grpc в небезопасном режиме без TLS 1.2 |
Глобальные флаги: |
|
|
Помощь для Kube-rbac-proxy |
|
Флаг, позволяющий записывать файлы журналов в текущий каталог (не ведет запись, если |
|
Флаг, позволяющий вывести информацию о версии и выйти из приложения |
RBAC различается по двум типам, которые необходимо авторизовать: ресурсные и нересурсные. Например, авторизация запроса ресурса может заключаться в том, что запрашивающему объекту необходимо авторизоваться для выполнения действия get при развертывании DropApp.
Выполните следующие действия для защиты приложения с помощью Kube-rbac-proxy (в примере ниже - prometheus-example-app). В этом примере запрашивающему объекту разрешено вызывать подресурс proxy в службе DropApp с именем kube-rbac-proxy. Это настраивается в файле, переданном Kube-rbac-proxy с флагом --config-file. Кроме того, необходимо установить флаг --upstream для настройки приложения, которое должно быть проксировано при успешной аутентификации и авторизации.
Kube-rbac-proxy также требует доступа RBAC для выполнения TokenReviews, а также SubjectAccessReviews. Это API-интерфейсы, доступные в DropApp API для аутентификации и последующей проверки авторизации объекта.