Authorization of Kubernetes
K8s-authz - це проміжне програмне забезпечення авторизації Kubernetes (k8s), засноване на Casbin, яке використовує RBAC (Role-Based Access Control) та ABAC (Attribute-Based Access Control) для здійснення політики доступу. Це проміжне програмне забезпечення інтегрується з валідаційним вебхуком Kubernetes для перевірки політик, визначених Casbin, для кожного запиту до ресурсів K8s. Користувацькі контролери вхідних даних реєструються в Kubernetes за допомогою ValidatingAdmissionWebhook
для виконання перевірок об'єктів запитів, які надсилаються сервером API, та надання відповіді про те, чи слід дозволити або відхилити запит.
Для визначення, коли надсилати вхідні запити до контролера вхідних даних, було реалізовано валідаційний вебхук. Цей вебхук проксіює запити на будь-який тип ресурсу K8s або під-ресурсу та виконує перевірку політики. Користувачам дозволяється виконувати операції з цими ресурсами лише у випадку, якщо вони авторизовані виконавцем Casbin. Виконавець enforcer перевіряє ролі користувача, як визначено в політиках. Кластер K8s є цільовим середовищем розгортання для цього проміжного програмного забезпечення.
Вимоги
Перед початком переконайтеся, що у вас є наступне:
- Працюючий кластер Kubernetes. Ви можете налаштувати локальний кластер за допомогою Docker або налаштувати повноцінне середовище Kubernetes на вашому сервері. Для детальних інструкцій зверніться до цього посібника для налаштування локального кластера Kubernetes на Windows або цього посібника для налаштування кластера на Linux.
- Kubectl CLI. Інструкції з встановлення Kubectl на Windows можна знайти тут, а для Linux - тут.
- OpenSSL
Використання
Дотримуйтесь цих кроків для використання K8s-authz:
Згенеруйте сертифікати та ключі для кожного користувача за допомогою OpenSSL. Виконайте нижченаведений скрипт:
./gen_cert.sh
Збудуйте Docker-образ з Dockerfile вручну, виконавши наступну команду. Не забудьте змінити версію збірки в команді та у файлі розгортання file відповідно.
docker build -t casbin/k8s_authz:0.1 .
Визначте політики Casbin у файлах model.conf та policy.csv. Для отримання додаткової інформації про те, як працюють ці політики, зверніться до документації.
Перед розгортанням ви можете змінити порти у файлі main.go, а також у конфігурації валідаційного вебхука file, виходячи з ваших конкретних вимог.
Розгорніть контролер валідації та вебхук на кластері Kubernetes, виконавши наступну команду:
kubectl apply -f deployment.yaml
Для продакшн-сервера рекомендується створити Kubernetes
secret
для захисту сертифікатів:kubectl create secret generic casbin -n default \
--from-file=key.pem=certs/casbin-key.pem \
--from-file=cert.pem=certs/casbin-crt.pemПісля завершення вищевказаних кроків вам потрібно оновити директорію сертифікатів у main.go та manifests з директорією створеного
secret
.
Тепер сервер має працювати та бути готовим до перевірки запитів до ресурсів K8s та здійснення політик відповідно.