Рубрики
Uncategorized

Демистификация Kubernetes RBAC

Чем более заметные и сложные развертывания Kubernetes становятся, тем важнее это определить … Tagged with Kubernetes, DevOps.

Чем более заметные и сложные развертывания Kubernetes становятся, тем важнее определить строгие элементы управления доступа и более жесткую безопасность. В этом блоге, Касун объяснил, как RBAC может быть реализован в кластерах Kubernetes, чтобы ограничить разрешения пользователей только соответствующими ресурсами.

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

Чтобы дать вам идею, это некоторые из известных особенностей Kubernetes:

  • Автоматическое планирование
  • Возможности самовосстановления
  • Автоматизированные развертывания и откат
  • Горизонтальное масштабирование и баланс нагрузки
  • Согласованность окружающей среды для разработки, тестирования и производства
  • Инфраструктура, свободно связанная со всем компонентом, может действовать как отдельная единица
  • Обеспечивает более высокую плотность использования ресурсов
  • Предлагает функции, готовые к предприятиям
  • Управление, ориентированное на приложения
  • Автомально-масштабируемая инфраструктура
  • Предсказуемая инфраструктура

Обзор контроля доступа на основе ролей (RBAC)

RBAC — это измерение безопасности, предназначенное для ограничения доступа к ценным ресурсам на основе ролей, назначенных объекте (пользователь, групповая или сервисная учетная запись). Мы можем увидеть RBAC в современных приложениях и облачных провайдерах. Давайте определим, почему RBAC важен для нас.

В качестве примера, давайте предположим, что ваше приложение не использует какую -либо систему RBAC. Администратор использует свое имя пользователя и пароль для входа в систему и имеет полный доступ к системе. В этом случае, если мы добавим обычных пользователей, они также будут иметь полное разрешение в системе.

Зачем Kubernetes RBAC?

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

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

Глядя на ресурсы Kubernetes RBAC

Kubernetes имеют два вида ролей для определения действий, которые пользователи могут выполнять в кластере. Кластерроль и роли работают в Kubernetes в кластере или пространстве имен соответственно. В Kubernetes вы можете использовать RBAC, чтобы назначить роли предметам Kubernetes (пользователей, групп и учетных записей услуг) с помощью розовых и кластерролеводов. Kubernetes позволил администраторам создавать пользовательские роли, включая, но не ограничиваясь встроенными ролями следующим образом:

Кластер-админ: Роль «суперпользователя» Kubernetes, этот пользователь может выполнить любое действие на любом ресурсе. Мы можем использовать ClusterRoleBinding для предоставления полного доступа к кластеру или общенациональности для полного доступа в пространство имен. Админ: Имеет неограниченный доступ к чтению/записи к ресурсам в пространстве имен. Эта роль может быть создана с помощью роли и розовых связей с конкретным пространством имен. РЕДАКТИРОВАТЬ: Предоставьте полный доступ к чтению/записи в пространство имен. Он не может просматривать или изменять роль или розовые привязки. Просмотр: Эта роль допускает доступ только для чтения в данном пространстве имен.

Учетные счета

Учетные записи услуг Kubernetes используются для создания управляемых ресурсов Kubernetes через API Kubernetes, предназначенные для использования объектами Kubernetes, такими как Pods для аутентификации сервера API Kubernetes или внешних служб.

Роль

Роль всегда устанавливает разрешения в определенном пространстве имен; Когда вы создаете роль, вы должны указать пространство имен, к которому он принадлежит. Ниже приведен пример манифеста YAML для роли Kubernetes.

Примечание: Приведенные ниже команды были протестированы в Kubernetes v1.17

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # "" indicates the core API group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

Розовое связывание

Розовое связывание дает разрешения, определенные в роли пользователю или набору пользователей. Он содержит список предметов (пользователей, групп или учетных записей услуг) и ссылается на предоставленную роль. Розовая связывание предоставляет разрешения в определенном пространстве имен. Ниже приведен пример манифеста YAML для kubernetes rolebinding.

apiVersion: rbac.authorization.k8s.io/v1
namespace.
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane 
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role 
  name: pod-reader you wish to bind to
  apiGroup: rbac.authorization.k8s.io

Кластеррол

Кластеррол используется для предоставления разрешений для ресурса, не имеющего наменения. Кластерролы имеют несколько применений. Вы можете использовать кластеррол для:

  1. Определите разрешения на ресурсы с именами и предоставляются в пределах отдельных пространств имен
  2. Определите разрешения на ресурсы с именами и предоставляются во всех пространствах имен
  3. Определите разрешения на ресурсы с кластером

