Чем более заметные и сложные развертывания 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
Кластеррол
Кластеррол используется для предоставления разрешений для ресурса, не имеющего наменения. Кластерролы имеют несколько применений. Вы можете использовать кластеррол для:
- Определите разрешения на ресурсы с именами и предоставляются в пределах отдельных пространств имен
- Определите разрешения на ресурсы с именами и предоставляются во всех пространствах имен
- Определите разрешения на ресурсы с кластером
Чтобы определить роль в пространстве имен, используйте роль; Чтобы определить роль в кластере, мы используем кластеррол.
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»