Перейти до основного контенту

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:

  1. Згенеруйте сертифікати та ключі для кожного користувача за допомогою OpenSSL. Виконайте нижченаведений скрипт:

    ./gen_cert.sh
  2. Збудуйте Docker-образ з Dockerfile вручну, виконавши наступну команду. Не забудьте змінити версію збірки в команді та у файлі розгортання file відповідно.

    docker build -t casbin/k8s_authz:0.1 .
  3. Визначте політики Casbin у файлах model.conf та policy.csv. Для отримання додаткової інформації про те, як працюють ці політики, зверніться до документації.

  4. Перед розгортанням ви можете змінити порти у файлі main.go, а також у конфігурації валідаційного вебхука file, виходячи з ваших конкретних вимог.

  5. Розгорніть контролер валідації та вебхук на кластері Kubernetes, виконавши наступну команду:

    kubectl apply -f deployment.yaml
  6. Для продакшн-сервера рекомендується створити 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
  7. Після завершення вищевказаних кроків вам потрібно оновити директорію сертифікатів у main.go та manifests з директорією створеного secret.

Тепер сервер має працювати та бути готовим до перевірки запитів до ресурсів K8s та здійснення політик відповідно.