Чтобы определить роль в пространстве имен, используйте роль; Чтобы определить роль в кластере, мы используем кластеррол.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  # "namespace" omitted since ClusterRoles are not namespaced
  name: secret-reader
rules:
- apiGroups: [""]
  #
  # at the HTTP level, the name of the resource for accessing Secret
  # objects is "secrets"
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

ClusterRoleBinding

ClusterRoleBinding используется для предоставления доступа к кластеру для пользователя или набора пользователей, которые мы называем в качестве субъектов (пользователей, групп или учетных записей услуг). Ниже приведен пример для ClusterRoleBinding:

# This cluster role binding allows anyone in the "manager" group to read secrets in any namespace.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-secrets-global
subjects:
- kind: Group
  name: manager # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: secret-reader
  apiGroup: rbac.authorization.k8s.io

Практическое использование случая использования RBACs

Роль и ролевой связывание

Мы можем начать самым простым способом, применив RBAC в Kubernetes, используя роль и сочинение роли.

Сценарий — у нас есть имя учетной записи сервиса ServiceAccount1 и нужен доступ ко всем ресурсам в пространстве имен app1 Анкет

apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: default
  name: serviceAccount1

Примечание: Мы предполагаем, что ServiceAccount1 уже был создан.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: app1
  name: app1admin
rules:
- apiGroups: ["*"]
  resources: ["*"]
  verbs: ["*"]

В вышеупомянутой роли YAML мы предоставляем полный доступ ко всем ресурсам в APP1 APP1. Как я уже упоминал ранее, роли делятся именами, поэтому нам нужно указать, какую роль пространства имен применяется при создании роли. Далее мы рассмотрим розовое связывание.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: app1adminrolebinding
  namespace: app1
subjects:
- kind: ServiceAccount
  name: serviceAccount1
  apiGroup: ""
roleRef:
  kind: Role
  name: app1admin
  apiGroup: ""

Из розового связывания мы связываем учетную запись обслуживания с роли, которую мы создали ранее. Так что теперь учет сервиса имеет доступ только к ресурсам внутри пространства имен App1.

Можно связать учетную запись сервиса из другого пространства имен, чтобы учетная запись службы могла получить доступ к ресурсам в пространстве имен APP1 с ролью, прикрепленной к розовому связующему.

Кластерроль и розовая связка

Кластерролы не принадлежат ни одному пространству имен. Поэтому Clusterroles не охватывает какое -либо пространство имен. Но если кластеррол связан с учетной записью сервисной учетной записи с помощью розовой связывания, разрешения кластеррола применяются только к пространству имен, которое создало розовое связывание.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: adminbinding
  namespace: app1
subjects:
- kind: ServiceAccount
  name: serviceAccount1
  namespace: app1
  apiGroup: ""
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: ""

Кластерроль и кластерролеруя

Кластеррол используется для предоставления разрешений для ресурсов в кластере. Кластерроль или кластерролерубирование не принадлежит ни одному пространству имен. Поэтому назначенные разрешения имеют кластерную. Например, сервисной учетной записи необходимо получить доступ ко всем ресурсам в кластере. Таким образом, мы можем использовать кластеры и кластерролерубинды, чтобы предоставить ему доступ ко всем постоянным объемам в кластере. Пример кластеррола и кластерролезинга показан ниже:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: storageadminclusterrolebinding
subjects:
- kind: ServiceAccount
  name: storageaccess
  apiGroup: ""
  namespace: app1
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: ""

Резюме

С приведенными выше примерами мы можем понять преимущества и случаи использования Kubernetes RBAC. Ниже приведено краткое изложение того, что мы обсуждали:

  • Роли и ролики должны существовать в одном и том же пространстве имен.
  • RoleBindings может существовать в отдельных пространствах имен для счетов обслуживания.
  • RoleBindings может связать кластерные роли, но они предоставляют доступ только к пространству имен привязки.
  • ClusterRoleBindings ссылаются на учетные записи с кластерами роли и предоставят доступ во всех ресурсах.
  • ClusterRoleBindings не может ссылаться на роли. ‍ Squadcast является инструментом управления инцидентами, который построен для SRE. Ваша команда может избавиться от нежелательных оповещений, получать соответствующие уведомления, работать в сотрудничестве, используя виртуальные военные залы, и использовать автоматизированные инструменты, такие как Runbooks, чтобы устранить труд.

Оригинал: «https://dev.to/squadcast/demystifying-kubernetes-rbac-177e»