Безопасность & API
Безопасность
По умолчанию аутентификация на основе сертификата, но поддерживаются внешние источники.
Аутентификация на основе сертификата.
Файл ~/.kube/config Блоки файла:
- Clusters - список кластеров
- Users - пользователи
- Contexts - объединение пользователя и кластера
- Current-context
Авторизация RBAC (пользователь - действие - ресурс). По умолчанию запрещено все что не разрешено. Роли определяют правила, RoleBindings определяют принадлежность пользователей к ролям. Пример настройки ролей:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: shield
name: read-deployments
rules:
- verbs: ["get", "watch", "list"] <<==== Allowed actions
apiGroups: ["apps"] <<==== on resources
resources: ["deployments"] <<==== of this type
Пример RoleBinding:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-deployments
namespace: shield
subjects:
- kind: User
name: sky <<==== Name of the authenticated user
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: read-deployments <<==== This is the Role to bind to the user
apiGroup: rbac.authorization.k8s.io
Свойства правил роли:
verbs ["get", "watch", "list", "create", "update", "patch", "delete"]
ApiGroups (в пределах namespace):
apiGroup | Ресурс |
"" | pods, secrets |
“storage.k8s.io” | storageclass |
“apps” | deployments |
Полный список API ресурсов:
kubectl api-resources --sort-by name -o wide
Можно использовать звездочку.
Все роли используются только в контексте namespace!
Кластерные роли и привязки
ClusterRoleBindings используется для создания шаблонов ролей и привязки их к конкретным ролям.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole <<==== Cluster-scoped role
metadata:
name: read-deployments
rules:
- verbs: ["get", "watch", "list"]
apiGroups: ["apps"]
resources: ["deployments"]
Пользователи
Интересная статья Еще одна, тоже стоит почитать
Обычных пользователей нельзя добавить через вызовы API. Возможные варианты:
- Базовая аутентификация (basic auth):
- передача конфигурации API-серверу со следующим (или похожим) содержимым: password, username, uid, group;
- Клиентский сертификат X.509:
- создание секретного ключа пользователя и запроса на подпись сертификата;
- заверение его в центре сертификации (Kubernetes CA) для получения сертификата пользователя;
- Bearer-токены (JSON Web Tokens, JWT):
- OpenID Connect;
- слой аутентификации поверх OAuth 2.0;
- веб-хуки (webhooks).
Основные команды
Параметр | Описание |
kubectl describe clusterrole role_name | Описание роли |
kubectl get clusterrolebindings | grep role_name | Список пользователей с такой ролью |
kubectl describe clusterrolebindings role_name | Информация по сопоставлению |