Перейти к содержимому
GUARDCORE Инженерная база знаний Поиск

Блог

ServiceAccount и RBAC: почему сетевая защита Kubernetes невозможна без контроля API

РазделБлог
ФорматПрактический разбор
ЦиклGuardCore
Чтение3 минуты

Кратко

Можно идеально ограничить сетевые соединения pod, но оставить приложению право менять Kubernetes API. Тогда сетевой контроль будет неполным. Поэтому Kubernetes нужно защищать минимум в двух плоскостях: сеть + API управления Что такое ServiceAccount ServiceAccount — идентичность для workload. Это не пользователь приложения…

Можно идеально ограничить сетевые соединения pod, но оставить приложению право менять Kubernetes API.

Тогда сетевой контроль будет неполным.

Поэтому Kubernetes нужно защищать минимум в двух плоскостях:

сеть
+
API управления

Что такое ServiceAccount

ServiceAccount — идентичность для workload.

Это не пользователь приложения и не системный администратор.

Он нужен, чтобы pod мог аутентифицироваться в Kubernetes API.

Default ServiceAccount

В каждом namespace существует default ServiceAccount.

Если pod не указал другой, он может использовать его.

Это удобно, но не означает, что всем приложениям действительно нужен API token.

ServiceAccount token

Современный Kubernetes использует краткоживущие bound tokens.

Но даже короткоживущий credential остаётся credential.

Если приложение Kubernetes API не использует, разумно отключить автоматическое монтирование:

automountServiceAccountToken: false

RBAC

RBAC расшифровывается Role-Based Access Control.

ServiceAccount определяет кто.

RBAC определяет что ему разрешено.

Основные объекты:

  • Role;
  • ClusterRole;
  • RoleBinding;
  • ClusterRoleBinding.

Пример минимального права

Приложению нужно читать только ConfigMap в своём namespace.

Ему не требуется:

  • читать Secrets всего кластера;
  • создавать pods;
  • менять NetworkPolicy;
  • создавать RoleBinding;
  • удалять namespaces.

Именно это и есть least privilege.

Почему широкий RBAC опасен

Представим:

уязвимость frontend
       ↓
ServiceAccount token
       ↓
широкий RBAC
       ↓
Kubernetes API

Если ServiceAccount может создавать pods, нарушитель потенциально может запустить собственный workload.

Если может читать Secrets — получить credentials.

Если может менять NetworkPolicy — изменить сетевую модель.

Если может создавать ClusterRoleBinding — последствия ещё серьёзнее.

NetworkPolicy не заменяет RBAC

NetworkPolicy отвечает:

может ли workload установить сетевое соединение?

RBAC отвечает:

может ли identity выполнить действие через Kubernetes API?

Это разные уровни.

Ограничение доступа к API

Кроме RBAC полезно контролировать:

  • каким workload API вообще доступен;
  • используется ли API через штатный endpoint;
  • есть ли telemetry обращений;
  • какие ServiceAccount обращаются к API;
  • соответствует ли это назначению приложения.

Необычный доступ обычного web-приложения к Kubernetes API — полезный detection signal.

Кто может менять NetworkPolicy

Это важный аудиторский вопрос.

Допустим, ИБ создала строгие NetworkPolicy.

Если обычный DevOps pipeline может бесконтрольно удалить их, архитектура неустойчива.

Необходимо определить:

  • кто владелец policy;
  • кто утверждает изменения;
  • где хранится policy;
  • есть ли GitOps;
  • кто имеет права create/update/delete.

Кто может менять labels

NetworkPolicy часто опирается на labels.

Например:

role=backend

Если приложение или пользователь может произвольно присвоить себе security-sensitive label, он может попасть под другое правило.

Поэтому labels, используемые в политике, тоже являются частью security boundary.

RoleBinding vs ClusterRoleBinding

По возможности права следует ограничивать namespace.

Cluster-wide permissions нужны не всем.

Особенно внимательно стоит относиться к:

  • cluster-admin;
  • wildcard actions;
  • wildcard resources;
  • доступу к Secrets;
  • правам impersonate;
  • bind/escalate;
  • созданию privileged workloads.

Что проверять

Для критичных namespace:

  1. какие ServiceAccount существуют;
  2. какой используется каждым Deployment;
  3. где включён automount token;
  4. какие RoleBinding и ClusterRoleBinding привязаны;
  5. есть ли wildcard permissions;
  6. кто читает Secrets;
  7. кто меняет NetworkPolicy;
  8. кто может создавать privileged pod.

Практическая модель

workload
   |
ServiceAccount
   |
RBAC
   |
Kubernetes API

И отдельно:

workload
   |
NetworkPolicy
   |
network

Компрометация одного уровня не должна автоматически давать полный контроль над другим.

Главное

В Kubernetes identity становится такой же важной частью безопасности, как IP и firewall.

Поэтому зрелая микросегментация — это не только frontend → backend, но и минимальные API-полномочия конкретного ServiceAccount.

Следующая статья посвящена ingress и особенно egress — исходящим соединениям, которые часто остаются полностью открытыми.

Редакция GuardCore

Материал подготовлен на основе указанных в тексте нормативных источников и практических оснований. При существенном обновлении дата актуализации отображается рядом с датой публикации.

Обсуждение материала

Дополните материал практическим опытом или сообщите о неточности. Комментарий появится после проверки.

Форма защищена от автоматических публикаций. Все комментарии проходят модерацию.